With more than 100,000 open source projects hosted on SourceForge alone, starting a new one is no small undertaking, and bringing it to the masses is hardly a sure thing. In this article reprinted from Pushing Pixels, Kirill Grouchnikov explores the challenges and pitfalls of being the sole developer on an open source project. Whether you're thinking about starting a solo development project or struggling to maintain one, get tips for structuring your development timeline, managing development priorities, and finding a niche for your project, even in the vast sea of open source software.
JavaOne 2008 included a track on open source with a substantial number of very interesting panels, discussions, and presentations. These talks concentrated mostly on big, well-established, and very broad open source communities, however, which does not reflect the specific problems of a much vaster open source landscape. Here I'm talking about literally hundreds of thousands of projects that only have a single active developer. I call these "party of one" projects, and they pose some significant challenges to their owners, especially if the project is done as a part-time hobby.
Figure 1 shows some statistics from SourceForge, the largest repository of open source projects:
Statistics, of course, can be used to back up pretty much any point of view, but I do believe that the numbers above are a good reflection of what happens when a developer has an idea. Nowadays, it is extremely easy to find a free Web-based code repository and wait for the entire world to come. However, the absence of any entry-level barrier to creating a project quite often results in the idea being just that -- an idea. Just over half of SourceForge projects have any kind of downloadable content. Worse, while it is difficult to create even a first implementation, it is even more difficult to maintain the level of commitment and arrive at a stable release. Thus, as you can see above, only one in every six SourceForge projects were deemed stable by their own developers.
When all you need to create a project is an Internet connection and enough imagination to come up with a name, you have another interesting side-effect. While every project has a potential to reach millions of developers, they all compete for the eyeballs and attention span of those few tens of thousands that are looking. You can have a great idea, you can even have a great implementation, but most certainly you can't expect everybody to come. It is a big world out there, and the competition for attention is even bigger.
It takes determination, commitment, and perseverance to be willing to continue working on a project when nobody but you seems to be interested in it. It takes discipline and clear prioritization to understand that while coding is fun, every project has less pleasant (to us as developers) tasks, such as bug fixing, testing, documentation, and promotion. Without understanding what these tasks are, and being ready to step up and make sure that all of them get done, you might as well not begin in the first place.
Every one-man open source project has three main parts: development, maintenance, and promotion. I'll discuss all three, beginning with development, which is where it all starts -- and, if you're not careful, also where it ends.
Developing the project
Development is the most enjoyable part of a new project, at least for some of us. This is the time where everything seems possible, where there are no implementation complexities, no bugs to fix, and no annoying support requests for esoteric environments. Even if you are doing it in your free time, it doesn't take a lot of commitment to just sit down in front of your favorite editor and start banging away. It is also, unfortunately, a time where a sizable percentage of projects simply die.
It takes serious commitment to continue developing a new project in your own free time, at the expense of your other hobbies and sometimes even your family. This requires not only being enthusiastic about your idea, but being passionate. If you're not passionate about the idea in particular, and about its field in general, you might as well not start at all.
The three main aspects to development are
I will talk about creating features when I come to the topic of project maintenance. For now I'd like to focus on establishing tenets and setting up a release schedule. While these stages are not specific to one-man projects they are especially crucial to their success. Not planning development cycles in advance can have an extremely adverse impact on a project's ability to survive in the wilds of today's open source landscape.