Over the past 3 months (Aug. 21 to Nov. 29) I completed a challenge I was very proud of: I made commits to GitHub for 100 consecutive days. I wanted to work more on side projects and historically found myself procrastinating a lot in this area.
My idea was to apply a commitment device and force myself to work on side projects. I would make a commit to GitHub everyday and if I ever missed a day, I would concede $50. Obviously I could not trust myself to enforce this; I needed a 3rd party, so I posted a status on Facebook detailing my plan. The enforcers became my friends who can see my public GitHub activity.
Additionally, exploiting the sunk cost bias I gave a friend $50 to officially mark the start of this goal. “I already spent $50 on this goal, so I can’t back out of it now or else the money would be for nothing.”
I worked on a regex parser for the first couple of weeks to warm up. The vast majority of my time was working on LurkerFAQs. The site archives the GameFAQs message boards and I have been running it for a while now.
LurkerFAQs was originally written in very messy PHP; maintaining it was very troublesome and adding new features even more so. I wanted to completely rewrite it using Django, but always procrastinated on doing this. At the end of the 100 days, I manage to finish the rewrite and replace the old site with my new one.
At the end I was ultimately successful and completed all 100 days, despite busy days involving traveling and job-related stuff.
Lessons
1. Commitment Devices are unreasonably effective.
I feel pressured to make a commit everyday. This pressure is similar to the pressure I get when I have a homework due the next day. In parallel, I have successfully used commitment devices with other goals like not going on reddit. I am extremely excited about commitment devices; I have been searching hard for a solution to my akrasiaproblem and commitment devices pretty much solves the problem.One issue I noticed though is that I now procrastinate when creating commitment devices for new goals. I am aware of their effectiveness, so I get afraid of creating them, experiencing “meta-akrasia”.
2. TODO lists are awesome; flow is key to productivity.
I kept a list of tasks I needed to do for my project, which I found super helpful. By creating this list, it breaks a large task into small ones making complex tasks easier to approach. It also acts as a reference, so I don’t have to remember them freeing up more working memory. More importantly, having a next action restores “flow”.
I noticed that after 15 min of coding, I get into a state where I’m fully engrossed and focused which I call “flow”. Sometimes I even lose track of time and end up coding until 2 am. Unfortunately, this state is lost when I stop and the next time I have to start all over again, kind of like warming up a cache.
To help alleviate this, when I stop coding I add an action to the top of my TODO list and when I resume coding the next day I would start off by doing this action. I found this quickly restores my flow.
3. GitHub commits are a poor measure of effort spent.
If I were to redo this challenge, I would measure by time spent rather than commits (ie. do 1 hr of work a day rather than 1 commit). I had to do a lot of work that did not involve committable code like setting up and configuring servers and hunting down bugs. I would dread doing these tasks since they could be large time sinks which may not result in a commit at the end.
One draw back is that measuring by time will not be publicly visible like GitHub commits. I could find someone who I see everyday to keep me honest though.
4. A small amount of work every day = massive amounts of work once aggregated
This seems obvious like 1+1=2, but I was very surprised on how much I got done by the end of this experiment even though I averaged around 1 hour of work each day. Furthermore, doing this each day gets easier and easier due to the power of habit.
5. Coffee + coding = ultimate combo
Nuf said

I’m a big fan of