My GitHub Challenge

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.

the octocat

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

Posted in Goals, Programming | Tagged , , | Leave a comment

Forgetting the memory problem

In the past month or so I have developed a new habit: using Anki. Anki is a Spaced Repitition software, which is basically a computerized way of doing flash cards with an important twist: the time between when a card is reviewed grows exponentially. Through empirical study , it’s widely accepted that spaced learning is vastly superior for long term memory retention than cramming (here is an extensive literature review). The spacing algorithm in Anki is its raison d’etre.

Continue reading

Posted in Programming | Tagged | Leave a comment

Bashing my head Bash Scripting

I haven’t updated this blog in a while, probably due to akrasia. I will commit to writing at least one blog post every month from now on.

I noticed that writing out my thoughts concretes my understanding of the subject. Using this observation to my advantage, I will write blog posts about things I’m learning. Today I was reading up on bash scripting.

Bash scripts have always scared the hell out of me and I tried very hard to avoid them, preferring to use Python to fulfil my scripting needs. The syntax was so alien that I had no idea at all of what was going on. All the tutorials I’ve read have been very difficult to follow (especially man bash). However, I finally found an awesome bash guide that actually make sense.

Continue reading

Posted in Programming | Tagged , , | Leave a comment

Goal Update

I posted a blog entry in August announcing my goal of participating in the Victoria Half-Marathon. Today was the big day; I woke up at 6:00 p.m bought some McDonalds and drove downtown for the run. The route was very scenic, but by the half way point, I became too focused on completing the race to notice.
Continue reading

Posted in Uncategorized | 1 Comment

Impress your friends at the Apple Store

You’re hanging out with your friends at the mall, wandering around without any specific purpose. Suddenly, you guys see the Apple Store and decide to go inside and check out the latest in MacBook and iPhone tech. This series of posts will prepare you for the time when the situation described above inevitably happens. I will cover some cool tricks that you can preform on the demo stations and wow your friends.
Continue reading

Posted in Uncategorized | Leave a comment

File Management in Vim – Part II

This post is a continuation of the post I wrote last week on Vim file management. I will finish off my discussion about how I handle multiple files in Vim by talking about buffers and the NERDTree plugin.
Continue reading

Posted in Programming | Tagged | Leave a comment

File Management in Vim

I’m a big fan of Vim. It makes me feel really powerful when editing text. The learning curve is steep, no lie, but I urge all coders give it a chance. I try to use Vim basically everytime I can, not only for typing up code: I’m experimenting with ditching Microsoft Word and typing up my documents in plain text using Latex or Markdown for typesetting. You can find my .vimrc here.
Continue reading

Posted in Uncategorized | Leave a comment

Welcomes and Goals

Welcome to my blog! Despite using the web for basically all my life, I never really established an online presence. This blog will be my first attempt at it. I might even improve my writing skills along the way!
Continue reading

Posted in Goals | Tagged , | 4 Comments