Contributing to an open source project helps to improve it based on real-world experience and proven, working solutions
Any contribution to a code base, including those that you make to the (closed source) project that you may be working on right now, aims to improve the code base, be it based on new exciting features or hands-on refactoring to lower technical debt. And most likely, you will also use some third-party open source libraries or frameworks in your project as well. The question simply is, whether the improvement you made is worth being shared with others by contributing it to those open source projects you rely on. You may ask yourself:
- Is the change unique to my code base or could others benefit from it?
- Does it represent a solution to a problem others may experience as well?
- Would you have wanted to find the solution you came up with in an open source project instead of implementing it yourself?
- Would you prefer to maintain the code all by yourself or rather have it being maintained by others in the open source community?
No matter how the answers for the change at hand may look like in detail, it is more than obvious that we should think about actively improving open source projects regularly, instead of solely using them. Supposedly, most of the time you are solving real-world problems in your software projects; problems that others may experience as well. In the end, there is no better code base than that maintained by a whole open source community, as compared to you being the only one, who is in charge of the code.
Contributing to an open source project helps you gain a much deeper knowledge about the software
Your first open source contribution may not be as easy as you might expect upfront, as it may involve one or more of the following steps:
- determining which part of your solution is worth contributing
- studying the contribution guidelines of the target project
- obtaining and building the project
- extracting the relevant code fragments
- adapting the code and integrating the desired changes
- providing the required level of automated test cases and documentation
- filing an issue
- submitting the change
While this may leave you questioning, whether it is worth the effort, there is a major benefit, that is often overlooked: Once you’ve gone through these steps, you will have gained a much deeper level of knowledge and understanding about the project at hand. In the end, it is nearly impossible to add new functionality or extend existing features, if you haven’t earned a thorough understanding about the concepts and principles, the project is based on.
Moreover, it is absolutely normal that your changes won’t be accepted in the first run. However, this way you get in touch with other experienced people working on the project, giving you valuable insights and feedback, as well. In fact, getting in touch with the people, who actually develop the code base of an open source project, is way more beneficial than talking to a sales representative of a commercial product.
Finally, all the knowledge gained through discussions with project members and by contributing actively to the code base represents an often underestimated competitive advantage for you and your company. Contributing to an open source project, in the end, lets you reach a higher level of expertise. Something that cannot be easily, if at all, achieved by simply reading books or using the project at hand.
Contributing to open source project helps your reputation and can leverage your career
As a co-founder of Digital Frontiers I am also responsible for finding talented people, who are willing to join our team and help our customers. Technical expertise, or at least the strong will to gain it, is something that we expect from all our team members. However, it is often hard to tell, if someone meets those expectations, simply by looking at their CV. On the one hand, there are extremely talented people, who never really cared (or had to care) about a meaningful CV. On the other hand, there are people with full blown CVs, that have barely touched the surface of the technologies, they pretend to know in-depth. So, how do you find the right people for the job?
Well, there is nothing more convincing than a strong list of open source contributions, when it comes to judging the expertise of talented people. Luckily, platforms like GitHub provide an easy way to both show to potential employers what your interests and skills are and for them to verify, if the expertise meets their requirements.
Hence, active open source contributions emphasize your expertise and knowledge, more than certificates alone will ever do. This is beneficial for advancing your career, be it at your current or an interesting, future employer.
Contributing to open source projects you are using in your projects lets you better deal with potential risks and plan for the future
Most software projects have a roadmap, that aims to help you to plan for the future. These usually include bug fixes and features at varying granularity lined up in a rough schedule, ranging from weeks to years. For commercial, closed source projects this roadmap, however, is of little help, when it comes to dealing with the risks of not finishing essential parts of it in time. Sales representatives are renowned for promising you all kinds of marvelous features to keep you at it. However, a sales representative rarely knows the risks that are actually associated with developing the feature, he just promised you, nor will he ever actively tell you about an end-of-life of his product.
Open source projects usually have a much more transparent roadmap, simply for the sake of collaborating with the contributors, who need to know, where the project is heading for. As such, when you actively contribute to open source projects that you actively use, you benefit from this transparency and are able to evaluate the risks associated with required features or bug fixes more precisely. Moreover, you can actively shape the roadmap (by contributing) or at least influence its prioritization. Ever successfully convinced a big commercial software company to accept your personal idea for the next major release?
Contributing to open source projects is fun and gives you personal satisfaction
Last but not least, contributing to open source projects can be a lot of fun, though challenging at first. While in your own projects you may be in the position to act quickly, when it comes to design or architectural decisions, there may be a lot more discussions in open source projects. Remember, that the best projects attract the best people, so when contributing to such projects, you are getting in touch with strong decision makers and very talented developers. It may be hard to convince them of your solution, the design you have chosen, or the usefulness for others. However, doing so successfully, will give you a much higher personal satisfaction than you may have expected.
So, if you are still hesitating to share your ideas with others by means of an open source contribution, let me point out that I proposed the Spring Framework enhancement mentioned before back in 2016. While there was some discussion back then about the usability of the suggestion, the issue never got much traction until the year 2019. It was at this time that the project maintainer rediscovered my solution, as it was able to solve problems which others had reported as well. I was pleased to help in providing an implementation for my proposal, which has already been accepted as of today.
Gain Programming Experience
The beauty of an open source project is that anyone can contribute code. Of course measures are put in place to prevent abuse (submitted code needs to be approved by a project leader) but if the code works, it doesn’t matter who wrote it.
As such, many intermediate programmers will seek out open source projects that they find interesting and look for areas where they can make a difference.
For example, many projects use a bug tracker to keep track of issues that need resolving. These issues range from trivial to complex, so while the experts work on fixing a deeply critical bug, novices can tackle the trivial stuff.
There are many reasons to contribute to open source projects. It feels good, and it can help you land a job or get your foot into the door at a new company. But this isn’t what motivates me. I support open source projects no matter where I work because, as an engineer, working on open source software is a great way for me to stretch my expertise and push my abilities to their limits. Contribute to open source because you will learn more, improve your skills, and have fun doing so.