I always wanted to contribute to open source, but at the same time I found it to be a bit intimidating & overwhelming. It wasn't until a few years later that I made my first open source contribution. The paragraph below from PyCon US perfectly summarized the struggles I faced when I tried to make my first contribution:
From a technical perspective, interacting with web-based hosting services (such as GitHub, GitLab, etc.), branching and opening pull requests can be overwhelming if these are not everyday actions of your workflow. The correctness of the code and potential bugs are other common obstacles and fears any newcomer might face. Not to mention the time and frustration accumulated over the task of finding a ‘beginner-friendly’ issue to work on.
I learned a lot of things that I wished I had known about earlier, which I'm going to share through a series of blog posts in three parts:
Everyone's experience is different, though, so I'm mainly sharing about the things I've experienced. What works for me might not work for you & vice versa, & it's totally OK!
If you're here, you probably already know why you want to contribute to open source. It's outside of the scope of these posts, so if you want to read more about this, Open Source Guides has a comprehensive section on the topic.
Find projects that you use permalink
I started out by browsing through projects that I use daily such as pandas, matplotlib, & scikit-learn. I find that working on projects that I often use would provide a greater motivation for me to work on it. Using it every day means I'm already pretty familiar with the projects too, which helps.
However, I soon learned that this not that straightforward. These libraries are very popular and the issues that are suitable for beginners seem to be gone within minutes after someone posts the issue. The ones left are the more complicated ones that I wasn't confident enough I'd be able to tackle.
Now, this depends on you—of course no one's telling you to NOT work on them! In fact, you'll probably learn the most from them. But when I started out, I didn't have much free time since I was still juggling school at the same time. Working on complicated issues would definitely take me a while, so I decided to look for other options.
Browse websites that help you discover open source projects that need help permalink
I also browsed various websites that help me discover open source projects that need help. A few websites that I've tried:
These websites exposed me to more open source projects that I had never known before, which is great! While this strategy might work for a lot of people, it didn't really work for me—since I had never used these projects before, I had to learn everything from zero, & sometimes it was until much later that I realized I wasn't really interested in working on the project. I guess time was a huge constraint for me, & if I had spent more time I'm sure I would come across something that fits me.
Follow open source project authors/maintainers on social media permalink
I think I discovered most of the projects I contributed to through Twitter. In fact, I finally made my first open source contribution to Sarah Drasner's Object Explorer.
I follow a lot of people who happen to be working on their own open source projects, & since I usually follow people who work on things that intersect my interests, their projects usually interest me too. Plus, they might tweet about their new projects that don't have a lot of contributors yet, & new projects have a much smaller scope, so the barrier to entry is usually lower.
For example, here is Andreas Mueller tweeting about his new project:
Now that you've got a project you'd like to work on, it's time to find an issue that you can work on!
It's not always about writing code permalink
One thing I want to emphasize here is that the issue that you pick does not always have something to do with writing code. Writing documentation, translating projects, designing... they all also count as contributing to open source too. Fixing typos is also contributing to open source! There's room for everyone & every role.
Browse through beginner-friendly labels permalink
Each issue usually has labels or tags. You can browse through issues that are labeled with labels such as good-first-issue or help-wanted—these are issues that are approachable for first-time contributors. In fact, GitHub has just recently launched a feature where it automatically labels beginner-friendly issues using the power of machine learning. You can just go to the following link:
github.com/<owner>/<repository>/contribute . For example, if you want to contribute to electron for the first time, you can go to this link: https://github.com/electron/electron/contribute.
Yasss, no one is working on it! permalink
Awesome! Usually, what you should do next is drop a comment & comment that you're going to work on this issue. This is a way to let everyone know that someone (that's you!) is currently working on this issue to avoid double work.
Someone says they're working on it, but it's been months! permalink
If you find an issue where someone has said that they're working on it but there seems to be no activity for the past few months, feel free to comment and ask if you can take over the issue!
Well I've got issues~ permalink
One thing to remember is that you can make your own issue, & you can work on it too! Though it might be acceptable to directly make a pull request, keep in mind that some projects, like rust-wasm, explicitly mention that you have to create your own issue before making a pull request because some discussion might be required. So before you make your own PR, open the issue first to make sure that you're working on something that people agree should be worked on.
However, before you create that issue...
Check out the existing PRs and Issues
There is probably another similar issue open, & you don't want to create a duplicate issue to save your time & the maintainers' time.
Check out the README (more on this on the next post!)
Some open source projects have a guideline on how to create your own issue. This is to make sure that you've provided all the information necessary regarding the issue to minimize back-and-forths between you & the maintainers.
Finding mentored programs
Contributing to open source does not have to be a lonely business, especially whenever it's your first time - it's totally OK to have help! In fact, having mentors and peers that also learn and work together with you might just accelerate your learning.
How do you find such mentors and peers? There are a few programs that aim to encourage new contributors in open source projects, and in these programs, participants will usually be paired with a mentor that will guide them throughout the program.
Remote mentorships/internships with mentors permalink
The three programs below are probably the most well-known, though I haven't personally participated in them because when I learned about them, I was no longer eligible:
- Google Summer of Code: students get the chance to work with an open source organization on a 3-month programming project during their break. Organizations that have participated include Blender Foundation, DBPedia, GNOME, & others.
- Google Season of Docs: same as Google Summer of Code, but focusing on technical writing contributions.
- Outreachy Internship: internships to work in open source and free software. Open to applicants around the world. Internships can be done remotely. People facing under-representation, systemic bias, or discrimination in the technology industry of their country are encouraged to apply.
I've personally participated in these programs below, & can totally vouch for them!
- Increasing Rust's Reach: run by the Rust Programming Language Team to grow Rust's community of project collaborators and leaders. Participants are individuals who are underrepresented in Rust's community and the tech industry. Each participant works on a Rust project for three months with a Rust team member. The program does not seem to exist anymore, but you can read about my experience of participating in the program and contributing to Rust here.
- pandas mentoring: I came across Marc Garcia's tweet one day:
I DM'd him & I was super excited because I use pandas every day! Marc has done a tremendous job on running the mentorship. Since then, I've made several contributions to pandas from contributing to its documentation to fixing bugs.
The mentorship programs I mentioned above are mostly done remotely. However, there are also mentored sprints that you can attend if there is one happening in your city.
In a sprint, people gather together to squash bugs or write documentation in a short period a time, such as a day or a weekend. Mentored sprints specifically have mentors that can guide participants on making their contributions. Imagine that by the end of the day, you'll most likely already make your first contribution while also making new friends in the process!
PyCon US has mentored sprints last year, and there were a lot of interesting projects that participated from CPython to TensorFlow.
Python Sprints is an non for profit group that gathers coders who want to help improve open source using Python. They have held sprints all around the world, and one of their goals is to help people get started, so if there is one in your city you should definitely drop by! London has held a lot of sprints, so if you want to take a look at how these sprints usually are like check it out here.
Now, the exciting announcement: I'll be organizing a sprint in Jakarta to work on the pandas docs this February to get even more people to contribute to pandas. Marc Garcia, one of the maintainers of pandas, will be there as well! Registration page will be up soon & I'll announce it on my Twitter, but save the date: February 15, 2020 at Mozilla Community Space, Jakarta. If you have questions feel free to DM me!