featured image

Contribute to Open Source:A Comprehensive Guide for Everyone

I often get this question "How can I contribute to Open Source." It's time I put my experience and suggestions in a blog.

Santosh Yadav Santosh Yadav Wed Jun 14 2023 21:08:51 GMT+0000 (Coordinated Universal Time) 27 min read

I started making Open Source contributions in 2019. It is one of the best decisions I have personally made. I never thought about the doors Open Source would open for me in the future.

And I often get this question “How can I contribute to Open Source.” It’s time I put my experience and suggestions in a blog.

About Myself

Of course, taking advice from a random person online is not recommended, so let me tell you a little about myself.

I am Angular Google Developer Expert. I got recognition by Google for contributing to Angular, and I am in the Top 100 contributors for Angular.

I am GitHub Star, a program by GitHub to recognize individuals contributing to Open Source, Teaching other developers, and building communities.

Please don’t take my guidance as the words of God. Everyone should follow what works best for them. I am sharing my experince and experinces from some experts, just like everyone doing their best for the community.

Words from experts

When I planned to write this article, I reached out to several experts in the community and asked them to share their experience and advice. I will share their advice in the article.

  • I started working/getting involved with open source back in my time as a full-stack technical lead first with Drupal and then AEM lead dev, although you can say I was part of communities that shared code even before collab hosting was a thing.

    I contributed to a variety of projects, both in code, docs, samples, being part of the team, etc. I contributed to projects like NativeScript, Angular, Adobe Franklin, etc. And now I’m code maintainer and owner for several Azure samples and tools. Open Source has completely changed my life. From being a technical lead in enterprise projects to joining the GDE program, getting an MVP award and doing public speaking and important keynotes, like I did with Mark Porter CTO of MongoDB, to leading the e2e JavaScript program (dev experience and tools) at Microsoft Azure. My most important achievement is being considered an influential Frontend Architect who has been recently invited on behalf of Neal Ford to speak at the O’Reilly architecture super stream. I feel I am doing an important work to represent latinxs in general but especially women as a minority, in the most important software exchange in the world.

    Open Source is the cradle of innovation, ideas and best software and the communities around it have made my life richer in both the human and professional aspects.

    Your advice

    My advice would be to find a project they are excited about or has helped them, get involved with their community, go read the code, read the issues. Find issues labelled “first-good-issue” or something similar, and give it a try. It can feel intimidating at first but once you realize how much maintainers need and appreciate help, and the multiple ways of helping (triaging, documenting, creating samples, spreading knowledge, etc) it is a very rewarding form of being part of something: software and community.

  • Open-source has been transformative to my life. I started reading about it in my youth with Linux mailing lists and Android ROM forums, and have grown to love to community efforts ever since getting involved in 2015.

    Engaging with open-source projects has enabled me to grow my career, interact with some incredible engineers, and even maintain large projects with huge impact on development teams around the world. Knowing that I’m able to help others by contributing, all while learning from the best mentors in the industry while simultaneously leading to growth in my work has been a massively driving factor for me in tech.

    If you want to get into open-source yourself, I encourage you to find a community that can help guide you in your contributions. These communities are incredible resources in their own right and will undoubtably help you feel more welcome during the process.

    Your advice

    Know that your contribution, no matter how “small”, is extremely helpful and welcomed!.

  • I began contributing to Open Source in 2015, but my efforts were limited to fixing issues related to Open Source libraries for my customers. It wasn’t until 2020 that I truly understood the power of Open Source and the importance of community building. I decided to create my own meaningful Open Source projects to teach others about the benefits of working together in a collaborative environment. I’ve maintained eight Open Source projects so far, and five of them receive active contributions. Two projects that stand out are ReactPlay, an open platform for learning ReactJS with a hands-on practice model that has grown a community of almost 1,000 people, and fork-me, a simple project designed to help newcomers learn how to navigate the Open Source ecosystem by forking, cloning, changing, and pushing.

    My goal now is to educate more people about Open Source, create meaningful projects, and build a strong community presence that can help connect students to the industry through Open Source.

  • I started open source when I was in 2nd year of my college. My intention was to learn by working on real-world projects. I got to know about the google summer of Code program so I wanted to apply for it. Luckily I got selected for GSoC 2020 under the webpack organization.

    My GSoC project was webpack-cli and understanding such a large codebase is difficult. When I first sent a bug fix to the project the maintainers asked me to write a test case for the fix I submitted. I, being a noob had no idea how to write a test. I tried to understand the existing tests for the related feature, and that’s how I come across Jest a popular testing library. I started learning about Jest and soon I was able to write a test case for my fix. There were already similar kinds of tests present in the file I just copy-pasted an existing test case and updated a few configs and it worked. Soon my understanding of writing tests increased with each PR I submitted.

    Tests play an important role in open-source projects, many times we receive bug reports from our consumers and we ask them to provide us a reproducible example. In case the reported issue is not. bug and intentional we refer them to the existing test case in our repo showing that this is intentional. Sometimes contributors don’t know how to fix the bug themselves so they submit a failing test case PR showing the bug repro which gives the maintainers a head start.

    Your advice

  • I believe this was my first GH PR where I contributed https://github.com/swimlane/angular-model-factory/pull/3

    the reason I did it is because I was developing somethnig similar for a project I was working on when I then found this project

    I looked into it and there was a lot of overlap of what I was planning to do. So I decided to push to that project instead

    that’s how I then met https://twitter.com/amcdnl and we started chatting for years after that and even working on another project together

    how it has helped you in your career

    I think it helps in different ways. First of all to get out there, be seen and start working together with different ppl. When you just work in a small company in a rural town, you just interact with your own folks. Connecting with ppl online on GitHub allows you to collaborate at an international level which helps you grow, see different perspectives, and obviously learn!

    And that opens up a lot of doors potentially. People see your contributions, you might get into speaking by talking about what you contributed or just keep collaborating on new projects

    Your advice

    JFDI (Just F*** Do It) 😅

    no, jokes apart. I feel a lot say that, but really just get involved. Open an issue/discussion to propose some contribution, find first contributor friendly labels, help fix typos, weird working etc on docs. Especially the latter are low effort, they help you get into the process of how contributing to that specific repo works & maintainers are extremely happy with those type of docs updates. And then go from there :)

  • I have ben following Debbie from years now, and have seen her progress in the community and Open Source, here is her story and advice when it comes to Open Source.

  • When I first set out to contribute to open source, I was motivated by the desire to immerse myself in the tech industry, learn best practices, and be part of something cool. But I have to admit, getting started with open source felt like a daunting task. That’s when I stumbled upon Hacktoberfest, and it turned out to be the perfect entry point for me.

    Since that initial contribution, my life has been significantly impacted by my involvement in open source. I’ve been invited to speak at conferences, joined the JS Ecosystem by contributing to TC39, and even become an egghead instructor. It’s been fulfilling to able to give back to the community in my own way.

    I’ve created open source repositories to help people find jobs in the tech industry, and I’ve created resources to make web development more accessible for everyone. And of course, I can’t forget the devjokes that brings out the nerdy programmer humor in us.

    Overall, contributing to open source has not only allowed me to grow as a developer but has also given me a sense of fulfillment in being able to help others in the community.

  • I started mainly for the purpose of getting into the community, helping out, but also to learn new stuff.

    I started with RxJS, but there weren’t many places I could contribute throughout its codebase, so then I moved into NgRx territory. Tim Deschryver (and the other members of the core team) were super helpful, I contributed a lot to the eslint-plugin documentation, some other doc pages, and several issues, and also as discussions during RFC-s.

    All of this has improved both my sense of community and belonging, honestly, and also made me grow professionally, I learned a lot about NgRx itself, but also about TypeScript. This helps me a lot in my daily job now too - I have a deeper understanding about how the tools that me and my team use every day work under the hood, what problems and limitations they have, and what are the best practices.

    I also got into RFC-s for different Angular features, and now know and understand the team behind it better, and also their vision

  • Participating meaningfully in open source entails a number benefits for any software development career. You can learn from and even work with expert developers all over the world. Plus you get to contribute to software used by potentially thousands upon thousands of developers. Even your smallest bugfixes and feature improvements can speed up the pace of software development worldwide. That’s awesome!

    I started getting involved in open source first by accident - using GitHub as a convenient place to store my repositories. Then I intentionally became more involved le4arning about linters and static analysis in general. I was able to learn from developers online and bring those learnings back into my teams at work. That both made me a better developer and helped level up my peers and our teams.

    Later on I was able to draw on my network from open source to consult with experts on tasks too difficult or time-consuming for my teams to investigate on our own. For example, when we were having a hard time upgrading from one major version of Webpack to the next, I connected us with a Webpack maintainer I knew online whom we were able to bring on as a consultant. Doing so significantly sped up our upgrade investigation and led to significant build time improvements, net saving us dozens of developer-hours a month per team.

    My biggest advice to people starting out in open source is to start small and learn as much as you can. A lot of people try to jump into projects with big splashy changes to prove themselves. That’s a recipe for failure: you risk get confused and overwhelmed by all the new things to learn. Instead, start small with issues labeled ‘good first issue’, and absorb as much documentation as you can in investigating how to resolve them. The learning and tackling one new thing at a time takes longer but is a much more reliable path to being an active open sourcerer.

  • There’s more to open source than maintaining a library and writing code. Can I tell you a few stories to exemplify different aspects of open source software? My first experiences with open source software involved downloading and compiling software from platforms like SourceForge and CodePlex. As a professional, I used the Knockout JavaScript frontend application library and contributed to its development by answering support questions in the Knockout Google group. I convinced my employer to donate money towards the development of the next major iteration of the Durandal framework, which ended up becoming Aurelia. Eventually, a company was founded to focus on enterprise-grade support and maintenance for Aurelia.

    When it came to choosing a JavaScript frontend application framework, I considered both closed source and open source projects like Angular.js, Backbone, Ember, and Knockout. In the end, I settled on Knockout with CoffeeScript because it had an easier onboarding experience, especially compared to Angular.js. The interactive Gmail clone tutorial and the good examples in the documentation helped me get started. Steve Sanderson’s blog called Knock Me Out was a big inspiration and a great way to follow along with the open source project and its ecosystem.

    In 2014, I created my GitHub account and a few months later, I made my first pull request for an open learning book called “Developing Backbone.js Applications” by Addy Osmani. It was accepted and merged into the book. This experience inspired me to co-found an open learning community that currently hosts three open guides and courses under a Creative Commons license using Docusaurus on GitHub Pages. I am also currently writing a free book called “The Angular Developer’s Nx Handbook” using inexpensive and free tier tools.

    In 2012-2014, I got involved in the Minecraft mod gaming community by working on the ComputerCraft mod. I helped maintain big Minecraft mod servers, wrote Java plugins to manage the in-game experience, and wrote Lua programs to create in-game billboards, touch screens, control systems, and robots for automating tasks like mining, digging, and building. I watched a lot of YouTube videos on Minecraft and ComputerCraft, created my own YouTube channel with ComputerCraft videos, mentored players in-game, and answered support questions in the ComputerCraft forums.

  • My journey began several years back when I was working in the world of Microsoft. Over time, I became increasingly engaged in technology and innovation, constantly seeking new ways to develop smaller-scale products and solutions. As a passionate blogger, I was eager to share my knowledge and insights with community members. One such project that took off was the Front Matter CMS. Seeing how this idea evolved and gained traction was incredibly satisfying, ultimately leading to exciting new opportunities for me. This project helped me secure my next job at Rapid - a company that shares my passion for cutting-edge technology and development.

    However, my journey has been challenging. In 2021, I was involved in a bike accident that severely injured one of my vertebrae. This injury forced me to take a six-month break from work, so I turned my attention to further developing the Front Matter extension I had created in 2019. I was determined to dedicate all my time and energy to creating a fully-fledged CMS from this innovative tool. Creating this open-source project caught the attention of Rapid, and I was offered a new challenge - a chance to start building Visual Studio Code extensions and getting paid for it.

    This experience has been nothing short of transformative, showing me just how powerful and empowering the world of open-source technology can be.

How to start

I categorize folks into 2 different categories when giving suggestions on contributing to Open Source.

Note: I will not use the word, developers, as it becomes particular to folks writing code. Open Source is for everyone.

  • Freshers (New to Tech)
  • Experienced (worked in Tech for a few years)

Freshers (New to Tech)

If you are very new to Tech, invest time learning about the Technology where you want to grow. It can be anything, a programming language (javascript, .Net, Rust), design software like Figma, HTML, or CSS.

As a fresher, I suggest not getting attached to any framework or Technology. Keep an appetite for learning and exploring different frameworks and Technology.

For example, several frameworks exist if you choose frontend development (React, Vue, Angular, Solid, Quick). Probably by the time I finish this article, there will be one more frontend framework.

Learn basics; most frontend frameworks exist to solve the same issues differently.

I would recommend a book called The Framework Field Guide by my friend Corbin Crutchley

Or you decide to do backend development. In that case, you can use several options: Javascript/Typescript, .Net, Java, Rust, Python, and many more.

Once you start learning the framework or Technology that you are interested in. You are ready to start contributing to Open Source. Let’s see how.

Official Documentation

Documentation is a trustworthy source of information when learning about any framework or Technology. I suggest anyone learning a new technology or framework read the official documentation. I know different folks prefer different mediums when it comes to learning. For example, some prefer videos or written text and vice versa.

But this can be your entry into Open Source. The official documentation is generally written by the official teams or contributed by several contributors. By reading, you can also review if the contents are up to date or incorrect.

For example, my first Open Source Contribution to Angular was a documentation change https://github.com/angular/angular/pull/29376

Also as debbie mentioed in the video, you can start with documentation, and then move to code.

Other ways to contribute

Apart from the documentation, which is the best way to get started in Open Source, you can contribute in a few other ways.

  • Design:  There are many open-source projects where you can help by improving the website’s design. You need to know HTML and CSS.
  • Accessibility: Accessibility is critical for many Open Source projects and documentation. You can also help by improving accessibility.
  • Testing: Only some Open Source projects have test coverage, and only a few open-source developers, can invest time in writing tests. If you are learning tools, you can help by writing tests.
  • Security vulnerabilities: You can help by finding security vulnerabilities in Open Source projects.

Not many freshers get to choose what Technology or framework they will be working on once they join a company. Contributing to Open Source gives you an early advantage and experience, so you can get hired to work on the Technology or the framework of your liking.

Experienced (worked in Tech for a few years)

Only some get to contribute while in college. You may have completed your college and never contributed to Open Source. And now you work at an organization with a few years of experience. Suddenly you hear about Open Source and see many developers rising in careers because they contribute to it.

It’s never late to start contributing to Open Source. If it makes you feel better, I made my first contribution to Open Source after working in Tech for 11 years, after my 32nd birthday.

  • I became GDE for Angular on my 33rd birthday.
  • I became GitHub Star a week after my 34th birthday.

Only the right intention matters when it comes to contributing to Open Source.

And not only me, I spoke to several other developers who started contributing to Open Source after working in Tech for a few years. One of them is Tapas, who shared his journey above.

Contributing as as accessibility expert

Open Source is for everyone and we have many great examples in the community, who are doing great work to make Open Source more accessible.

I spoke to Emma Dawson who is an accessibility expert and asked her how she started contributing to Open Source.

Here is what she said:

I started contributing to open source during Hacktoberfest 2020. At first it was just a fun way to practice and get better at coding but then I got involved in the community and realised I could make a difference by contributing to projects.

I especially enjoy contributing accessibility fixes to websites because issues are not hard to find and fixing them really improves things for people.

How to contribute?

To contribute to accessibility of Open Source projects, go to any project with a website and run a Lighthouse or Axe Dev Tools check. You’re bound to find several issues that are easily fixed like missing alternative text on images or color contrast being too low. Check that buttons are marked up as buttons and links as links. Can you activate all buttons and links with a keyboard? And why not test the site with a screen reader? Are you able to understand everything without looking at the screen?

Contributing as a Security Researcher

I spoke to my friend and fellow GitHub Star Liran Tal, who is a Security Researcher and asked him how he started contributing to Open Source.

Here is what he said:

I’ve had brief engagements with the open-source and security intersection through-out my years as a software developer and much prior to that as a teenager. Recent references are the Essential Node.js Security book that I published and my work at the Node.js Foundation, working with peers in the Security WG and open-source maintainers to collaborate on the vulnerability disclosure program for the npm ecosystem at HackerOne.

In fact, prior to these I was building npq which is a CLI tool for querying npm packages for security vulnerabilities but it takes a proactive approach in protecting you against installing malicious packages, prior to the npm install process, providing you metadata about packages to be installed so you can take a conscious decision. It was a fun project that I built in my spare time, and it was a great way to learn about the npm ecosystem and the open-source supply chain security landscape at the time.

But it wasn’t until I started working at Snyk that I got to dive deep into significant contributions to the open-source security space. At Snyk, I was able to work with the open-source community and the security community to help them understand the security of their open-source projects and the security of the open-source projects they use. A prime example of this is the verdaccio private npm registry and proxy project, where we worked with the maintainers to help them establish security disclosure processes, integrate Snyk tooling for vulnerability scanning and remediation, and more.

Recently, I also started active security research around the JavaScript ecosystem. At first, this was my research insights about Lockfile Injection attacks which ultimately lead to creating lockfile-lint as a protective measure. This work was also recognized and presented at BlackHat 2021 by other security researchers which was a great honor.

These days, security research in the open source ecosystem takes form in spending time on weekends and nights reviewing npm packages for potential vulnerabilities and reporting them to the maintainers. I’ve been doing this for a while now. This work resulted in a dozen or more CVEs being assigned to npm packages. I’m happy that this helps close security bugs in open-source and that I’ve been able to help maintainers fix and remediate vulnerabilities in their projects.

What is your suggestions to other security researchers who wants to contribute to Open Source

I think a good way is to focus on a specific area of interest, explore it in detail and gain understanding on how the community and its developers work in terms of workflows, processes, and tools. Then, you can apply outside knowledge and experience to challenge the status quo and check for potential vulnerabilities through threat modeling and other security research techniques.

Keep in mind that open-source maintainers are volunteers and they are doing this in their spare time. So, it’s important to be respectful and patient when engaging with them. I’ve found that the best way to do this is to always provide input and suggest help. Don’t be aggressive with disclosure deadlines or disputing their arguments. Build on these relationships to contribute more significant contributions.

What was your motivation contributing to open source

I’ve always been a big fan of open-source, as a maintainer and an early adopter back in the early Linux install party days. I think it’s important to give back to the community and help make it better. Open-source is a force multiplier and it works in both ways - for the project, and for the individual contributor. There is something incredible about being part of something that’s someone else’s too. I’ve been doing this open-source thing for a while now and it shaped my life in so many ways that I couldn’t imagine not doing it.

Educate developers about security via the Secure Code Game

The Secure Code Game offers free, gamified security training to developers. If you feel that you’re creative and better at educating others rather than finding security vulnerabilities, here’s an opportunity for you to contribute through crafting your own challenges.

Contribute to Technology or framework you use at work.

In today’s world, the chances are all Technology or framework you use at work is Open Source. As you already have been using the framework/technology, it is a great way to start contributing to Open Source.

Every project you work on uses many  Open Souce libraries.

Everyone prefers contributing to big Open Source Projects like .Net, Angular, or React. But the Open Source libraries are what make the ecosystem more usable. As a consumer of the lib, you are in better condition to help the library grow.

Ways to help as Developer:

  • Upgrade the library’s dependency to the latest version.
  • Help to fix a bug.
  • Help to implement a new feature.
  • Help improve the documentation.
  • Help improve the code quality.
  • Integrate new tools like linters.
  • Help increase the code coverage.
  • Create content about the library.
  • Test the new feature releases.
  • Add code samples to the documentation.
  • Improve the error messages.
  • Support the library using GitHub Sponsors.

Ways to help as a designer:

  • Improve the design of the component library you use.

Ways to help as a tester:

  • Write the test for the library or framework you use.
  • Help improve code coverage of the libs you use.

Open Source some work

As a developer, we solve many issues at work, most of which will be very specific to our business use case. But if you think something can be helpful for others, convince your manager to make it Open Source if your organization supports Open Source.

Contributing to the framework/Technology you use

If you want to contribute to the framework/technology you use, if they are Open Sourced, the best way to do is to:

  • Start with documentation.
  • Test the new beta releases.
  • Try out new features available.
  • Upgrade your side projects to the latest version.
  • Participate in the RFCs for new features.
  • Create content, write a blog, or create videos.

I have made several contributions to Angular by trying out new releases. I found issues and raised PRs to fix those issues.

General Advice

  • The most important thing is never to have FOMO (Fear of Missing out). If you have not contributed to Open Source, it’s not the end of the world.
  • Don’t do Open Source just because others are doing it. It’s OK to join a company and work 9-5. Remember, all Open Source projects need someone to consume it. You can be an ambassador of an Open Source Technology or framework at your workplace.
  • Please don’t do it for SWAGS. Everyone loves SWAGS, but just doing Open Source for SWAGS is not worth it.
  • Be consistent. You can be more successful only by being consistent. There is no shortcut when it comes to Open Source.

How Companies can contribute to Open Source

Big corporations are the biggest consumer of Open Source, but most of them are not giving back to Open Source. Even many companies include a clause in the employment contract that you can not contribute to any Open Source projects, a practice which I have seen at many workplaces in the past, not sure if things have improved, but do comment if you have a similar clause as an employee.

Companies need to understand, that they cannot be only consumers, they need to support the Open Source ecosystem, there are several ways the organizations can do this.

GitHub Sponsors

GitHub launched the Sponsors program years back, and it’s available in 68 countries when writing this article. It allows individuals, as well as companies, to sponsor Open Source, projects you use.

Wondering how to find Project to sponsor?

Go to Your Organisation -> Insights and click on Dependencies. You will see a list of dependencies used in the organization, with the Sponsor button if projects accept Sponsorship.

Dependencies in Organization.

I know getting funding approved is not easy in big organizations. Hats off to companies that include the Open Source funding as part of their yearly budget.

Here is a model I thought of that many organizations can adopt. This can be implemented at the team level, and you probably don’t need to wait for management approval.

Resource Sharing

Every project uses Open Source frameworks and libraries; we don’t even need to argue about this. It means every team spends a lot of time using Open Source, which includes your designers, developers, product managers, and testers. My advice is to give your resources half day from every week to work on Open Source. It will help you and your organization in the long run. You will build a reputation in the community, and your organization will get more visibility. Also you will end up with a great talent pool within the organization. Also if you have big team you can dedicate a resource full-time supporting the open source projects you use.

Big corps like Microsoft, Google, Facebook, Amazon, Netflix etc. have dedicated teams working on Open Source projects they use.

Why should companies care about Open Source?

Here is what my friend Sanket Sahu says about building GeekyAnts and many Open Sorce frameworks and tools.

We started using React Native early, the day it was introduced for Android because as a web dev company and being a web dev myself, it opened the door to building native mobile apps for JS devs. We realized that it was too early and the tech was very rough, we jumped right in and started working with people in the community to improve it. On the way, we developed open-source solutions for the ecosystem. This eventually started working as credibility and more of our customers and clients started believing in our work as they saw our open-source projects (mainly NativeBase) being used.

So, it’s like a cycle Problems => Open-source => Credibility => People reaching out for help (community, customers & clients)

Other than consulting and IT services, we are also moving towards building DevTools and services around it, ultimately building a business model.

Solve their own problem. If they do it out in the open, they would end up helping other individuals and companies.

For eg, Meta doesn’t have a model around React. They are just doing it for themselves but it is eventually helping millions”

Conclusion

Open Source is not just about code, it’s about people, it’s about community, it’s about sharing knowledge, it’s about helping each other, it’s about building a better world.

I hope this article will inspire you to contribute to Open Source, and if you are already contributing, I hope you will continue to do so.

Thanks to all the contributors who helped me with this article.

Go ahead and follow them on Twitter.

Shout out to my GitHub Sponsors for supporting my work on Open Source.

Prev
Celebrating One Year at Celonis: My journey
Next
Angular: The Framework of Past, Present, and Future