Today I am writing about contributing to open source, an argoment that I particularly care about.
Contributing to opensource is giving something to get something back
You give away your time and your expertise and you’ll eventually get something back.
Approaching an open source project may be daunting at first
We find a lot of reasons for that:
- We don’t feel good enough
- We think the project is too complex
- We are afraid of rejections
The truth is, everyone can find a project to add value to, starting from small things to more complex ones.
Contributors are a rare commodity, and the maintainers will try to do their best to make you feel comfortable and stick on the project.
There are several reasons for contributing to an open source project
- you need a feature in an oss project you use
- you want to learn
- it feels good (it really does)
- you want to earn credibility
To me, it was a combination of those. My first experience with open source was related to my ramblings about Android and when I wanted to see what it felt like contributing in a bigger Android app. That’s when I started contributing to Firefox for Android.
It turned out to be one of the best moves I have ever made for my career, not because I became a full time Android developer (although I got really close to that) but because it made me a better developer in many ways.
Open Source code is different
And it’s different in a better way. There is generally more emphasis on writing readable and maintainable code, because of many reasons.
This has two implications:
- it will be harder to have your code merged because a higher quality of the code is required
- you will learn how to write readable and maintainable code
Open Source is not (only) about writing code
Sending the first version of a patch is only the initial part of the process.
Contributing to a big project is the best way to get free coding lessons from the best developers out there, and it will also improve your communication skills.
When approaching a new project, you will need to earn the trust of the maintainers, and your code will be checked thoroughly.
You submit the pull request, then the ballet start.
You have to listen to suggestions, clarify your intentions, change your code. And iterate, until the merge happens.
Contributing a 3 liners patch can take weeks of discussion.
How to approach an open source project
If you need a feature
This is the easiest (and quite rewarding) way to find something to contribute.
You are adding value to a project you are already using, and what’s more, you’ll be using the feature you just developed.
With just one advice: always remember to discuss the feature first (eventually, in an issue). This will save you a lot of time in case the maintaners don’t think the issue fits the scope of the project.
If you want to contribute for learning
First step: find the right project
I recommend a bit of investigation, before choosing the right project.
You can starting from the applications / project you use to narrow the scope, but bear in mind that some project are more welcoming to contributors than others.
What you should look for:
- contributing guidelines
- good first issue (or similar) labels
- a good number of opened issue to work on
Contributing guidelines might be outdated, but they still show the good intentions of helping contributors.
You may want to clone the project and try to build it, to see how the dev experience look like.
And this is the tip of the iceberg.
Then, you should look at how active the maintainers are, if there are any stagnating open prs (you don’t want to wait weeks to have your code in), and how often they are merged.
In general, a good probe for the project liveness is to try to discuss the issue first. This will also help to make sure nobody else is already working on the same issue.
Other indicators of a good project:
- Continuous Integration
- Releases / meaningful tags
You want to contribute to something that is properly released and people are using, and the lack of releases is often a red flag.
You don’t need to be a super skilled developer
I am repeating again, because starting is the hardest thing.
In all projects there are different problems of different levels.
Just start with something simple, to get familiar with the people, the development process and the codebase.
This is exactly the reason why we put “good first issue” labels.
Just step in, say hi and let things happen. People (even the “rockstar” ones) are happy to help when new contributors approach.
What do you get back
Contributing to a project can drain a lot of energy. Now that I have kids, I find it exremely difficult to find the time to do some contributions but still, I keep trying.
You will learn a lot
I found Firefox for Android because I wanted to see a big Android project, I started contributing to Athens because I wanted somebody to review my Go code.
By contributing to the right project, you’ll see (and learn) how the best people in the industry work, and you’ll get advices from them for free.
On the non technical side, you will learn how to communicate with a distributed team using the right tools, and (something not to forget) you will improve your English skills.
You will (virtually) meet a lot of people, in many cases some of the best people in the industry.
As somebody who worked for a local company for almost 15 years, I can’t state enough how this is important. It was my window on the outside world.
You’ll eventually get new friends, and friends help each other. You’ll have somebody outside your local bubble to ask for advices (and to drink a beer with during conferences).
Will make your resume shine
Spending some of your free time writing code shows passion and willingness to learn, which are priceless values in our job.
Every time I had an interview, people asked me how contributing to Firefox looked like.
If you pick the right project, you will make a good impression as a candidate. In case you are a new graduate, it will make an even bigger difference compared to the other freshmen.
Finally, by working on an oss project you demonstrate to be able to work in a remote environment which could make it easier to land a remote position.
It feels goods
OpenSource is everywhere, and used in a lot of places. It really feels good to be able to contribute something back, to see a final result as a collective effort you took part to.
The idea of a collective contribution to something that makes the state of the technology go forward is really romantic, and despite I am not an OSS integralist, I really appreciate it.
Contributing is hard, and may be daunting at first. But it’s totally worth it. You’ll learn, make your resume better and make new friends. I strongly recommend to do the first step, ask to fix an issue or to contribute in some way. And follow the events.