|The Start-up of You Reid Hoffman, Ben Casnocha 2012: Crown Business ISBN: 978-0307888907 (E-book and audiobook also available. The Toronto Public Library carries this book.)|
|The Start-up of You Reid Hoffman, Ben Casnocha 2012: Crown Business ISBN: 978-0307888907 (E-book and audiobook also available. The Toronto Public Library carries this book.)|
Today is my penultimate day at IBM! Having successfully turned my projects over to another developer (hooray for the habit of organizing project-related files in Lotus Connections Activities), I’ve been focusing on getting things ready for the traditional goodbye e-mail, which I plan to send tomorrow.
I dug around in the Lotus Connections Profiles API to see if I could get a list of my contacts’ e-mail addresses. I fixed a small bug in the feed exporter of the Community Toolkit (w4.ibm.com/community for people in the IBM intranet) and exported my contacts, giving me a list of 530 IBMers who had accepted or sent me an invitation to connect.
Not everyone participates in that Web 2.0 network, though, so I wanted to analyze my sent mail to identify other people to whom I should send a note. I couldn’t find a neat LotusScript to do the job, and I couldn’t get the NSF to EML or mbox converter to work. Because I didn’t need all the information, just the recipients, subjects, and times, I wrote my own script (included at the end of this blog post).
I used the script to summarize the messages in my sent mail folder, and crunched the numbers using PivotTables in Microsoft Excel. I worked with monthly batches so that it was easier to find and fix errors. I decided to analyze all the mail going back to the beginning of last year in order to identify the people I mailed the most frequently, and to come up with some easy statistics as well.
Spiky around project starts/ends, I’d guess.
I wanted to see which roles I tended to e-mail often, so I categorized each recipient with their role. I distinguished between people I’d worked with directly on projects (coworkers) and people who worked with IBM but with whom I didn’t work on a project (colleagues). The numbers below count individual recipients.
Number of people
Number of individual
Average e-mails sent
As it turns out, I sent a lot of mail to a lot of people throughout IBM, mostly in response to questions about Lotus Connections, Idea Labs, or collaboration tools.
Now I can sort my summarized data to see whom I e-mailed the most often, and add more names to my don’t-forget-to-say-goodbye list. If all goes well, I might even be able to use that mail merge script. =)
The following agent processes selected messages and creates a table with one row per recipient, e-mailing the results to the specified mail address. It seems to choke on calendar entries and other weird documents, but if you go through your sent mail box in batches (Search This View by date is handy), then you should be able to find and delete the offending entries.
Option Public Dim TempNitem As NotesItem Dim TempNm As NotesName Dim session As NotesSession Dim db As NotesDatabase Sub Initialize mailAddress = "[email protected]" Dim ws As New NotesUIWorkspace Dim uidoc As NotesUIDocument Dim partno As String Dim db As NotesDatabase Dim view As NotesView Dim doc As NotesDocument Dim collection As NotesDocumentCollection Dim memo As NotesDocument Dim body As NotesRichTextItem Dim range As NotesRichTextRange Dim count As Integer Set session = New NotesSession Set db = session.CurrentDatabase Set collection = db.UnprocessedDocuments Dim FldTitles(3) As String FldTitles(0) = "E-mail" FldTitles(1) = "Subject" FldTitles(2) = "Date sent" Set maildoc = db.CreateDocument maildoc.Form = "Memo" maildoc.Subject = "Summary" maildoc.SendTo = mailAddress Dim ritem As NotesRichTextItem Set ritem=New NotesRichTextItem(maildoc,"body") ' passing the rich text item & other relevant details Set ritem = CreateTable(FldTitles, collection, ritem, "Sent items", "Summary created on " + Format(Now, "YYYY-MM-DD")) maildoc.send(False) End Sub Function CreateTable(FldTitles As Variant, doccoll As NotesDocumentCollection, rtitem As NotesRichTextItem,msgTitle As String,msgBody As String ) As NotesRichTextItem 'http://searchdomino.techtarget.com/tip/0,289483,sid4_gci1254682_mem1,00.html 'Takes Documentcollection & creates tabular information on to the passed rtitem (rich text item) Set ritem=rtitem Set rtnav = ritem.CreateNavigator Set rstyle=session.CreateRichTextStyle '=================================================== 'heading in the body section of the mail rstyle.Bold=True rstyle.NotesColor=COLOR_RED rstyle.Underline=True rstyle.NotesFont=FONT_COURIER rstyle.FontSize=12 Call ritem.AppendStyle(rstyle) ritem.AppendText(msgTitle) rstyle.Underline=False rstyle.NotesColor=COLOR_BLACK ritem.AddNewline(2) rstyle.FontSize=10 rstyle.Bold=False rstyle.NotesColor=COLOR_BLACK Call ritem.AppendStyle(rstyle) ritem.AppendText(msgBody) ritem.AddNewline(1) '=================================================== rows=doccoll.Count +1 cols=CInt(UBound(FldTitles)) Call ritem.AppendTable(1, cols) Dim rtt As NotesRichTextTable Call rtnav.FindFirstElement(RTELEM_TYPE_TABLE) Set rtt = rtNav.GetElement '================================================= 'heading of the table rstyle.Bold=True rstyle.NotesColor=COLOR_BLUE rstyle.FontSize=10 Call ritem.AppendStyle(rstyle) For i=0 To UBound(FldTitles) - 1 Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL) Call ritem.BeginInsert(rtnav) Call ritem.AppendText(FldTitles(i)) Call ritem.EndInsert Next '================================================= rstyle.FontSize=10 rstyle.Bold=False rstyle.NotesColor=COLOR_BLACK Call ritem.AppendStyle(rstyle) Dim count As Integer count = 0 Set doc=doccoll.GetFirstDocument While Not (doc Is Nothing) subject = doc.GetFirstItem("Subject").values(0) posted = doc.GetFirstItem("PostedDate").values(0) Set sendTo = doc.getFirstItem("SendTo") For i = 0 To UBound(sendTo.values) Call rtt.AddRow(1) Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL) Call ritem.BeginInsert(rtnav) ritem.appendText(sendTo.values(i)) Call ritem.EndInsert Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL) Call ritem.BeginInsert(rtnav) ritem.appendText(subject) Call ritem.EndInsert Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL) Call ritem.BeginInsert(rtnav) ritem.appendText(posted) Call ritem.EndInsert Next count = count + 1 Set doc=doccoll.GetNextDocument(doc) Wend Set CreateTable=ritem MsgBox "E-mails summarized: " & count End Function
I find it helpful to save it as the "Summarize Recipients" agent and assign it to a toolbar button that runs @Command([RunAgent]; "Summarize Recipients").
Numbers are good to have when you’re thinking about the differences you’ve made. Let’s see if I can estimate the impact of the community toolkit that I built for Lotus Connections: newsletter, metrics, exports, OPML generator, and so on.
Some metrics from the logs: The web interface has been accessed 94,095 since November 13, 2011, the oldest entry in the web server logs. That was 94 days ago, which means that it’s accessed a thousand times a day on average. Let’s ignore all the page views, and just focus on the times when users submitted an actual request to the system. That leaves us with 10,814 entries in the log.
5,305 entries were for Feedmagic, the RSS embed wrapper I created for another widget. Let’s say that saves people 2 minutes each, because otherwise they would have to click through to the feed itself and then return to their page after reading. That’s around 10,600 minutes saved. Considering that part of the tool took me less than an hour to write, I think that’s great ROI.
1,973 entries retrieved statistics for a community. Let’s say that 80% of them were successful, to account for typos and attempts to gather data for private communities. Manually gathering this information would involve going to each of the components of a community, counting discussion threads and comments, counting blog posts and comments, listing files. For some of the hidden data like wiki views, it would also involve accessing the API. There’s a date filter, so manually recreating this would actually involve checking each item to see when it was posted. Let’s say that takes 1-2 hours of work, maybe 1.5 hours on average. That’s around 142,000 minutes saved.
1,730 entries were for the profile summary. This searched Lotus Connections Profiles for combinations of tags and displayed the counts for each of them. For example, if you used A, B, and C as rows and X and Y as columns, the tool searched for A&X, A&Y, B&X, B&Y, C&X, and C&Y. Each total was linked to the search. People searched for a lot of different combinations. You could duplicate this by manually creating lots of links to searches, which would probably take 10-20 minutes depending on how many specs you were looking for. You wouldn’t have the totals, though, and it would probably take another 10 minutes each time to tally things up. If you were just interested in finding an expert using the search, let’s say it saves you 2 minutes of figuring out how to search the system yourself. I’m going to go with a time savings estimate of 5 minutes per request, which balances how people were using it for creating pages, making reports, and simplifying search. That’s 8,600 minutes.
877 entries were for community newsletters. Again, let’s assume 80% were successful. It takes even more work to create a newsletter, because you have to create links and count up new replies. Let’s say that’s 2-3 hours of work, or 2.5 for our estimate. That’s around 105,000 minutes saved.
421 entries were for community data export, which is also handy for determining individual member contribution, wiki page views, and file downloads. Let’s assume that 80% succeeded. This takes a lot of effort as well, because you have to tally contributions by member and copy all the details. I’d say that would take 4+ hours for an community, and you would save that effort for the rare occasions when you wanted to recognize people for their individual activities or justify your investment into building the community wiki. That’s probably at least 80,800 minutes there.
102 requests were for a generic feed export. You could do this manually by going through all the pages in the feed and copying the information, filtering by date. Let’s say that would’ve taken 20 minutes. Assuming 80% success, that’s around 1,600 minutes.
98 requests were for the code to create the feed embedder. You could duplicate this by creating your own page that included the feed embedder information, but that would probably have taken people 10 minutes to figure out. That’s around 1,000 minutes.
56 entries were for the forum exporter. This made it easier for people to analyze community discussions by copying the information into a spreadsheet with the subject, the body, and the author. You could duplicate this by opening each page of each discussion and copying the results into a spreadsheet or document, so I’d say this saved people an hour on average. Assuming 80% of the requests succeeded, that saved around 2,700 minutes.
55 entries were for community OPML, to make it easier for people to subscribe to different community feeds. You could do this manually by substituting the community ID into a template, although the OPML tool was neat because it provided an importable file as well as HTML links. I’d say this saved people 20 minutes. Assuming 80% success, that’s around 880 minutes.
9 entries were for a blog exporter. You could do this manually by copying and pasting all the entries into a document, so I’d say this saved people 10 minutes because most blogs don’t have a ton of entries. Assuming 80% success, that’s around 70 minutes.
There were a number of other requests, too, but we’ll ignore them for this analysis.
Over the 94-day span, then, this tool might have helped save 354,000 minutes. That’s about 3,800 minutes a day, or 2.6 days, or almost 8 8-hour workdays saved every day. Considering that my main focus is client projects and this was a voluntary effort squeezed into the gaps of billable projects, that’s pretty darn cool. This estimate doesn’t take into account the command-line use of the tool for restricted communities or external communities, either.
The tool’s been around for longer than just the three months that we’ve been looking at. My first blog post about it was in June 2010, when Marty Moore mocked up a web interface and people started asking me to put the command-line tool on the web. That probably meant that I’d been gradually building it and sharing it over the past few months, and it had gotten popular enough for people to ask for a less techie interface than a command-line.
Let’s say the tool linearly built up in value over the 607 days since that blog post, eventually getting to this point where it saved people around 3,800 minutes per day. That means the value is described by a line with the equation y = mx + b. To simplify, we’ll assume that the tool started with 0 value, although it was already used by others on June 18, 2010, and that it eventually gets to 3,800 minutes per day on February 15, 2012. This would have been a great to break out calculus and integrals in order to get the number of minutes under this function (and we probably would, if we were assuming growth was curved or something like that). But it’s just as easy to think of this as a triangle with a width of 607 days and a height of 3,800 minutes/day. The area of this triangle would approximate the total number of minutes saved over the tool’s web-based lifetime, assuming linear growth for simplicity (as more people found out about the tool, and as I added new features). The area of a triangle is 1/2 * base * height, so that gives me 1,153,000 estimated minutes saved over the past 607 days.
I joined IBM on October 15, 2007, and I will leave on February 17, 2012. This is 4 years, 4 months, and 3 days, or approximately 226 weeks rounded down. Let’s say only 90% of those weeks are actually work weeks (holidays, vacations, etc). Eight hours a day, five days a week, for 203 weeks or so – that means that when I leave, I’ll have worked for IBM around 480,000 minutes. The vast majority of those minutes have on client projects. (Ah, the life of a consultant with utilization metrics…) So yeah, net benefit to IBM, which is great.
That one set of tools, which I built in my spare time to save me and other people from repetitive work and to open up new possibilities for communities – that may have saved people more time than I have even worked myself. That’s the amazing thing about intrapreneurship. By breaking the relationship between time and value, you can scale beyond the number of hours you can physically work. The tool probably took me less than a month of development time, spread out over e-mail requests and lunch breaks and calls. Granted, people would probably not have run those reports or crunched those numbers if the tool wasn’t available. But hey, the tool is there, and I’m glad it made these things possible.
I never received any direct monetary compensation for creating the tool. (Oh, wait, there was that Best of IBM award!) The steady stream of thank-you notes came in very handy during performance reviews (and subsequent bonuses =) ). The best benefit from intrapreneurship was meeting a lot of wonderful people throughout IBM and seeing what they did with their communities thanks to the tool.
Special thanks go to Luis Benitez, who’s taking over as the primary contact and who put together the Lotus Notes plugin; Marty Moore and Stephan Wissel, who contributed spiffy designs; Robi Brunner, whose hosting and domain gave it a lot of credibility; John Handy-Bosma and John Rooney, who helped me figure things out with the CIO; Darrel Rader, for suggesting plenty of nifty tools and using them to make his communities smarter; and lots of people throughout IBM for suggestions, improvements, and even the occasional bugfix.
If you haven’t started yet – be an intrapreneur! If you’ve gone down that wonderful road: Have you made something valuable? Can you estimate your ROI?
If my math is wrong or if it looks funny, please help me make it better!
I was going to write stories from my five years at IBM (one year as a graduate student, four as an IBM consultant) while they were still fresh in my memory. Then I realized I was on page 8 of a single-spaced document and I was still covering the first year. Instead of writing my way through it, I’ll share the five key things I learned during my adventure with IBM.
Happiness, meaning, and career growth are your responsibilities.
Don’t count on people to tell you why your work is meaningful or to arrange your career so that you’re happy. Do that yourself. Make your own vision and set yourself up for your own happiness and success. There will always be plenty of reasons to feel stressed or unhappy about work. Why not focus on what you could do to improve things instead?
As the financial crisis unfolded in 2008, the mood was decidedly down. Clients were tightening their budgets. Layoffs meant seeing friends scrambling for work despite their talents and skills.
I figured things would happen however they happened. I could either be demoralized by it, or I could focus on the things I could control. I learned more about consulting and development, and I had a wonderful year. (Okay, after I got through my disappointment about great people getting laid off…)
Fatigue and sleep deprivation lead to mistakes and lower productivity, and the personal sacrifices are too high. Work at a sustainable pace. If your work requires intense sprints, make sure you don’t forget to rest.
From the beginning, I knew I didn’t want to burn myself out working 80-hour weeks. Although the occasional business trip involved longer hours, for the most part, I kept to the time I budgeted for work. This forced me to focus when I was at work, and to find ways to work more effectively. It also meant I gave feedback on estimates early, so that we could avoid having projects run behind schedule because of unrealistic planning. Result: less stress and more happiness.
Ask for help.
One of the best things about working with a large company is being able to work with people who are great at what they do. Sometimes you have to find creative ways to compensate or thank people for the time they invest in helping you. A thank-you note that includes their manager is an excellent way to start.
I was working on a client project when I ran into a problem that I didn’t know how to solve. It involved Microsoft SQL Server 2000, something I had never administered before. I tried searching the Internet for tips, but I knew I was missing things I didn’t even know to look for. After some delay, we eventually found an expert who could review my work, we brought him into the project, and he billed much less time than it would have taken me to learn things from scratch.
Practise relentless improvement.
Always look for small ways you can work more effectively. Invest time into learning your tools. If you can improve by 0.25% every day, you’ll double your productivity in less than a year.
Working with other people in an IBM location is an excellent way to learn by watching how other people do things. Attending community conference calls is another way to do that, too. Experiment with techniques yourself, and share what you learn.
Look for scalable ways to make a difference. Intrapreneurship is worth it.
Find yourself doing something repetitive? Solving problems other people might run into? Save yourself time, and save other people time as well. If you write about what you’re doing – or better yet, build a tool that does it for you – then you can share that with other people and create lots of value.
I started playing around with intrapreneurship through blogging and presentations. I was learning a lot, so I took notes and proposed presentations to conferences. Many of my proposals got accepted. This is how I got to go to the IBM Technical Leadership Exchange as a presenter in my first year as an IBM employee. Presenting helped me share what I’d learned with dozens of people at the same time, and uploading the presentations helped me share with hundreds and even thousands over the years.
I like building tools, too. I wrote something to make it easier for me to export data from Lotus Connections communities. This grew into the Community Toolkit that many people use to create newsletters or measure activity in their communities. I wrote a script for doing mail merge in Lotus Notes, and that became popular as well. This resulted in a steady stream of thank-you notes from people across IBM (and even outside the company), which came in really handy during annual performance reviews.
What have you been learning at work?
Today was my pre-experiment potluck, organized by Jennifer Nolan. I brought cookies, she brought cupcakes (which she had frosted with flowers), and other coworkers brought food. A few former IBMers made it in, too, and it was great to reconnect with them. Another milestone in my separation from IBM and adventure into entrepreneurship!
When we were planning this, Jen suggested a potluck (more chatting - great idea!). I suggested that we call it a pre-experiment potluck instead of a goodbye lunch. I like the positive approach to the idea. IBM's been wonderful, and now I want to experiment with ways to build value. Consulting and coding are cool. What else is out there? Hence, experiment!
Anyway, I spent the rest of the afternoon on a bit of a sugar buzz. =)
Five days to go before I start the next chapter in my life. I've been braindumping Drupal development and theming tips on Regan Yuen, who's taking over one of my projects (and maybe another). In the gaps between questions, I write stories I remember from work, post testimonials on LinkedIn, and tidy up whatever else I can before I leave.
It turns out that leaving isn't actually that scary. =)
One week to go before I leave IBM and experiment with building something on my own. I realize that I'm drawn to something familiar about this experiment. It's not freelancing that interests me, although that seems to be a decent way to create value and make money. It's entrepreneurship. Looking back, I can see how I've experimented with it before, and I want to see if I can make it work outside too.
I started with my blog posts, presentations, shared files, and wiki pages. I found out that if I invested a little time into sharing what I knew, people could learn on their own, even while I slept. For fun, I added metrics to my yearly business results: how many people had viewed my presentations, how many people had downloaded my files. On Slideshare, my presentations have been viewed more than 400,000 times. (Holy cow.) I did some back-of-the-envelope calculations of my ROI, considering the cost of my time and the probable value received by others, considering the thank-you notes and links I'd seen. The numbers were pretty good.
I like writing code and I hate doing repetitive tasks, so I wrote myself a few timesavers that turned out to be popular. As part of a consulting engagement, I needed to analyze the forum posts in a community, so I wrote a tool that extracted the information from the Lotus Connections ATOM feeds. This grew into the Community Toolkit, which eventually helped hundreds of community leaders create newsletters of updated content and export information from their communities.
I wanted to send personalized thank-you notes to people who participated in these community-based brainstorming sessions, so I wrote a mail merge script for Lotus Notes. I blogged about it, and it turned out to be really useful for other people too.
So I guess I've had some experience in creating value outside the direct equation of time = money. This experiment, then, is about figuring out if I can do that for non-IBMers, and if I can make a good living and a good life along the way.