A little over a year ago I found a new obsession. A nerdy obsession. One that would change the course of the past year. Strangely enough this wasn't a vice, it was GitHub's "streak counter".
Their streak counter showed the number days in a row that you have had a check-in into a master branch on a repository. I say showed because a few months ago they removed this littler counter. But this little number tickled some inner perfectionist in me. And so I created a goal. A year ago, my longest streak was a few weeks, maybe 25 days of check-ins. My new goal: 365 days.
I don't use GitHub in my day job, despite a nice daily check-in count at work, those numbers don't count. So when this challenge started, GitHub remained in the space of personal projects... The wheels turning, the gravity of this challenge begins to set in. This would be an execise in autodidacticism. This would require planning. This would require routine. This would require persistence.
I've been a professional software engineer for over a decade. I've always tried to explore technologies and languages. I've continually had side projects that keep me busy on the weekends and help me stay abreast of a rapidly changing industry. This challenge is a different beast. Roy Osherove talks about the TDD Kata as a way to improve unit testing practices. This would be a similar grind, but on a less focused nature.
My goal was this:
Each day, spend 30+ minutes writing code outside of work and deliver something. Try to focus on learning new technologies or improving skills that are weak.
Unsurprisingly this journey had some challenges. First and foremost, it required waking up a bit earlier. I soon realized that my evenings were not conducive to a routine. However, in the morning, a cup of coffee and 30+ minutes really helps jump start the day.
I often found that free time in the evenings had me jumping back into what I was working on in the morning. It's fun and exciting to play with shiny new toys.
There were some days where schedule dictated an abbreviated session. To combat this, I would either work late the night before (past midnight check-in counts in my book)... or "prep some work" so that I could spend 10-15 minutes instead of 30-60 minutes. The end result was the same though: every day spend extra effort on coding.
I also found that continual effort actually has a HUGE impact. At first the going was a slow, but as time went on, I began to pick up steam and picking up new tools and technologies became common place.
There is an image that is floating around the internet about motivation. I first saw it a few weeks ago and chuckled.
Despite the cheesy, sorority girl, motivational nature of this image there is validity to its point. I can say that daily focus has a profound impact on learning. Things that were once difficult become routine. Apply this across dozens of topics and suddenly you're lightyears ahead of when you started the journey.
In the past year, I have a explored a huge variety of technologies.
I've explored various tools and techniques for creating microservices.
I've explored a number of queueing systems.
I've deep dived into AWS technologies.
I've spent countless hours playing with and learning various devops tools to help with automation and deployment.
The exposure to so many different systems has allowed me to grow in ways that a normal job would not tolerate.
Our day jobs usually focus on meeting a deadline. Exploring technology and expanding your horizons isn't always part of meeting that deadline... and most times it is counter to your goal of delivering software.
Daily focus provides that outlet. Besides, it's fun!
Despite the time challenge, I found the single biggest motivator the "streak counter". Seeing the green square means I took one step towards my goal. It's an affirmation. And I could look back over a year and see that I did indeed spend extra time coding every single day.