Why participate in open source projects? What makes all these developers work to give away the product of their efforts? What is motivating them? What are the benefits? What block a developer from contribute to a project? Open Source projects are prepared to large amounts of developers? Is easier for every developer get involved in your open source project?
In this article, I’ll describe some of the motivations and blockers for participating in open source projects, from the point of view of the developer. Let’s start by parts.
Why developers contribute to Open Source projects?
Open source takes on multiple forms, from big projects such as WebKit, Blink, Apache or Linux to smaller ones (nowadays typically on GitHub) such as Cordova or even tiny contributions such as shared on codepen.io. In all cases, developers from various backgrounds initiate, contribute, participate and power these projects, large or small.
A sense of community
In addition to participating to fulfill a purpose, open source projects often have a vibrant community. As human beings, we usually enjoy the sense of belonging to a group of like-minded people (that’s why we join running clubs, do cross-fit with others or go salsa dancing once a week) and that is even stronger when we join a group that works towards a purposeful goal. Working on an open Web server at Apache is a goal that can be very compelling to a lot of developers, just as participating in the DoJo framework will be to others. Being on a committee on the Cordova project will be fulfilling for yet another group. In each case, the project and its community provide an environment where work has meaning beyond the paycheck.
Sharing and helping
First, the philosophy of open source means doing something that allows people to use, modify, share and study valuable code, which is geared toward helping others, something that resonates with many developers. Taking part in open source means working for the advancement of greater shared knowledge.
Participating in open source efforts helps others reach their goals. It educates others by sharing valuable, intellectual value with them. This is helping others, something that I believe is profoundly human and draws people in, illustrating the dedication people show toward their open source efforts. I have always been impressed by the patience, efforts and helpfulness that leaders of open source projects often display: fixing bugs at the eleventh hour, tirelessly responding to questions or going beyond their comfort zone, always with the goal of helping users or other developers.
Because of the above, people in open source projects are often very dedicated and passionate about what they do. They give it their best and as a result, they get benefits. at open source projects foster a sense of ownership and responsibility that pushes people towards greater achievements. Become a community figure, clients and/or recruiters will call you!
Then, because the work happens in the open and among a community, a talented open source contributor will become known and recognized for his or her contribution. If you are a freelance developer, that will help you get known by potential clients. If you like working for an established company, you will be more likely to be hired by companies who try to get involved in particular open source projects. For example, big companies such as Apple, IBM, Google, Microsoft and certainly Adobe are all involved in many open source projects and recruit talent, often from the people already involved and contributing to the projects they have an interest in.
How Developers are attracted to Open Source projects?
Create Opportunities for Discrete Contribution
Blockers for Developers at Open Source projects
Barriers to Contribution
I think it’s relatively clear to most developers why open source contribution is a good thing. Additionally, I think there is something intrinsic to the developer’s mindset that drives us to crave the scrutiny and the ups and downs of publicly available code. So why doesn’t everyone write lots of open source? Here are a few reasons with my responses:
I'm not good enough to release open source. Poppycock! My first open source release was literally forking another project and hacking at it until it did something I wanted it to do that it didn't do before. I had no idea what I was doing. I still don't, most of the time, and I've released dozens of open source projects. People will think I suck because my code sucks. Nope, people will ignore your project if your code sucks. That's the worst case scenario. And, to be honest, if you're solving a problem that other people haven't solved, they'll probably use your code even if it sucks. And then they'll patch it so it doesn't suck anymore. Wins all around. How do I even do it? It seems complicated. It's not, especially in the GitHub era. If you want to know how to do something, find a project that does something similar and steal their execution. Just steal and steal from everyone until you understand it well enough to forge your own path. I don't have enough time! Find a way to make time! Identify a piece of your existing app code that other people would find useful and extract it out. This cuts your open source time down to abstraction instead of creation. Work on open source for half an hour a day. Convince your company to sponsor some open source time for employees. Contribute small patches to the libraries that you use on a regular basis. Where there's a will, there's a way.
I could go into detail and examples on each of these points (please feel free to ask me sometime), but the point is that whatever you think is holding you back from contributing to open source, the reality is much less frightening. Your first project will be the hardest to get out the door, but it gets exponentially easier each time after that.
In coming articles in the series, I’ll talk specifically about how to be a good open source user, how to be a good contributor, and how to be a good project owner. But if you only needed a tiny push to start getting involved, hopefully I was able to supply it. Please feel free to discuss anything related to open source contribution in the comments, I’d be happy to lend what knowledge I have to the service of getting everyone more involved!
Why an Open Source project should be interested in Developers participation?
It Leads to Better Code
You may run a tight ship when it comes to code quality and you may even have excellent processes in place to ensure that the code that you deliver is well-tested and sanity-checked before it ever reaches production. However, there is simply no review process that can compare to the power of opening up source code to the world at large and letting them take a look. The code quality bump is due to two primary reasons:
Developers building things for open source know that anyone in the world can look at the code they're writing. It will make them less likely to take easy shortcuts at the expense of good code. Other people will start using your code way off the golden path you imagined when you designed it. This will cause your architecture to evolve to be more flexible, useful, and hardened.
I know that in many cases I’ve had to rewrite large sections of a project because the community use cases have revealed a superior architecture that will encompass a broad range of functionality. I then benefit from this architecture when I need a similar solution in the next project I’m working on for my company.
If you are already participating in open source, I hope that I have captured some of the motivations that drive you to do so. If you are not (yet!), I hope this article gives you some insight on why you might want to participate and what benefits may derive from being engaged (such as improved skills and visibility in a community).
I encourage you to explore open source projects or better yet: go to conferences, talk to people or engage to ask them their motivations and what they get out of being involved. In my experience, they are the best testament to the great work happening in open source projects and the sense of accomplishment many get by serving a goal and effort they believe in, while still being able to take care of the needs of life (and pay the bills!).