Building an Open-Source Community
Building a community around an open-source project is critically important to its success so that it can grow and stay relevant over time. However, figuring out how to start laying the groundwork for a vibrant community is not always easy or straightforward and is often the last thing a developer thinks about. When you get it right though, the benefits to the overall project quality, usage and impact can be immense. Here at Development Seed this is a challenge we’ve faced many times with projects like OpenAQ, Prose, OpenAerialMap and landsat-util. We’ll show you how to include people interested in helping your project progress and also how to deal with common issues like promoting community involvement and handling project management.
So how do you get people to contribute; growing your community and your project?
Give people a problem to solve
The single biggest way to get people involved is to motivate them with an interesting problem or by providing them with access to tools/data that were previously unavailable. Hopefully, you have an interesting problem that you’re trying to solve and will help a lot of people, if not, why are you doing it? That’s all to say, people should be interested in what your project is trying to achieve.
Show people what needs done
Once people are invested in the idea of your project, give them obvious ways to contribute. Have a maintained issues queue (e.g., GitHub, Trello, Asana) where visitors can see what they can help out on and potentially a project timeline so everyone knows the plan for upcoming work. Also, remember on many projects, there are often different types of tasks needed. Not everyone is a highly-capable JS/Python/Ruby developer, but they might be an awesome designer and may be able to provide a better design for your landing page. Or they might be willing to talk about your project via blog posts; or focus on building out your test coverage; or upgrade your documentation and examples. On most projects, there are different types of tasks and good project management can let everyone contribute.
Make it easy to get started and show people how to contribute
Contributors will be coming from different backgrounds, coding styles and companies, so tools that help enforce standards are very beneficial to the overall continuity in the project and lead to a better experience for contributors. Make your system easy to stand up, develop on and contribute to. This means including things like:
-
Contributing guides
Contributing guides are very useful in letting visitors know how they are expected to contribute. Do you require tests to be written or test coverage to increase, before code can be committed? Do you require every code change to be tied to an issue in a queue? Because all projects are slightly different, contributing guides can help remove any mystery. As examples, check out our contributing guides for Prose and OpenAQ. -
Tests
Good tests are indispensable in helping contributors learn about functionality and make sure they’re not breaking anything when they suggest changes. This gives everyone more confidence in the code that is being submitted for review. In many cases, reading over the tests that have been written for a system are a great way for contributors to learn about its intended functionality. A full overview of the value of testing is outside the scope of this post, but take a look at landsat-util’s tests as an example of a well-tested open-source project. -
Linters
Linters are small programs that check code for stylistic or programming errors and help keep it internally consistent. With them, you can enforce syntactical rules across your project like spacing, semicolon usage or variable naming. Also, linters are great for uncovering lots of easy to miss, common programming errors. If you’re using JavaScript, eslint is a good place to start. -
Style guides
A style guide is a reference for the visual components of your site. If someone wants to contribute a new page with a form, how should that form look? How are the labels and tooltips handled? What are the primary colors? Ideally, there is one place where everyone can look and see what styles should be used across the site. For an example of an awesome style guide, check out 18F’s work on U.S. Web Design Standards.
Make everyone feel a part of the community
When trying to build an active community, it’s important to think about fostering long-term engagement from the very start by involving people early. One of the main ways to do this is through open communication channels. For the OpenAQ project, we set up a dedicated Slack channel where everyone can talk about general air quality issues, as well as ask specific questions about the platform. It’s been very helpful for consolidating communications and introducing newcomers to the existing community. Whenever gathering contributors, either virtually or physically, it’s a good idea to explicitly set community standards with a code of conduct. This is becoming more common for open-source projects and a few popular ones are from the Django project, Python and Ubuntu.
Gathering contributors in person can be helpful to either just meet each other or to do mini-sprints to work on certain features. However, this is often difficult due to the geographically distributed nature of most teams. For both OpenAerialMap and OpenAQ we haven’t been able to meet in person frequently, but have been able to get people together at events community members were already attending, like State of the Map or the American Geophysical Union conference.
Be honest
For most of us, working on an open-source project isn’t our full-time job. When issues arise (and oh they’ll arise), try to be honest with people about how and when you can go about fixing them, even if it’s going to be a month before you can. It’s better to set reasonable expectations, than leave someone wondering why their contributions are being ignored.
By giving people a problem to solve, showing what needs done and how to help and being inclusive and honest, you’ll be on the right path to getting your community off the ground and headed in the right direction. All of this can be difficult at times, but building an active and diverse community is incredibly rewarding and will make you see your project in new ways. From getting feedback from users you never even knew would be interested in the project, to being alerted to flaws you had never considered. Ultimately, all of this will greatly raise the potential for your project to have an impact, which is the real goal.
Want to learn more about how to build an active and diverse community? There were a number of topics we lightly touched on here. Watch out for future posts that talk about them in more detail.