March 27, 2011

Lessons Learned Working on a Programming Side-Project

The last few months I had been building an app for the upcoming launch of the BlackBerry PlayBook tablet. Its a fairly simple app – a text editor that syncs notes with Dropbox – and consists of about 3000 lines of source code. Now that I have submitted version 1.0 of my app to the BlackBerry AppWorld, I wanted to take a step back and look at my progress, and more importantly, my productivity.

I used the Mercurial Activity Extension to plot out my commits and collect other relevant data. Here is a chart of my commit activity for the duration of the project along with some annotations:

Lessons Learned Working on a Programming Side-Project

I worked on this during any spare time that I got from my full-time job. I first started during the Christmas/New Year’s holidays. This was the most productive, and also the most frustrating time, since I was learning how to do things on a new platform (Adobe AIR + BlackBerry QNX) for the first time. Also RIM had an offer going on for all developers: if the app was submitted before February 1, and accepted, the developer would win a free PlayBook. So initially I was aiming to finish up in about a month.

However, on January 13 I found out that RIM had extended that deadline to March 15. And my productivity suddenly dropped right after. I realized that I didn’t have an excuse for ignoring all the other things in my life that required my attention, so I started dealing with them. Also, work got a bit busier during early February and I generally found myself having less spare time. Anyhow, my activity started picking up again closer to the next deadline. There was another small drop when I discovered that the second deadline had been extended, but I pulled through this one with a determination to finish by the now defunct second deadline. Eventually, I was able to finish slightly past that deadline, and had my first release ready by 22nd March.

Lessons Learned:

  • Deadlines work. But only when they are enforced by some third-party. Self-imposed deadlines have never been effective for me.
  • Life always gets in the way. There’s just no getting around this one.
  • Momentum is important. It’s hard to get back momentum once you lose it. But once you have it, you’re on a roll and much more productive.
  • Social life gets put on the back burner. Devoting your time between a full-time job, a side-project that feels like another full-time job, and taking care of life’s necessities, really doesn’t leave time for anything else.

I didn’t stop there with my analytics. I wanted to dig deeper into the data. So I plotted a chart of my activity per day of the week:

Lessons Learned Working on a Programming Side-Project

The chart is divided into working days and holidays (weekends, Christmas break, New Year’s, Family Day, and an extra day off I took on the Wednesday between Christmas and New Year’s). Surprisingly, my two most productive days of the week are not on the weekend, but they are Tuesday and Friday.

I knew that I had been doing a lot of my coding during the wee hours of the morning, but I wanted to know exactly how much. So I plotted this chart mapping my number of commits done per hour over all days:

Lessons Learned Working on a Programming Side-Project

It looks like 7am is the most productive time of the day for me. There is a reason why I have gravitated towards working in the mornings: there are the least amount of distractions then. Most of the world is asleep and there is little activity on Facebook, Twitter, tech blogs and news websites to distract me. Also, my mind is fresh in the morning and not tired after a full day of work. Luckily, I have a job that is flexible with their work hours, so I was able to shift my working hours to later in the day. Night time was mostly reservered for eating dinner and unwinding by watching a little TV and clicking away at links on sites I frequently visit.

It also looks like I do roughly about the same number of commits on holidays as a do on workdays. Its just that my commits during holidays are spread out more evenly during the day. This makes me wonder if I am more focused and get the same amount of work done, as I would on a full day of a holiday, that I get done in a few hours on a workday. Perhaps I am subconsciously treating the fact that I can’t be too late to get to the office for my job as a  ‘deadline’. And that deadline mentality forces me to get more things done faster. Perhaps I’m one of those people who work better under pressure.

Leave a Reply