The average fully employed developer spends more than 6 hours every week working on open source, side- or hobby projects:
Why do so many people work for free, in their spare time… on top of their studies and full-time jobs, essentially taking on a second job?
Some of the best developers I know are prolific open source contributors, and contribute because they love programming (and others are also fantastic developers, but either haven’t made the plunge, or just have zero interest in contributing to open source – they have other priorities, and their day job is enough programming for them).
Personally, I’ve invested a large part of my life into open source – partly out of altruism, partly because my job requires it, and partly for more selfish reasons (my current main commitments are the Drupal security team, Drupal core maintenance as a core committer, and maintaining some 30+ contrib modules).
This article is for those of you who are still on the fence about getting involved with a major open source project. Whether you’re just starting out, mid-level, or very established already, many open source projects desperately need your help!
Everyone has their own story about why they contribute, but some themes always come back:
The one thing everyone raves about is how incredibly fun and inspiring getting involved with these communities is. These sheer scale of them is impressive – some of the larger open source communities (Mozilla, Drupal) have hundreds of thousands of people contributing. You’ll get to meet some amazingly smart, interesting, and passionate people (and make friends with them!). I have met some fantastic people and made some life-long friends at conferences, and contributing has made me learn and grow in many ways. For me, working with these super smart peeps is definitely the main motivation.
Many people (including myself) love the sense of community, and the sense of accomplishment from working with others towards a shared goal by serving an effort they believe in.
And for those of you who have mind-numbing day jobs, or who are the senior dev on a team and don’t get to work much with more advanced developers much, these projects are a great way to make programming fun again!
If you’re achievement-oriented, you’re in for a treat as well – in any major project, there are many super interesting problems to solve and big and important tasks to tackle. Many of these problems are absolutely within reach with a bit of effort, and it’s incredibly satisfying to make an impact like that.
Open source is a do-ocracy, so if you’re any good, you will be identified, and if what you want is ownership and responsibility, you’ll be given plenty of that – more than you’ll know what to do with. And this can happen in months rather than years – some contributors make meteoric rises.
If what you want is to showcase your skills, open source is a fantastic medium. Some very talented developers just plug away, keep their heads down and deliver fantastic work, but if no one knows about that, open source is a great way to break out and become known in the community.
Also, just a note to anyone who is merely dabbling in open source and has the time and inclination to step up and take on more important work, but is too intimidated to approach major contributors (I know I was, initially), don’t be! These are people who are super happy to help if they see you step up and deliver good work.
Learning and mentorship
Open source communities are great places to work on your skills and pick up some fantastic mentors that can supercharge your development. Main contributors to larger projects are invariably super impressive, and happy to help out.
You will truly get to “learn from the best” – which is a great opportunity if you don’t get to work with many great developers in your day job. You get to see how experienced developers work, approach problems, and code up and discuss solutions. More importantly, a whole army of programmers will be looking over your code and provide reviews and feedback, which is invaluable to beginning programmers.
As you grow more established, you’ll also get to teach people yourself, which is also incredibly satisfying.
“If you can grow into a recognized position in an open source project, that puts you ten steps ahead of applications even from folks with 20 years experience in the field” – Matt Mullenweg, CEO of Automattic
For those just starting out, and perhaps looking for their first job after a boot camp, or after college, open source is a great place for picking up (and improving) real-life professional and technical skills. Your code will typically be subject to rigorous quality control; more so than in many professional settings. Open source projects are the real deal – you will learn more about programming and working in a team than in school.
These are also great places to showcase your skills to potential employers. If you have some impressive open source contributions, you will immediately be in good graces with open-source-friendly companies. Personally, whenever I evaluate job candidates, this is always an immediate plus and definitely makes a candidate stand out.
Oh, and those people you get to meet on IRC and in meetups/conferences? They’ll help you find jobs!
And as you gain prominence, opportunities will be thrown your way automatically (think jobs, or co-authoring a book).
Give back and be useful
Many people also contribute to these projects because they use them, because they love the open source idea, out of pure altruism, and because they love the sense of purpose that feeling useful gives them.
There is also a great sense of pride and satisfaction whenever you receive some praise and gratitude for your contributions – or even just getting the personal credit and feeling the direct impact of the work.
So where should I start?
“Every good work of software starts by scratching a developer’s personal itch.” - ESR
While you could just pick a random beginner-friendly project that you only have a bit of interest in, in my opinion the single most important thing is to pick a project you are intimately familiar with and that scratches your itch as well – in the end working on something that matters to you will be a better motivation than any other. And having a good understanding of all the use cases and pains is also a bit of a prerequisite for doing more important work.
Ideally you contribute a feature that you need yourself, or a fix to some bug that is bothering you. For me, I made my first major contribution back when I used Linux (lfs!) and my favorite media player was MPlayer. I used often used the command line player to watch videos and was bothered by the lack of any visual feedback on what the current position of the playback was while fast-forwarding. So I added a progress bar to the On-Screen Display (for purely selfish reasons) and sent the patch to their mailing list. Only a few revisions later, it was merged into their codebase, which to my 15-year-old self felt like a tremendous accomplishment!
Progress bars, yay!
If you don’t know where to start, start with easier tasks – write docs, write unit tests, write good bug reports, help with bug triage, review existing patches.
Most of the larger open source projects have very clear documentation on how to get involved, so look for that! These days (with GitHub) it’s easier than ever to at least submit a pull request.
So get out there and contribute!
Contributing to open source has been great for me on a personal and a professional level, and I highly recommend any developer to get into it as well. Getting started can be rough, but after the first few contributions it gets much easier. One thing though – overall this is not easy. Be prepared for code not to be committed, for it to be ripped to shreds, for abuse, for politics, and for plenty of BS. It needs a certain personality type. The best contributors are extremely competent and can generally be described as self-motivated, disciplined, persuasive, very proactive, persistent, and truly relentless.
No, not like this
And don’t just engage in GitHub/IRC – go to conferences/meetups and talk to contributors about gettting involved more deeply! Ask about their motivations, find out what they get out their involvement, because they are the best testament to what immense personal benefits people get out of open source.