Finding your way into open-source software contribution

Most people who become participants in open-source software find their way in organically - they were somewhere, or they were doing something, and open-source software was there to be discovered.

It does mean that people who don’t find themselves in the right contexts are quite unlikely to become involved. Few people become involved for the sake of becoming involved, and it can be quite a difficult thing to do.

This is a problem. For example, one of the most valuable things a candidate can show when applying for roles in the software industry is a track-record of open-source software activity (especially true when the prospective employer itself is an open-source software company).

You should get involved in an open-source project! is good advice, but it rarely comes with guidance on how, exactly, someone who isn’t already familiar with the context should do that. This article tries to offer some.

Choosing a place to start

The best chance of success will come with engagement in a project that:

  • you care about

  • needs help you can actually provide

  • will support your contribution

Even in open-source software, a “project” isn’t necessarily a software product. It could equally well be a community endeavour such as your local PyCon or other volunteer-run conference, or an educational project such as Django Girls.

Valuable contributions are not just code. Documentation is probably a better place to start than code for many contributors, but in general, open-source projects community projects run on people’s volunteered skill and time, and any way you can put those to use is likely to be welcomed.

What do you care about?

Ideally, you already know exactly what you want to become involved in, and why. If don’t, you’ll have to consider carefully what lines up with the things you care about.

Successful contribution depends upon a positive feedback loop of personal investment and value. So, the most obvious place to start is with something that you use and like.

It’s important that it has personal value. There are plenty of deserving, worthy, valuable open-source projects that you could become involved in, but what will make this work is not how important or deserving they are. This will only work if it’s something you care about.

“Caring about it” also means having thoughts and opinions on it. If you care about something, then even if it is already excellent, you can almost certainly think of something that could be improved, and how it could be improved.

If you can’t think of anything, then you probably aren’t deeply invested enough in it.

What help can you actually provide?

Sometimes this is obvious. You may notice that the project has a bug, or incomplete documentation, and if you know how to address this, there’s a clear match.

Be realistic. It’s pointless diving in to do anything that isn’t going to be successful, especially when you’re starting out. The most useful initial things will be small and modest. For you as a contributor, a contribution is successful if, after having made it, you’re keen to do more.

By far the best way to identify a need that you can could fulfil by contributing is to feel the need for yourself. That means you will have a direct connection to it, and a sense of why it matters.

You might also discover the project’s needs by reading through its issue tracker or spending time amongst its contributor community and listening to and taking part in those conversations.

Be warned though that it’s easy to misunderstand what an issue is or what its solution might be if you’re not truly familiar with the context, and especially easy to under-estimate what’s involved.

In some well-established projects, it can be hard to find the low-hanging fruit that new contributors can start with - but there is generally something.

Beware of hidden effort

You can expect much of the effort in your first contribution to be spent not on the essence of the contribution itself, but all the surrounding activities and demands.

In many cases you’re likely to find that you need to learn new skills even to make a simple contribution - there’s often a hidden overhead to contribution. For example, a code contribution might not be accepted unless you also include the relevant tests and documentation. You may need to learn to set up the test environment and run the test suite, or linters. There are likely to be contribution standards for patches that you need to meet.

If all your energy goes into making the improvement you want to contribute, you will have nothing left over to do the other work required to get it successfully accepted. So choose the simplest possible thing for your first attempts, that seems to be well below the limits of the help you think you can provide.

Will your contribution be supported?

Although nearly every project runs on volunteer contributors, not all of them enable new contributors effectively. You will not find success except in a community that can do this.

Some are frankly not welcoming to new contributors. The answer is simple enough: don’t even spend a moment wondering whether you might expend your efforts there, because it will not be worth it.

Others might be friendly and welcoming, but that doesn’t mean that they can provide effective support to a new contributor. They might not know how, or have the resources to do it well. If you’re not careful, you’ll discover this the hard way, after receiving some initial encouraging noises.

A project that is geared up to providing new contributors with success will have a culture of supporting contribution and the resources to make it happen (mentorship programmes, workshops online or at events, clear guides for new contributors, and so on).

Even so, support and success are not guaranteed. Even in the best-run projects, even with the best intentions, if everything relies on volunteer contribution, you might not find what you need - and you will simply have to be patient, and keep trying.

Relationships, time and communication

Only you can decide what you care about, but the other two questions - is there a match between your skills and their needs?, and is this project going to support a new contributor effectively? are ones you’ll need to look into carefully.

The only real way to do that is: listen and talk to people in those communities. For example, the way a beginner user is treated in their forums, IRC channels and so on is a pretty good indication of how a beginner contributor will be received.

Don’t expect to jump into a community, ask a few questions and receive the answers you need. It’s not like walking into a shop and picking up what you want. It’s not a matter of getting information, it’s the work of forming relationships.

How would you become involved in a local community, or one at work? You would courteously introduce yourself, express interest in becoming involved and then spend time building trust - and it takes time.