On Contributing to Open Source

I used to believe that contributing to open source would be the stamp of approval I’d need to be taken seriously as a developer. I would look for a project to contribute to, pour over the issue list, find one marked “good first contribution”, and dig in.

I repeated this process many times. I can count on one hand how many of those times actually resulted in a contribution. This was a forced strategy. I was often confused on how to start. I lacked sufficient context and had difficulty communicating my struggle with others. It made me feel like a fraud.

I’ve read tons of posts about “how to contribute to open source”. Most of them are along the lines of:

  1. Find a project you like
  2. Read some issues
  3. Get involved
  4. Be a hero

Many people have had success with this process, and there’s definitely positives that come with it. This can’t be overlooked. But! I stand by my belief that it feels forced.

Contribute out of necessity#

Spend enough time in your programming language’s ecosystem, and you’ll come across weird edge cases and annoying roadblocks with other people’s code. Most of the time these obstacles have already been met. Google the error, find the corresponding GitHub issue, read the discussion, implement the fix, and move on.

Sometimes there is no issue. The world is quiet, and you alone are left with the task of figuring out wtf is going on. In my experience, this is the most effective way to contribute to open source.

“Necessity is the mother of invention.”

It was a natural progression that led you to this moment. You have all the context you need, because you’re the user. You understand what the code should be doing. You may not know how to fix it at this moment, and you may never figure it out, but contributing to open source is much more than shipping code.

Open an issue. Describe how to reproduce it. Make a proof of concept so others can see what’s going on without much effort. This will teach you how to communicate technical details.

This can go 1 of 2 ways:

  1. You are missing a crucial detail that will fix your problem easily, allowing you to move on and get back to work.
  2. You did in fact find a bug, and have now alerted the community to its presence.

If its #2, you’re on the right track! Eventually others will find your newly minted issue. Discussions will begin. You can contribute to these discussions, and you should!

Before waiting for an answer from the maintainers, see if you can solve the issue yourself. Jump into the codebase. If you find a fix, open a pull request. If you’re not sure, report what you’ve learned in the issue’s discussion.

To me, this is a better way to contribute to open source. Eventually the problems will find you, and it’s up to you to decide how to deal with it.