Contributing to Open Source
Heads Up!
This article is several years old now, and much has happened since then, so please keep that in mind while reading it.
Imagine if you were able to find a piece of software that you really enjoyed using, and were able to use at work as part of a profitable software solution without having to pay a penny for it. Imagine that you could even then see every single line of code that makes it work, not only to be able to learn how it is done, but to also be able to change it, improve it, make it your own, with your slight improvements and changes being wanted by everyone else that uses the product. Imagine the feeling you'd get when that actually happened for the first time. Your code, your entirely ordinary, "oh it's nothing special" code being used by thousands of similar people around the world every day.
What you're picturing is right here. It's open source software and luckily for everyone that works with Umbraco, it's all around us, and easier than you might think to get involved with.
What you're picturing is right here. It's open source software and luckily for everyone that works with Umbraco, it's all around us, and easier than you might think to get involved with.
What is open source?
As you might imagine, the history of open source software originates from education and in particular universities. The early computer operating systems in the 1950s and 60s were provided alongside the hardware, but the source code of them was also provided to allow bug fixes and improvements to be made without the need of shipping new hardware. Universities and researchers were some of more active users of these machines, and so when they made improvements their academic nature was to openly share their results with others. This free sharing of software ultimately forms the start of open source, though it wasn't until 1998 that the term "open source" came into use with a source code release of the then hugely popular Netscape Navigator browser. Since then, open source has grown in popularity and scope, with many huge products and programming languages choosing to openly provide their source code to the world, often with very few restrictions in place.
"The power of Open Source is the power of the people. The people rule."
Philippe Kahn
But surely putting your entire product out there for the world to see, change and copy is a dangerous idea? It is. It's a bold move that relies on one key component being in place to really make it successful. A community. Made up of as many different kinds of people as possible, because diverse thinking is what makes a good product great.
The community aspect of open source is an area where Umbraco is leading the way. We are not the biggest or loudest community, but we are incredibly passionate. Passionate about the product, the quality, the users and each other. We thrive on making things simpler and stronger, but that's not through chance. Umbraco is fortunate to have a profitable company behind it, guiding the product and community with their mission to make Umbraco friendly, simpler and social. You only need to spend an hour with the product to recognise its simplicity compared against the competition, and an hour with the community will highlight the social and friendly atmosphere.
But contributing to open source isn't all about giving something back to a community though, this isn't charity. You as a developer benefit massively from your hard work. That hit of dopamine when your work is merged in for the first time is only the beginning.
But contributing to open source isn't all about giving something back to a community though, this isn't charity. You as a developer benefit massively from your hard work. That hit of dopamine when your work is merged in for the first time is only the beginning.
The benefits of contributing
As you may have guessed by now, there are many reasons why contributing to open source is a great thing to do. We're going to focus on three of the main advantages here that can be really useful for you and your work.
Learning
As developers, we're exposed to a lot of code. But quite often this code is extremely similar. Either it's written by the same people every time, or it solves similar problems and uses familiar patterns and frameworks. This of course provides opportunities to learn, but this type of learning typically allows you improve and get better at those specific areas. Areas you may already be comfortable with. It often takes a new framework or a change in team members to really push you into brand new territory.
With open source software, you're regularly pushed outside of your comfort zone because of the nature of this type of software. Keeping Umbraco as our example, over 350 people have contributed to the CMS in the past decade. Of those, only a few handfuls will have been employed full time to work on the product, so we can likely assume over 300 people have willingly contributed their time and code as members of the open source community. So by joining them and even only going so far as to look through the source code, it's like being on a team of 300 developers from all over the world. Some of them will be brand new to the language, and others will be world-class experts. Some will have a flair for design, whilst others much prefer the mathematical side of things. Some would solve a problem in one way, and others would choose another.
These differences are all visible in the source code of Umbraco and we can learn a lot from them. We can learn how other people solve similar problems, why certain patterns work better than others in different scenarios, and what happens when four people collaborate on a new feature compared against just one. Don't just assume that because Umbraco is a successful product with a lot of hard working and creative people working on it that the source code is perfect. It isn't. It shows its history like every project you've ever worked on, and it is covered in "if we did this today we'd do it differently" statements that you'll be familiar with too. But the difference here, the difference with open source, is the freedom and availability to make little and often improvements. And by making those small changes, you're not only improving the product but you're learning about working with a large development team on an enterprise-scale product. Renaming a variable to something more understandable may seem like an insignificant change, but if it helps just a few of the thousands of Umbraco developers find their way a little quicker, it'd be hugely worthwhile.
The scale of Umbraco is also something that many developers that work with Umbraco aren't necessarily familiar with. Compared against a typical website that uses the product, Umbraco itself is an entirely different experience, and just understanding how things fit together can be a challenge. Even before you make a single code change, there's a huge amount to learn by just reading and trying to understand what happens and why. Understanding how large systems are architected can really help to see the value in such designs, and give you additional things to think about and consider when you next start a project of your own.
With open source software, you're regularly pushed outside of your comfort zone because of the nature of this type of software. Keeping Umbraco as our example, over 350 people have contributed to the CMS in the past decade. Of those, only a few handfuls will have been employed full time to work on the product, so we can likely assume over 300 people have willingly contributed their time and code as members of the open source community. So by joining them and even only going so far as to look through the source code, it's like being on a team of 300 developers from all over the world. Some of them will be brand new to the language, and others will be world-class experts. Some will have a flair for design, whilst others much prefer the mathematical side of things. Some would solve a problem in one way, and others would choose another.
These differences are all visible in the source code of Umbraco and we can learn a lot from them. We can learn how other people solve similar problems, why certain patterns work better than others in different scenarios, and what happens when four people collaborate on a new feature compared against just one. Don't just assume that because Umbraco is a successful product with a lot of hard working and creative people working on it that the source code is perfect. It isn't. It shows its history like every project you've ever worked on, and it is covered in "if we did this today we'd do it differently" statements that you'll be familiar with too. But the difference here, the difference with open source, is the freedom and availability to make little and often improvements. And by making those small changes, you're not only improving the product but you're learning about working with a large development team on an enterprise-scale product. Renaming a variable to something more understandable may seem like an insignificant change, but if it helps just a few of the thousands of Umbraco developers find their way a little quicker, it'd be hugely worthwhile.
The scale of Umbraco is also something that many developers that work with Umbraco aren't necessarily familiar with. Compared against a typical website that uses the product, Umbraco itself is an entirely different experience, and just understanding how things fit together can be a challenge. Even before you make a single code change, there's a huge amount to learn by just reading and trying to understand what happens and why. Understanding how large systems are architected can really help to see the value in such designs, and give you additional things to think about and consider when you next start a project of your own.
Career & Reputation
Imagine walking into a job interview for an Umbraco developer role and being able to tell them that you have contributed to Umbraco itself. The size of that contribution - whether it was fixing a typo, or implementing a brand new feature - is secondary at this point. What really stands out is that you were both willing and driven to contribute to an open source project and that you took the time to understand the product at a more technical level. Both of these things are incredibly useful things to have, and they can have a huge effect on your career. In fact, many companies now realise the benefits of open source that they offer company time to developers to be able to contribute to communities in this way. Not only do the developers get to learn a huge amount from doing it, but the companies get to shout about their developers working on the product itself, whilst the product continues to improve. Everyone wins!
Another benefit to your career is the fact that by having an understanding and appreciation for how Umbraco works and is built on the inside, it improves your knowledge of how Umbraco is best used on the outside. Knowing which requests for content use the cache and which go back to the database means you know which one to use when, for example, and by having a solid understanding means we can build better solutions for our clients, along with more maintainable code for ourselves.
Contributing to open source doesn't go unnoticed outside of your job, either. In fact, Umbraco themselves love to tell the world about all of the amazing contributions that the product receives on a daily basis. On the home page of Our.Umbraco.com, for example, is a list of contributors to the project over the past twelve months, and it doesn't take long before someone virtually high-fives you after making a contribution, especially when it's your first. With Umbraco using GitHub, your profile there will also speak of your public contributions to projects as well. All of these things may seem small on their own, but they are all important in recognising your valuable contributions and hard work, and they don't go unnoticed by employers. A developer that goes out of their way to learn new things, put themselves forward and contribute to a project through their own time is immensely valuable.
Another benefit to your career is the fact that by having an understanding and appreciation for how Umbraco works and is built on the inside, it improves your knowledge of how Umbraco is best used on the outside. Knowing which requests for content use the cache and which go back to the database means you know which one to use when, for example, and by having a solid understanding means we can build better solutions for our clients, along with more maintainable code for ourselves.
Contributing to open source doesn't go unnoticed outside of your job, either. In fact, Umbraco themselves love to tell the world about all of the amazing contributions that the product receives on a daily basis. On the home page of Our.Umbraco.com, for example, is a list of contributors to the project over the past twelve months, and it doesn't take long before someone virtually high-fives you after making a contribution, especially when it's your first. With Umbraco using GitHub, your profile there will also speak of your public contributions to projects as well. All of these things may seem small on their own, but they are all important in recognising your valuable contributions and hard work, and they don't go unnoticed by employers. A developer that goes out of their way to learn new things, put themselves forward and contribute to a project through their own time is immensely valuable.
It's great fun!
Contributing to open source software isn't about spending days crafting technically excellent features and incredible performance improvements - though they certainly have a part to play! Contributing to open source is just like Umbraco's mission: making the code friendly, simpler and social.
If you have ever attended an Umbraco meetup, festival or hackathon you'll know that the community is welcoming and friendly. Contributing to the source code and documentation is no exception here. When you open your first pull request, or comment on an issue, you're met with the same friendliness that you've come to expect, thanks in a huge part to the volunteers that work alongside Umbraco HQ to ensure contributions are looked at quickly and efficiently.
But even outside of the community aspects of contributing, you can get a great sense of satisfaction from contributing to a product that you use each day. Even if you aren't an Umbraco developer, helping to build a product used by thousands of people around the world is incredibly satisfying. That sense of achievement that you feel when a pull request is merged in is very real, and it's very addictive. Chances are once you've made one contribution, it wont be long before you're looking for a second and third. This is partly down to endorphins, a chemical produced by the body that creates a sense of euphoria, a sense of achievement of accomplishing something that you maybe thought was beyond your reach. But after you make that first contribution, however small, you'll realise that it isn't beyond you, and that actually you're providing exactly what the open source project needs: a caring, hard working developer to make small but meaningful improvements.
But even outside of the community aspects of contributing, you can get a great sense of satisfaction from contributing to a product that you use each day. Even if you aren't an Umbraco developer, helping to build a product used by thousands of people around the world is incredibly satisfying. That sense of achievement that you feel when a pull request is merged in is very real, and it's very addictive. Chances are once you've made one contribution, it wont be long before you're looking for a second and third. This is partly down to endorphins, a chemical produced by the body that creates a sense of euphoria, a sense of achievement of accomplishing something that you maybe thought was beyond your reach. But after you make that first contribution, however small, you'll realise that it isn't beyond you, and that actually you're providing exactly what the open source project needs: a caring, hard working developer to make small but meaningful improvements.
How to get started with contributing to Umbraco?
If you've got this far, it won't come as a huge surprise to find out that, thanks to wonderful community contributions, there's a great guide to making contributions to Umbraco that you can find here. But if you're a more visual learner, Umbraco's own Head of Pull Requests gave a talk at the Poland Umbraco Festival earlier this year that included a step-by-step guide on making that first contribution, so I'll leave you with Sebastiaan, and hope you see you opening pull requests very soon!
Photography credits: First and third from Umbraco HQ, second from Sebastiaan Janssen
Ed Parry
Ed is on Twitter as @edparry