Category Archives: work


Adjusting to early-morning wake-up times and 45-minute commutes. I’m still a little twitchy – a little sleep deprivation plus a two-hour timeshift earlier than my previous schedule. I can tell by the tic near my eyes, a slight tremble in hands. Handled with tea in the morning and the occasional walk through the rows of cubicles. With a little more sleep and a few more weeks, I’ll settle into a new normal. Fortunately, I still feel mentally there, not fogged, and I get lots of things done. It’s good work, and I’m glad to help make a difference.

It’s a little bit weird typing a full day on a QWERTY layout and then coming home and typing in Dvorak. It takes me a little while to adjust. Typing words, no problem. Keyboard shortcuts, isolated movements – that’s a little harder. I wonder why copying and pasting opens a download window in my browser, and then I catch myself and press the correct keys.

I need to find new rhythms for writing. I can’t blog externally about what I’m working on at the client, but there’s still so much I’m learning and sharing. I could keep posting book notes – there are so many to do! – but a little variety is good.

Today I helped J- edit some of her writing homework for her English classes. The essay was easy: trim unnecessary words, make tenses consistent, clarify wording… She wasn’t sure where she was going with her fiction chapter, the first in a new story. I read through pages of dialogue that went back-and-forth without much progress. I pulled out one idea and suggested starting the chapter with something like this:

My dad isn’t my real dad.

My best friend hates me.

And my shadow just told me to hit a chicken.

“That’s awesome!” she said. Now she’s off and writing, curious about what happens next in the story. I’m curious too.

Adjusting. Tightening things up, dropping the unnecessary, getting the hang of a different flow. We’ll see what happens. =)

Visual book notes: The Start-up of You (Reid Hoffman, Ben Casnocha)


(Click image for a larger version)

The Start-up of You is a book about networking and career planning using tips pulled from the startup world, sprinkled with hip jargon such as “pivot” and “volatility.” It’s a decent book for people who are new to connecting or cultivating their network and who also like reading about technology and entrepreneurship. If you’re a fan of The Lean Startup and similar entrepreneurship books, The Start-up of You is like seeing those ideas applied to other parts of life. It’s easy to read, and it flows well.

I liked examples such as the “interesting people fund” and the idea of having A-B-Z plans. There are good tips for asking your network better questions (p208), too. If you’ve read a lot of other networking or career growth books, though, you might not come across many new aha! moments here, but it’s a good startup-influenced view at managing your own career.

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.)

Are you a visual learner? Check out my other sketchnotes and visual book notes!

Event organizer or conference organizer? I’d love to help you help your attendees remember and share key points. Talk to me about sketchnoting your next event!

Analyzing my Lotus Notes sent mail since January 2011

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 ( 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
e-mails sent

Average e-mails sent
per person

colleague 407 827 2.0
coworker 50 562 11.2
client 21 387 18.4
manager 4 109 27.3
partner 9 51 5.7
system 9 21 2.3
other 8 11 1.4
self 1 5 5.0
Grand Total 509 1973 3.9

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"))
End Sub
Function CreateTable(FldTitles As Variant, doccoll  As NotesDocumentCollection, rtitem As NotesRichTextItem,msgTitle As String,msgBody As String ) As NotesRichTextItem
	'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
	Call  ritem.AppendStyle(rstyle)
	Call  ritem.AppendStyle(rstyle) 
	rows=doccoll.Count +1
	Call ritem.AppendTable(1, cols)
	Dim rtt As NotesRichTextTable
	Call rtnav.FindFirstElement(RTELEM_TYPE_TABLE)
	Set rtt = rtNav.GetElement 
	'heading of the table
	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
	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)
			Call ritem.EndInsert
			Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)   
			Call ritem.BeginInsert(rtnav)
			Call ritem.EndInsert
			Call rtnav.FindNextElement(RTELEM_TYPE_TABLECELL)   
			Call ritem.BeginInsert(rtnav)
			Call ritem.EndInsert
		count = count + 1
		Set doc=doccoll.GetNextDocument(doc)
	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").

Estimating the impact of the Community Toolkit, or how the company got an incredibly good deal when they hired me ;)

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!

Five things I’ve learned from five awesome years at IBM

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…)

Work sustainably.

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?

Pre-experiment potluck

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. =)