How to Run a Successful Open-Source Project
How to Run a Successful Open-Source Project
Check out these best practices for building and running a successful open-source project.
Join the DZone community and get the full member experience.Join For Free
A couple of years ago, I attended BarCamp Brighton, an open conference at Brighton University. Everyone was encouraged to present a session, and as I don’t need much excuse to talk to a room full of people, I thought I’d do an unrehearsed talk on running an open-source project based on my experiences with EasyNetQ. I spent about half an hour going through what EasyNetQ is, its history, and how I organize components to a room of about six people. I know, fame at last! The really interesting bit came during a round of questions with a chap who worked for the Mozilla Foundation. He asked: What makes a successful open-source project? Of course, ‘success’ is very subjective. Success, for me, means that some people are interested enough in EasyNetQ to download it from NuGet and commit time to send bug reports and pull requests. However, for other people, success might be defined as a project so popular that they can make a living from supporting it. Given the former, lower bar, here are some of the things that we came up with:
- It has to do something useful. Obvious, yes. The classic ‘scratching an itch’ reason for starting an OSS project usually means that it’s useful to you. How successful your project is will depend on how common your problem is.
- A clear mission. If you have a clear mission, it’s easy for people to understand the problem you are trying to solve. EasyNetQ’s mission is to provide the simplest possible API for RabbitMQ on .NET. People know what the intention is, and it provides a guide to EasyNetQ’s design.
- Easy to install. If your environment provides a package manager, make sure your project provides a package for it. Otherwise, make sure you provide a simple installer and clear instructions. Don’t insist that people build your project from the source if you can avoid it. EasyNetQ installs from NuGet in a few seconds.
- A good ‘first 20 minutes’ experience. Make your project super easy to get started with. Have a quick start guide to help users get something working as soon as possible. You can get EasyNetQ up and running with two console apps publishing and subscribing within 10 minutes. Hmm, I need to get that quick start guide done though :p
- Documentation! Clear, simple-to-follow documentation is really helpful to your users. Keep it up to date. A wiki that anyone can update is ideal. I use the GitHub wiki for EasyNetQ’s documentation. If you can register a domain name and have a nice homepage with a short pithy introduction to your project, so much the better.
- A forum for communicating with your users. I use a Google group. But there are many other options. Make sure you answer people’s questions. Be nice (see below).
- Let people know what’s happening. A blog is an ideal place to write about the latest project news. Let people know about developments and your plans for the future.
- Release early, release often. Long feedback loops kill software. That’s true of any project, open or closed, but much more so for open source. The sooner you get your code in front of people, the sooner you find out when it isn’t working. Have a continuous build process that allows people to be able to quickly install the very latest version. You can split out ‘stable’ from ‘development’ releases if you want. I don’t bother, every commit to EasyNetQ’s GitHub repository is immediately published to NuGet, but that will probably change as the project matures.
- Have a versioning policy and explain it. You can see EasyNetQ’s here.
- Use GitHub to host your source code. Yes, yes, I know there are alternatives, but GitHub has made hosting and contributing to OSS projects much easier. It has become so ubiquitous that it’s the obvious choice. Everyone knows how it works.
- Be nice! It’s easy to get frustrated with weird questions on the mailing list, or strange pull requests, but always remember to be polite and helpful. Be especially nice to people who send you bug reports and pull requests, they are helping your project for no gain. Be thankful.
I’m sure there are loads of other things that I’ll think of as soon as I hit ‘publish’ on this post, so don’t think of this as comprehensive. I’d love to hear any more suggestions in the comments.
Published at DZone with permission of Mike Hadlow , DZone MVB. See the original article here.
Opinions expressed by DZone contributors are their own.