How to pick an open-source project to contribute to?
Tags: opensource, hacktoberfest, webdev, codenewbie
Published: 2021-09-24 09:47:05

Contributing to the open-source community and projects can be intimidating even for seasoned developers, let alone newcomers. One of the major problems I’ve had as an early-career developer has been figuring out how to find the project that aligns with my interests as well as the skills that I want to practice. 

Having figured that out, I am here to help beginners understand what they need to consider when determining what open source project to work on.

## Determine your goals
The starting point would be sitting down and jotting down a list of goals that you hope to accomplish through contributing to an open-source project. If any of your goals seem vague, sit down with them and flesh them out until they are explicit and actionable. The more explicit your goals are, the easier it is to judge if you can meet them. 

Beware that you don't start thinking of this as a competition or contest, and want to contribute only because others are doing it, or you have heard a lot about it, or want some swags or benefits out of it apart from the networking and learning involved. 

Moreover, don't think that these skills necessarily have to be technical skills, in fact, open-source is much more than that. You can contribute to open-source with all kinds of skills ranging from documentation to graphic design, to QA and testing, to project management.

Here are some questions to consider as you plan to contribute to a possible open-source project:

- What skills do I possess to contribute to a project?
- What skills do I wish to bring to a project?
- What are my passions/hobbies?
- How much time am I prepared to devote to a project?

When I decided I wanted to work on an open-source project, I knew that I wanted to work on my frontend skills and build new features on a React or Vue application. That's why I chose React Native and then Adobe Docs as my projects during the MLH Fellowship.

> To know more about my journey at the MLH Fellowship, [read this](https://itispragativerma.medium.com/my-journey-at-the-mlh-fellowship-a1145e260c09).

{% link https://dev.to/pragativerma18/my-journey-at-the-mlh-fellowship-428d %}

## Finding potential projects
Finding potential projects isn't that hard, you just have to keep looking, or perhaps learn to look at the right place. Here are some good places to look for interesting projects:


### Using technology
- **[Up for Grabs](https://up-for-grabs.net/)** - You can search for projects by name, by label, or by tag. A tag can be the language that the project uses.

- **[Good First Issues](https://goodfirstissue.dev/)** - You can browse by language

- **[First Timers Only](https://www.firsttimersonly.com/)**- Compilation of resources for beginners

- **[Awesome For Beginners](https://github.com/MunGell/awesome-for-beginners)** - Collection of beginner-friendly projects, sorted according to the programming languages.

### Participate in Open Source Programs
Participating in open-source programs is the easiest and the quickest way to familiarize yourself with the open-source community, and projects. 

These are some of the best beginner-friendly open-source programs -
- [Hacktoberfest](https://hacktoberfest.digitalocean.com/)
- [MLH Fellowship Prep Program](https://fellowship.mlh.io/programs/prep)
- [GirlScript Summer Of Code](https://gssoc.girlscript.tech/)

### By interest
You can also search for projects based on your interests. The easiest method to do this is to first determine what interests you, then search the Internet (or GitHub) for open source projects relating to your interests. You may occasionally come across specific interest groups that work on open source projects, for example - [Django Girls](https://djangogirls.org/en/), [Women Who Code](https://www.womenwhocode.com/), etc.

Once you've compiled a list of prospective projects to which you can help by contributing, you can begin narrowing down your options. Good potential initiatives will fit within the above-mentioned goals and have the following characteristics:

- A free and open-source license 
- Indicators of ongoing development (ensure that it hasn't been inactive for a very long time)
- Guidelines for contributor activity (look for Contributing guidelines, code of conduct, wiki, etc in the GitHub repository).

Let's discuss these characteristics in a little bit more detail to get a deeper understanding of what to look for in these potential projects to find the most suitable one.

## Understanding Open source licenses
Open source licenses are often overlooked, but they are an essential component of any open-source project as they govern what you can and cannot do with an open-source project. Before you start contributing to a possible project, it's important looking at the license it is utilizing if it has one.

While there are many different types of open-source licenses to choose from, there are two main categories: **copyleft** and **permissive**. Anyone who works on these licensed projects must be able to read, alter, and share the source code under both types of licenses. However, the two licenses differ in terms of what the user can do with the work and whether the derivative work should be under the same terms as the original work or under different terms.

![Open Source Lincenses](https://janelia-flyem.github.io/images/open_licenses.png)

**Copyleft License**: A copyleft license prevents a derivative work from being relicensed under a more restrictive license. For example - The GNU Public License (GPL), the GNU Lesser General Public License (LGPL), and the Mozilla Public License.

**Permissive License**: A permissive license permits the creator of a derivative work to change the derivative work's license. It also permits a creator to incorporate a work released under a permissive license into a proprietary work, with the derivative remaining proprietary.

A permissive license does not obligate the creator of a derivative work to make the derivative work available under a free or open-source license. The Apache License and the MIT License are two popular permissive licenses.

> Read more about Open-Source Licenses [here](https://snyk.io/learn/open-source-licenses/).

## Determining signs of active development
Next, look at the history of your possible project to see if it is still active, both in terms of discussion and development activity. 

Some questions to consider while calculating activity levels are as follows:

- Do those who ask questions get answers?
- Is the project welcoming to existing contributors?
- What is the tone of the project's participants (i.e., are they pleasant, or does communication appear cold and uptight?)

## Contributor Guidelines 
Finally, find out if your proposed project currently has any guidelines in place for contributors. This is not needed, but it can help you determine whether the project is designed with other contributors in mind, and it can help you determine whether your first contribution will go easily or whether there will be some hiccups along the way. 

Here are some questions to get you started:

- Is there any information on how to get the project started? (Look for a readme or wiki)
- Are there any concerns that you can begin to help with? (Look for Open Issues)


## Conclusion
After you've evaluated and analyzed the projects based on the above metrics, it's time to prioritize your potential projects. When you've narrowed your selection of projects down to a few finalists, you can put them to the test by selecting an issue and generating a pull request for each.

And to ensure that you make meaningful and effective contributions, you can refer to this article on [Open Source Best Practices](https://dev.to/pragativerma18/open-source-best-practices-902).

{% link https://dev.to/pragativerma18/open-source-best-practices-902 %}

I hope this advice has given you a better sense of what to look for in an open-source project. These questions are not written in stone; you can refer to them on a frequent basis to determine whether you're on the correct track towards your objectives.

![Octocat](https://octodex.github.com/images/hubot.jpg)

This is all that I learned along my journey in open-source. I hope that the practices mentioned above take you closer to your next **(effective)** open-source contribution and help you fulfill your chance to give back to the community, one commit at a time!

If you find this insightful, do let me know your views in the comments. Also, any kind of feedback is welcome. In case you want to connect with me, follow the links below:

[LinkedIn](https://www.linkedin.com/in/pragativerma18/) | [GitHub](https://github.com/PragatiVerma18/) | [Twitter](https://twitter.com/pragati_verma18) | [Medium](http://medium.com/@itispragativerma)