Contributing to Open Source 1: Finding a project
Published 29/12/2021 | 1223 viewsSo, you want to begin contributing to Open Source. That's wonderful news! But, where do you even start? Here are my suggestions.
This is the first part in a series all about contributing to Open Source Software.
There are a myriad of reasons why you'd want to contribute to Open Source. It gives you visibililty and credibility when job hunting. It increases your understanding of code. It helps enforce good development practices and paradigms as you see how those with more experience than you tackle complex software problems. It gets the features you want into the software you love. It provides the opportunity to work along with others, to better handle criticism and feedback. It can put you in touch with developers you could only dream of getting the chance to talk to and work with.
However, many beginners struggle to dive into the world of Open Source. I think there are a two main reasons for this: a lack of time and fear of failure. Let's address these two issues.
Finding time for Open Source
Our lives are busy. We have work, family, leisure time, personal pursuits and other responsibilities. As the weeks roll by, it can feel like there is little time to breathe, nevermind work on projects we don't get paid for. There are a couple of things you can try to change this.
Please note that this is my opinion. I don't know you, your schedule or your personal life. That said, these things have helped me greatly and are worth sharing.
First off, ask your employer if you could take just an hour a week to work on Open Source. I know it sounds obvious, but asking is the first step to having. They may need some convincing. Why not recite some of the points in the second paragraph of this post? They may not realise it, but Open Source benefits them every single day. Almost undoubtedly, Open Source software plays a large role in making their product possible. By allowing you an hour a week to contribute to some of the software they rely on day-in, day-out, they're really ensuring the longevity of their product and business.
If that doesn't work, remember that you have a professional responsibility to continue to improve as a developer. I'm not just talking about code. I'm talking about the soft-skills, time management, people management and other responsibilities that come along with being a professional. By having this mindset, it can help adjust your attitude and make time for Open Source. It doesn't have to be long. An hour before or after work once a week. If you can make the changes, it is well worth the effort. The doors opened up to you by having experience in contributing to Open Source cannot be understated.
There are some great insights into this in "The Clean Coder", by Robert Martin.
Overcoming fear of failure
Imposter syndrome is real. "Nobody is interested in my ideas. I'll never be as good as them. Everybody else is already so far ahead that there's no point me starting." These feelings, left unchecked, can stop you ever contributing to other projects.
The fact of the matter is that every Open Source developer has felt this way at some point. Taylor Otwell felt this way when creating Laravel. Adam Wathan felt this way when building and promoting Tailwind CSS. For goodness sake, I imagine John Williams probably had imposter syndrome when writing the score for Star Wars. It's part of being human.
If you never put your work out into the open, you'll never know how people feel about it. The first real Open Source project I really worked on was my own. It was called Tupper. As of writing this post, it has 3 stars. Not exactly a crowd pleaser. Then again, I didn't create Tupper to attract attention. I wanted to learn more about dependency injection, so decided to build my own service container. It has many flaws, but it taught me a lot, both about the code I worked with every day, and the process of creating an Open Source package.
Why not create your own scrap project? Find something you want to learn more about or something that would make your life better and build it. Don't build it with the intention of thousands of likes and life-changing results. Build for the fun of building. Learn for the fun of learning. Having a scrap project like this will teach you a million things about the work required to maintain Open Source projects and will light a fire that will push you to do even more.
Finding a project to contribute to
At some point, you will probably want to contribute to somebody else's Open Source project. How do you find a project to get started on? Don't start by looking through GitHub. You need to be motivated, and finding a project with which you've had no prior experience won't get you motivated.
Instead, as you're working with Open Source software in your day-to-day work, be attentive to pain points in the software. "Wouldn't it be cool if...", "It would be so much easier if...", those kind of things. Write them down. Because you have a personal vested interest in the project, you're more likely to make it a reality. Your employer is more likely to okay you working on it because it affects their business.
In contrast, starting work on a random project often leads to half-finished PRs that get rejected. Maintainers want to see purpose and excitement in PRs to their project, not "I'm doing this to boost my portfolio and have never used this project in my life."
I've made 19 PRs to the Laravel framework. All of those contributions were born from a desire to have the framework do something in my projects that it couldn't currently do.
My first PR to Laravel was just 28 lines of code. The majority of those lines were for a supporting test. Start small, with real solutions to real problems, then build from there.
Conclusion
Open Source is important. Without it, much of the software we use and create today wouldn't exist. If you're looking to get started contributing, then truly well done. It's a huge step forward in your career as a software developer and the effort is well worth it.
Remember, don't expect recognition or respect. Create a scrap project that teaches you the ins and outs of Open Source. Don't search for a project in need of a solution. Look at the projects you already use every day and think about what would make their developer experience even better. This will give you the motivation to take an idea for a PR from start to finish, and might just open the doors to some amazing opportunities.
So, once you've got an idea for a PR, how do you go about making it a reality? We'll take a look at that in the next post in this series.
Kind Regards, Luke