I was listening to show 83 of the CFHour podcast the other day and Dave asked the question of Kurt and Jason, "Why should someone contribute to an open source project?" Kurt had some very good answers which got me thinking about the question as well. Specifically, why do I contribute to open source software (OSS) projects? In this post I'll attempt to answer that question, as well as give some other reasons why one might choose to contribute to an OSS project. I hope that this post may motivate some others to contribute to OSS projects as well.
To Give Something Back
I have been a user of ColdFusion OSS for over a decade. I used Fusebox to create my first real CF web application and I've never looked back. OSS developer tools including Fusebox, Transfer, ColdSpring, Illudium, Model-Glue, Reactor, cfUniform, MXUnit, ValidateThis, ColdDoc, Lightwire and VarScoper have all helped me develop applications faster and better. OSS Solutions such as BlogCFC, Mura CMS and Codex Wiki have also been part of my career as a web developer. Although it doesn't really fall into the category of OSS, the content of many developers' blogs have also been a continual source of knowledge and inspiration.
These are all products of the ColdFusion Community, from which I have reaped tremendous benefit, so it seems only appropriate that I try to give something back. I stared that effort by creating a blog (around three years ago) and doing my best to blog regularly about whatever I am learning. Since then I've had the opportunity to release my own OSS as well as contribute to a number of existing projects including cfUniform, MXUnit and Model-Glue.
To Get to Collaborate with Really Smart People
How else would someone like me get a chance to work with the likes of Adam Drew, Adam Haskell, Bill Shelton, Chris Blackwell, Dan Skaggs, Dan Wilson, Dennis Clark, Ezra Parker, Jamie Krug, John Whish, Marc Esher, Matt Quackenbush, Mike Henke, Mike Rankin, Patrick McElhaney, Randy Merril, and TJ Downes? I mean seriously folks, it doesn't get much better than that.
Anyone would be keen to work with these smart and, for the most part, congenial folks, but for me it's extra special because I am a sole developer. I work out of my home in snowy Toronto, and have little interaction with other developers on my daily development work. Some of you may be in the same boat as me, and others may be part of a team, but if you're one of the senior developers on that team you may still get little opportunity to collaborate with other advanced developers. Contributing to an OSS project is an excellent way to do so.
It's Interesting and Challenging
Sometimes the work we have to do to bring home the bacon can be less than interesting and challenging. If we're lucky that's the minority of our daily tasks, but for some of us we're just not as challenged as we'd like to be in our regular job.
Writing OSS can introduce a lot of challenges, many of which you may never have had to face before. It is very different writing software that has to be generic enough to be useful to the masses. We cannot rely on conventions that work for one specific project or use case, and we have to be able to imagine our software being used in ways that we might not have originally envisioned. It's a very interesting perspective to take, and I find it to be particularly challenging.
Not only is the work interesting and challenging, but it can be great fun too. How often in your job do you get to choose exactly what you want to work on? How often do you get an idea for a feature or enhancement but are told it's not a high enough priority? If you're working on an OSS project you can experiment as much as you like, and you can choose which features or enhancements you want to work on.
It's a Great Opportunity to Learn Something New
You will encounter problems when working on OSS that you likely have not encountered before, which present excellent learning opportunities. You can try out new tools and techniques on an OSS project. For example, if you've never done any unit testing, and cannot get permission from your boss to do so in your regular job, writing some code for an OSS project would be an excellent place to try it out. As another example, most OSS projects use source control so if you're not yet familiar with Subversion or Git contributing to a project that uses one of those would present an opportunity to learn about that tool.
Of course there's also the fact that you can learn a ton from the smart dudes already on the project, and even just learn by looking at the existing codebase.
It Looks Good on a Resume
More and more employers of developers are looking at community contributions. They like to see that you're blogging and contributing to mailing lists, and they really like to see you listed as a committer on an OSS project. It can also help with the work experience section of your resume. If your current development job only has you working in a limited number of areas you can flesh out your resume by doing something different on an OSS project.
It Doesn't Have to Be Code
Other than the Giving Something Back item, most of what I've discussed above is about what you can get out of contributing to the development of OSS, but if that's something you don't want to do (ask yourself why, first), then there are other ways to help too. Here are some ideas:
- Write some documentation.
Almost every OSS project could use more and/or better documentation, and I can pretty much guarantee that the author(s) would be pleased to have you volunteer.
- Do a blog post.
OSS projects thrive on users. The more people who use the software the better it can become, so let folks know about your favourite piece of OSS by blogging about it. If you don't have your own blog most projects and/or authors do, and they'd likely be glad to host a post of yours on their blog.
- Give a presentation.
User groups are always looking for presenters, and there's also the Online ColdFusion User Group. Get the word out on an OSS project by presenting on it.
- Participate in the mailing list.
Many OSS projects have their own mailing list to which users submit questions. Get involved by answering questions or contributing to the discussion in some way.
What Are You Waiting For?
So, what are you waiting for? Get out there and contribute. Choose a project that you're already using and see how you can get involved. Maybe there's a feature that you've always wanted. Maybe you've noticed a gap in the documentation. Maybe you've figured out how to do something cool with the project and can share it with others via a blog post. Whatever you choose I'm confident that it will be a rewarding process both for the project and for you.