Nico is blogging

My thoughts on software development, clojure, ruby, and trying to deal with complexity in simple ways

Contributing to OSS projects - Part 1

first pull request meme

I’m relatively new to this thing of “being a contributor”. Even though I got my first pull request accepted into an open source software (OSS) project almost 5 years ago (just checked and it had tests! Pheew!) it was only this year when I started to make frequent and more important contributions.

I wanted to do a recap of this modest journey. I think it might help others who are trying to start with theirs, but also to encourage me to continue the pursuit :)

A 5 years of contributions recap (part 1: Oct/2010 - 2013)


  • formtastic - A small fix for passing options in a select with grouping: Not much to say… I needed this for a project, so I made the change and sent the PR. This is the most usual way to do a contribution: You are using a library and find that you need a small addition to it, so you fork the project, do the change, and send it back. Everyone wins.


  • sidekiq - Added method in testing for running only due jobs (not merged): I think this was a nice addition. It had tests (Pheew again!). I needed it for a project where I was scheduling many jobs with different due times and I wanted to verify the behavior when only some of the jobs were run because the time for them did arrive. Nobody was interested and Mike Perham thought that it was not worth it to add the change, so he closed the PR.

This can be hard when you are starting, but it’s one of the three possible endings for a PR: It will be accepted, rejected, or just kept open to the eternity. Don’t be discouraged by this! Perhaps it’s for the better: The world has too much code already. And remember: the project owner might have a different idea of what’s acceptable or desired for the project, and that’s perfectly fine.


zeus - Add spec for tracking changes to Gemfile.lock in default_bundle process (not merged): Not sure why I wanted to add this test. I should have added a description of the change, at least so I can explain it now :)

rspec_candy - Assume rspec1 if RSpec::Core is not defined: It had tests, a nice description, and it was accepted :)

heroku-resque-workers-scaler - Do nothing if not authorized: I didn’t send it to the upstream repo, and I don’t remember why.

rails - Backport #4956 to 3-2-stable. Postgresql partial indices (not merged): I was using rails a lot by that time. This was the only PR I got to send to the project, and it was rejected because were not accepting new features in the 3-2-stable branch, and that made sense. I just didn’t know about that when I sent the PR. As I commented in the PR, I ended using pg_power which already had this feature.

tictactoe - Add travis.yml / Upgrade to clojure 1.5.1: I was trying to do my first steps with clojure and those PRs were just from trying to run the project, in my local env but also in travis.

tictactoe - Extract board to a separate ns (not merged): More from my first steps in clojure, playing around on this project from my friend @paraseba. I was happy that I was starting to understand what was going on, and I thought it would be better to split the code into new namespaces. @paraseba didn’t agree, and after some time I learned that it’s sometimes better (or at least a common style) to avoid splitting the code into namespaces in clojure, to avoid an “explosion” of namespaces. It’s a tradeoff. I learned something from this PR, so I’m happy I made it.

split - Refactor Experiment#initialize / Refactoring: Extract ExperimentStore / Add redis on travis: Just a bit of refactoring and running tests in travis-ci. I was not using this project nor planning to use it in the short term, but I think I found the code via Code Triage and I thought it needed some serious refactoring, so I started with some. I didn’t continue contributing to the project.

To be continued…

If you got until here, thanks! This was the first part of this post, including my pull requests sent to OSS from October 2010 until the end of 2013. In the next post I’ll finish the 5 years recap until today.

meme credit: