I get this question a lot! The answer is usually… don’t. If you already know what you want to do, then the question doesn’t need to be asked.1 But, if you don’t already know what you want to do, then your time might be better spent elsewhere!
The best contributors are always intrinsically motivated. Some contributors show up every now and then who appreciate the value the project gives to them and want to give something back. Their gratitude is definitely appreciated2, but these kinds of contributions tend to require more effort from the maintainers, and don’t generally lead to recurring contributions. Projects you already like are less likely to need help when compared to incomplete projects that you don’t already depend on — so this model leaves newer projects with fewer contributors and encourages established projects to grow in complexity.
Instead, you should focus on scratching your own itches. Is there a bug which is getting on your nerves? A conspicuously absent feature? Work on those!
If there’s nothing specific that you want to work on, then you may be better off finding something to do in a different project. Don’t be afraid to work on any free- and open-source codebase that you encounter — nearly all of them will accept your patches. If something is bothering you about another project, then go fix it! Someone has a cool idea and needs help realizing it? Get involved! If we spread the contributions around, the FOSS ecosystem will flourish and the benefits will come back around to our project, too.
So, if you want to contribute to open-source — as a whole — here are my tips:
- Find problems which you are intrinsically motivated to work on.
- Focus on developing skills to get up to speed on new codebases fast.
- Don’t be afraid to work on any project — new languages, tools, libraries; learn enough of them and it’ll only get easier to learn more.
- When you file bug reports with a FOSS project, get into the habit of following up with a patch which addresses the problem.
- Get used to introducing yourself to maintainers and talking through the code; it always pays to ask.
If you want to work on a specific project, and you have a specific goal in mind: perfect! If you don’t have a specific goal in mind, try to come up with some. And if you’re still drawing a blank, consider another project.