Tuesday, January 13, 2015

What I learned from 365 days of contributing to Open Source projects

Today I reached a 365 day commit streak on GitHub, with over 2300 commits to Open Source projects in that period. In this post I'd like to share my experiences during this past year and the lessons I learned.

Github contribution overview

It started one year ago, on January 14th, 2014, the day I returned from a two week trip to Malaysia. I didn't take a laptop or smartphone on that trip, in order to be 'disconnected' from PC, internet and E-mail for some time. I've taken a habit to have a 'unplugged' holiday about once a year.
I had a streak of over 100 days running before I left on holiday, and had reached 2000+ commits during that year, so I was eager to start committing again, to keep the running total of commits close to 2000 and to start building a commit streak again.
I don't remember if I had a clear goal at that time of the total consecutive days of committing to Open Source projects I aspired to reach. I guess at first I wanted to match the previous record and see how much further I could get.

At the end of June, I got inspired by Josh (@dzello) from Keen.io who had pledged to commit to Open Source projects for 365 days in a row. I had an extensive streak going on at that time, so I decided to try and reach a 365 day streak as well.

Until then it had been fairly easy to keep the streak going. Doing at least one commit every day is not that hard, and I usually did more than one. I was working on my Android app and I started working on what I called 'my side project' at first. In the last few months my focus has shifted to that 'side project', making it my main project basically, but that's a different story.
So I had plenty to do and I was well motivated to work on my projects regularly, so it was easy to keep committing daily.

Until summer I didn't do any long trips, so I was either at home at some point during the day or had my laptop with me (when going to Berlin for LinuxTag, for example) so finding a few minutes every day to do at least one commit wasn't a big challenge. Although sometimes, it required some planning.
If I had a social, cultural or sports activity planned in the evening after work, I planned for an 'easy' commit on those days, usually cleaning up some code, fixing coding style, writing a small test, improving documentation or doing a few translations. I kept the bigger work, implementing a new feature, figuring out an API or framework, or doing some bigger refactoring for days when I had more time available.

Then summer arrived and I planned to go on a climbing trip for a week. I was in doubt if I would have time and opportunity to keep committing during the trip. But in the end I decided to take my laptop and give it a try. I worked on bash script to crop and scale Android screenshots that week, something I could easily develop and test without access to internet. On some days I barely managed to contribute, finishing the commit only a few minutes before the end of the day, but in the end I managed to keep the streak going.

With this hurdle taken I imagined reaching the 365 day goal was achievable. I didn't know back then I was to go on a few long weekends to Fontainebleau during the Fall, but again I took my laptop with me on the trip and found time to contribute some code.

In the end of October I went to California for the Google Summer of Code 10 year Reunion and I had the opportunity to meet Josh, and Justin, also from Keen.io. Josh  published a blogpost by that time explaining why he ended his commit streak at Burning Man, and why he wasn't planning on starting the streak again.

I read his post, and it got me thinking. Is this continuous streak a good thing? Sure, it was a motivation on its own, you want to keep going because you don't want to break the streak, you'd have to start all over again for a long time to reach the same number of consecutive days.
Some days you don't have time, or you've had a rough day and don't feel like turning on your PC and doing the required commit for the day, but would rather do something else, forgetting about that ongoing streak.

But I decided to go for it and finish the pledge to reach 365 days of committing to Open Source projects. I found out that my motivation wasn't only in keeping the streak going, but mostly in making progress with my projects.

Now that I've reached the 365 day goal I've come to some conclusions:

  • Setting a goal helps to keep you going, but it doesn't necessarily has to be a streak of consecutive days commiting code. Josh mentioned this in his blog post as well, there are other metrics or goals you can aspire. Choose one that works for you and that is realistic.
  • A minimum of one commit per day worked for me, and usually I reached more (6,4 per day on average, with a maximum of 27 at some point). But it would be harder for me to set goal of, for example, 30 commits per week. It would put pressure on me every week to reach that goal and it would be counterproductive, for me at least.
  • Now that I've reached this 365 day goal I will keep the streak going as long as I'm comfortable with. As I mentioned, the one commit a day goal works for me as long as it doesn't interfere with my other commitments : I have a day job and regularly enjoy social, cultural and sports activities.
  • Next time I'm going away for a few days, being it a holiday or a climbing trip I will not take my laptop with me. It will break my streak, but I'm OK with that. Disconnecting from everything for a few days every once in a while is more important to me. Afterwards I'll probably pick it up again and start a new streak, but it doesn't matter how long it will be. I'm glad I reached the 365 days goal, but I don't necessary feel the need to repeat it.
  • As mentioned earlier, I found that my motivation lies in working on my projects, in seeing progress as I continue adding features and improving them.
  • I noticed a few similarities in motivation for doing sport (and other) activities. When you're running, for example, it helps to set a goal (a total distance or an average pace to reach) or a metric (once or twice a week, no matter how long the distance or time spent). Choose one that works for you to keep you motivated. But also allow yourself to take break if you need one and pick up later again. In the end you should enjoy the activity, setting a goal is just a way to keep you going, but the fun of doing the activity should drive you.
Many thanks to Josh to inspiring me to reach these conclusions, to all who supported me during the past year and good luck to everyone aspiring a goal, being it a commit streak or something else.

Kudos to those who still have a very long commit streak going!

Thursday, January 01, 2015

Happy 2015!

I wish you all an exciting 2015 in good health, with a lot of fun and big achievements in your projects! Good luck and joy to all my friends who are expecting a child this year!

Reviewing 2014

Well, 2014 was quite busy. Looking at my plans for 2014 a lot more happened than I expected : I learned Python when I started a new project, visited 7 capital cities and 3 continents, did a few climbing trips and got to visit San Francisco and Yosemite again :

  • celebrated New Year in Cebu, Philipines
  • visited Malaysia (Kuala Lumpur, Melakka, ...), Singapore and Hong Kong
  • bought a Google Nexus 5
  • attended FOSDEM 2014
  • resigned as a phpMyAdmin team member, creating some more time for other projects
  • finished a first blue route at Bleau
  • coorganised an info session about Google Summer of Code at Ghent University
  • started working on a tool to generate a trend graph of a build process, my first Python experience
  • attended Newline 0x04 and talked about reducing iptables configuration complexity
  • attended LinuxTag 2014 and talked about 'Reducing iptables configuration complexity' (presentation slides)
  • Finished a 10km race (Gentse stadsloop) in less than 55 minutes
  • Visited Maker Faire Paris : A lot of interesting stuff, mainly 3D printers, but some with a twist : pancake maker, an industrial welding robot mounted with an extruder, lots of hinges, bearings and other stuff printed ready to be used : no need to assemble
  • First time to visit Paris, I finally got to see the Eifel tower, Avenue des Champs Elysées, Arc de triomphe, Le Louvre (outside), Notre Dame, La Seine, Musée d'Orsay, Musée Rodin, Montmartre and Sacré Coeur
  • Released version 0.3 of Get Back GPS
  • Participated in a climbing training in L'Argentière-La Bessée and received a certificate for lead-climbing  and multi-pitch climbing (KVB3), had a lot of fun : climbing a lot and sending several 5b's and 5c's lead-climbing, some of them on sight.
  • Visited Amsterdam, the 6th capital city I went to this year
  • performed a lead-climber's fall at Klimax II
  • did a 55km cycling trip around Ghent
  • Donated blood for the first time
  • Released the first version of Buildtime Trend, a tool to create visual trends of  a software build process, written in Python and JavaScript
  • GetBack GPS had more than 10 contributors during 1 month, most of them are translating the app
  • Ran 16km/10mi for the first time
  • Spent a weekend in Fontainebleau with Maxime, Seba and Wolf, opening some routes.
  • Went to San Francisco to attend the GSoC 10th Anniversary Reunion and spent a few days in San Francisco and did a trip to Yosemite with Madhura Jayaratne. Shared a few beers with Justin and Josh of Keen.io, talking about Open Source commit streaks and Buildtime Trend.
  • Released GetBack GPS 0.4, introducing 7 more languages.
  • Spent a long weekend climbing in Fontainebleau with Peter, Dorinne, Cécile, Stef, Aline, Senne, Nik, Chris, Andreas, Luke and Barbara, climbing several yellow and blue routes.
  • and a second blood donation
  • finished a red climbing route
  • traveled to Lisbon.
Things to do in 2015:
  • Continue working on Buildtime Trend : offer it as a service (SaaS), add more stats, support more CI environments, ... 
  • Climb as much as possible, both indoor and outdoor, with trips to France during the Easter and summer holidays, and weekend trips to Fontainebleau or one of the climbing areas in the south of Belgium.
  • Visit Open Source and related conferences : FOSDEM, LinuxTag, EuroPython, DebConf and KeenCon.
I'm looking forward to where 2015 will bring me. Looking back at 2014 it is bound to be an exciting year again.