Over a year ago I moved the PubGears codebase from a private subversion repo. into a private GitHub repo (actually I moved a number of repos out of my private subversion setup and into GitHub – but doing it for PubGears was the primary driver/motivation).
Once I had done that, I noticed the “streak” feature within GitHub and decided it might be fun to get my own streak going. My initial thought/goal was, can I build the streak to 365 days of “checking in code”…and with today’s initial code push, I’ve ‘officially’ completed that personal challenge.
To be fair, I actually completed the challenge back in Oct. – but because I occasionally do some code reorganization and refactoring (mostly to deal with GitHub constraints on cost per private repo), I lost some check-ins for a few days here and there when I removed an old repo back in June or July…so today, based on GitHub rules, is officially the day.
Looking back over the “year of code” I have a few key learning/thoughts I wanted to share:
1. Doing something every day, no matter what, is actually harder than you might think. Some days I was sick; some days I was on a boat in the middle of the ocean with only my phone and a weak internet signal; some days I was in the middle of the woods with at least a 30 minute drive to the closest internet signal; some days I was stuck in a deep depression or funk with very little motivation to do anything; and some days I was very excited and/or distracted with real life. Through it all, I found at least a moment and a way each day to “push code” (but only because I was committed to making it happen & made it a priority each and every day).
2. Having a daily “minimum achievement goal”, that I achieve, helps me feel good about every day. Even on the down days, when it feels like everything is falling apart and I’m the most idiotic, imcompenet person on the planet - once I pushed at least some code, and kept the streak going, I felt like I still accomplished a little something. It gave me hope that, no matter what, today I built towards something bigger.
3. Sometimes building habits is also about breaking other habits or giving something else up. You won’t get more than the 24 hours you have today…so if you want to add something new, you’re either going to have to give something up or at least drop the priority of some things down. In this case, I was already writing code almost every day (and have been for years) so it wasn’t a big change or sacrafice in my world…but it did mean having to make it a part of my weekends, vacations, and “time off” even if I didn’t really want to.
4. A big secret to success is just in the action and the activity. Getting into the habit of having to push code every single day of course forced me to have to write some version of code every single day, and usually once I sat down to write at least a little something - I ended up digging into something bigger; something more useful or important than just “hitting my minimum achievement”. Sure there were a few days where I just added a few comments or just did a little refactoring and called it a day; but for the most part, once I got started I dug in…and the daily goal forced me to get started every day.
5. The challenge and the result builds on itself. Once I had some initial momentum, I didn’t want to lose or reset my streak…so what started out as something small and just for fun, became a fairly important part of my day. More than once I woke up in the middle of the night in a mild panic thinking “Oh Shit - did I officially push code yesterday?” (GitHub only counts certain check-ins towards your streak; Many of the projects I work on don’t really require or want a daily push of code). Even now that I’ve hit my initial goal of “365” I’m in the dilemma of not wanting to let my streak end…and so I’ll probably continue to push code every day until…until I don’t know when really (probably the next time I’m on a boat or out in the woods and decide it’s finally not worth the effort/cost to get the code pushed).
6. This idea really works for me. I like to challenge myself and it helps me to have a goal (no matter how silly or inconsequential) and to have constraints (even self-imposed ones) to work within. Outside of my wife, I don’t think anyone really knew I was challenging myself in this way until I was already 10 or 11 months into it…because it’s really all about the internal battle, motivation, and goals (though to be fair, it did affect my wife at least a little and so she had to be on board with/supportive of it for me to really be able to accomplish it – thanks honey!). I actually already knew/experienced this from back in my writing days…so this was really just more confirmation and a reminder that I need to do more of it for the important stuff.
So now that the year’s up, what’s next?
Well as I mentioned, I intend to keep the streak going for at least the foreseeable future (though I won’t be as completely focused on it as I have been this past year) and I’ve already started on the next daily challenge I’m working into my habits/routine (actually started it back in Sept. so a good 3 months into it).
This post has received 3 loves.
Kevin also talks in more depth about many of the these things around twice a month via his drip campaign and has a day job as CTO of Veritonic. You can also check out some of his open source code on GitHub or connect with him on Twitter @falicon or via email at kevin at falicon.com.
If you have comments, thoughts, or want to respond to something you see here I would encourage you to respond via a post on your own blog (and then let me know about the link via one of the routes mentioned above).