Open source is a powerful tool for making an impact on the world and building valuable skills. As an open-source contributor, I often receive questions from enthusiastic newbies seeking guidance on how to get started. In this guide, I’ll share my insights and resources to help aspiring contributors jump into the world of open source.
Three quick notes before we begin:
- This guide focuses on contributing to open source in general, but the advice can be applied to specific projects like Apache Beam and Apache Software Foundation.
- Contributing to open source isn’t limited to technical roles like software engineering. Most projects will have a bigger need for people to help with documentation, design, testing, UX research, community management, etc. Anyone with a willingness to give their time and skills can contribute, regardless of their background.
- This guide is just one of many ways to get started with open source. Use it as a starting point, but don’t be afraid to find your path.
Step 1: Choose a Project
When choosing a project, prioritize community over project specifics. Seek out communities with more than 20 active members that have a history of welcoming and supporting newcomers. Why? Because larger communities have more resources to support new contributors. On the other hand, smaller communities may not have the interest or capacity to engage with you.
Avoid the temptation to choose smaller projects because they appear easier to get started with. Instead, look for projects with well-defined onboarding processes and clearly stated goals. Even the most complex projects will offer some easier-to-start parts.
Step 2: Do Your Homework
Before reaching out to the community, come up with a proposal for a project that aligns with the project’s goals and is feasible for you to complete. Research the project to understand its setup and direction. Look for:
- Project’s contribution guidelines and code of conduct. By reading and understanding those you will be aware of the community’s expectations and can contribute in a way that aligns with the project’s values and goals.
- A “Getting Started” guide for users to familiarize yourself with the project. As a bonus, identify the friction points you can improve.
- A setup guide for new contributors to get your development environment ready.
- A list of previous projects to help you understand the direction, recent changes, and potential future work
- A list of starter tasks to help you find a suitable onboarding project to work on.
If the project lacks any of these resources, ask the community for help. You might even find that creating the missing resources is a valuable contribution in itself.
At this point, you will have enough to create a proposal for the projects. Draft an email or a short document with the following information:
- A problem that you would like to solve that is valuable and interesting to you. In most cases, this will not be a novel problem, it will be a problem that was discussed before but still has not been addressed completely.
- It will be feasible for you to resolve it by yourself with some support. Show that, you have researched enough, are aware of the historical discussions, considered more than one alternative, and fairly evaluated those options before offering a proposed solution.
- It is scoped well. Communicate how much time you can dedicate, and how long it will take to finish. Show the community that you are proposing something within your reach and not planning to abandon it halfway through. A small project could be a 1-2 week project and a long project could be 3-4 months. Do not propose an infeasibly scoped project at this stage.
Step 3: Connect with the Community
Introduce yourself and explain your goals and what you’ve learned about the project so far. Share your proposal and ask for feedback. When reaching out to the community:
- Connect with the community as a whole (e.g. mailing list) instead of individual members to maximize the chances of receiving support.
- Propose a specific project and ask for feedback. This makes it easier for the community to engage with you constructively.
- Don’t wait for a response before moving forward with your proposal. If you receive feedback, incorporate it into your plans, but don’t block yourself waiting for a reply that may never come.
Step 4: Take Advantage of Additional Resources
In addition to mentorship and support from the community, there are programs like Google Summer of Code and Outreachy that offer paid internships for contributing to open-source projects. These programs can help you find project ideas, connect with mentors, and join a community of other contributors.
Join social media groups or attend in-person events to connect with like-minded contributors and learn from each other.
Step 5: Stay Motivated and Engaged
You have already done so much! You are working on a well-scoped and feasible project. You are engaged with the community. Keep your eyes on the target and finish your project as you planned. This might be the most important step after all. Some tips for that:
- Share your progress with the community. Share when you make a breakthrough and celebrate with a demo. Also, share when you get blocked and ask for help.
- Build connections and ask for feedback from those individuals directly.
- Help others. Now you are part of the community and your project is part of the community, your input would be welcomed in all other parts of the community.
Step 6: Have Fun
Contribute to open source to learn, improve a project, make a positive impact, grow in your career, and have fun!
That’s it! I hope this guide provides a helpful starting point for your journey as an open-source contributor. If you have any suggestions or questions, feel free to reach out.
Bonus: Intrested in contributing to Apache Beam?
In the Apache Beam community we are always looking for new contributors to join our community. If you are interested in that, feel free to send an email to Beam’s dev list (firstname.lastname@example.org), introduce yourself, explain your areas of interest and hopefully people could suggest starter projects and also point to getting started resources.