Learn by Contributing

Contributing to open source is good for you and your career. Here’s how to get started.

Andrew Goldis
Young Coder

--

Picture Hello I’m Nik on Unsplash

Being a professional software developer requires continuous improvement and learning. It doesn’t matter if you’re a boot camp or university graduate or a software development veteran, it’s useful for your own professional development (and curiosity) to explore different approaches to making software.

Keeping up the pace is difficult — you have to be aware of new technologies and get some experience with them, improve your expertise with mainstream popular tools, and evolve “vertically” by solving increasingly complex and abstract problems.

Experienced developers are limited by the tech stack used by the team at their workplace. Being aware of different approaches would give them leverage and show a different perspective on the solutions that are common in their team/company and the alternatives.

For developers at the beginning of their career path, it’s even more challenging. The variety of tools and techniques is overwhelming! It’s very hard to know what to focus on and what tool is best for a specific task without prior experience with a similar kind of a problem.

Courses and tutorials — even advanced ones — usually don’t provide the required level of confidence. There’s always a “beyond the tutorial” wall. You stumble upon a problem that is out of tutorial’s scope, and you need start looking for solutions elsewhere.

How to grow with open source

My main background is web development, and this specific niche of software development has undergone tremendous changes during the last years. There’s a well-known phenomenon of “Javascript fatigue” caused by the number of new tools and techniques that emerge every week. The language itself has changed a lot and became the most popular programming language on the planet.

Stackoverflow Developers Survey 2019 — Most Popular Technologies

In this post, I want to share the technique of using open source projects for professional development that I’ve been practicing during the last few years. This technique works particularly well in the Javascript ecosystem, because of its particularly strong foundation in OSS.

Contributing to open source is good for you. Actually, it is good for everyone, and here’s why:

You help others

No matter what your contribution type is — documentation, code changes or even just opening an issue — you improve the tools we all use and make other developers life easier.

Excellent project quality

Open source software is not an underdog anymore. The quality of code is often superb to internal codebases. By working on projects of such quality, you see how others make good software.

Stackoverflow open source projects quality — survey 2019

Glimpse into professional software development

You can literally see and learn how software is done at Microsoft, Google or Facebook (and many other companies are known for good engineering)— the companies share internally written code under open source license.

Collaborate with experts

It takes quite a lot of experience and expertise to recognize, implement and maintain a successful software project.

People behind these tools have a passion for their creations and love what they do — they are true experts. The feedback you’re getting while working with them is valuable.

You’re creating proof of your expertise

Having an impressive portfolio on Github (or whatever platform of your choice) is a solid indicator for your future employer. Moreover, many headhunters use Github to find talents.

Many companies hire core contributors that work on company-supported open source projects.

Andrew Clark tweets about being hired by Facebook. Andrew contributed a lot to ReactJS eco-system prior to this tweet. https://twitter.com/acdlite/status/769272685209669632

Some companies sponsor maintainers of open source project without hiring them.

Example of maintainers being paid for their support of BabelJS via Open Collective. https://opencollective.com/babel#budget

It’s free

Education and experience are expensive. While engaging and contributing to open source projects, you’re getting valuable experience of practicing software development, getting feedback, and creating a portfolio for free!

Stackoverflow informal education types — survey 2019

Now that we’ve agreed that contributing is awesome, let’s try to break down the types of contribution you can do, depending on your time, required effort and expertise in the subject.

Every time you face a problem

It’s hard to start contributing without any context or specific motivation. How do you pick a project that is interesting enough and would be useful for your professional development?

Stackoverflow open source contribution rates — 2019

It’s much easier to start when you have an actual problem with a third-party open source project. A problem that matters to you.

Fortunately, Javascript development is very dependent on publicly available software (via npm packages) and the solutions are not perfect. Every time you see a problem — either it is a configuration, documentation or an actual issue, it’s an opportunity to improve, contribute, learn, and boost your professionalism!

The contribution checklist

Create an issue

That’s the minimal, least time-consuming and most important type of contribution you can do.

One can say it is not a real contribution, but I do consider it very important. In fact, Github counts it as a contribution:

The 4 types of contribution as considered by Github

Let’s start with an obvious observation — without creating an issue, maintainers would never know there’s a problem with their software, neither they would be able to improve it.

But, you’re the one who mostly benefits from doing that!

Have you ever found yourself trying to unsuccessfully solve a problem, and after a few attempts calling a colleague for help? As soon as you start to describe the problem — eureka!

You’ve suddenly got it! (Usually, it’s a typo, right?)

It is quite hard to describe a problem effectively and precisely ✍🏻. Most projects today use some kind of a template for new issues. By following the template, you’re forcing yourself to look at the problem from a different point of view.

By describing the problem in your own words, you can suddenly realize what the solution is and… just apply it. Alternatively, describing the problem in your own words could spark new ideas/hypothesis. If that’s the case — 🙌🏻 great job—go ahead and tell your colleagues.

If not, you’ve just created an issue with a good explanation. It would help the maintainers. You helped other developer — now they are able to find the problem and realize that it is an issue with their own code. People will discover your issue and add 👍🏻

By having this first engagement you create an opportunity for the maintainers to guide you, possibly propose a solution and motivate you to open a pull request with a fix (more on that later).

See, you’re already helping lots of people!

Bonus: When creating an issue on Github, you get a nice auto-suggested list of already existing issues, that help to discover a solution and prevents duplications. 👍🏻

Github auto-suggests similar issues

Provide a minimal example

It would be much easier for the maintainers to deal with a very specific, minimal representation of the issue you’re reporting.

Although it is more time-consuming, it is also beneficial for you. By extracting the problem you get:

  • Confirmation that it is actually a problem with the tool/library itself and not with your own code
  • A better understanding of what the problem is (which can be used later to effectively describe the issue)
  • Opportunity to solve the problem by dealing with a simplified context

By removing unnecessary complexity while composing a minimal example, there’s a high chance that you understand the problem better, discover a solution or even realize that it wasn’t a problem at all 😼!

Here’s a list of some platforms that can be used to create a reproducible example:

Example of a dedicated repository with a reproducible issue. https://github.com/babel/babel/issues/9853

Find a workaround

At this stage the problem is confirmed and validated, or maybe not completely validated, but… you want to move forward and just get rid of it!

Odds are that you don’t have time to dig into the third-party library source code, but you can definitely find a workaround. It could be an ugly monkey-patching, configuration change or some creative way you’ve found to overcome the problem. It is your obligation to share it with the world!

Either create a new issue or add a comment. You’ll get tons of ❤️ , 👍🏻 and 🎉

Workaround and a lot of👍🏻 example

Bonus: other people could comment and share a workaround that’s better than yours.

Suggest a solution in comments

Great news — you’ve just found a solution or have great confidence about what might be a good solution!

It works great in your codebase, but you don’t have time to create a pull request with tests and /or documentation. It still might be valuable to just share your discovery, because others will pick it where you left.

Often the problem is not even in the code — it might be a configuration issue or lack of clear documentation that leads projects users in a wrong direction. The point is to share this little piece of knowledge — it is valuable, even if it doesn’t seem like significant contribution.

Implement a solution in your own repository

What often happens that project maintainers are not responsive. Most of the time they are just busy with their life, or too busy at a workplace.

A good temporary solution might be forking the project and pushing the change in your own repository. Your peers can use your temporary repository as a dependency. While not ideal, it can help your team to move forward. ✅

Meanwhile, submit your fix as a PR. Eventually, the authors will review your fix and issue a new release. It is very important to create the PR though, otherwise, you’re at risk of being stuck with a dependency that cannot be updated.

Sometimes, authors will suggest joining core contributors’ list, and that’s awesome — you have the opportunity to take the responsibility and maintain a project with active users.

Create a pull request

Pull requests are the bread and butter of open source development.

Everyone can contribute, take part in a bigger project, leave a digital trace of skill and expertise 🌟.

Most important — it is the biggest, most effective opportunity for an individual to learn and improve 💪🏻.

Contributing to open source projects gives you superpowers and helps humanity

There’re several layers of valuable experience you gain by submitting a pull request — let’s list them:

  1. You see how complex problems are solved, discover new architectural approaches, different ways to organize project and code
  2. You discover new coding styles and techniques
  3. You discover the new or different application of testing frameworks, CI pipeline, linters and enrich your experience and knowledge of using other complementary tools
  4. You are creating an opportunity to get valuable feedback from experienced professionals
  5. You are getting knowledge about the internal implementation of the tool you’re working on — it will help you to use it better
  6. You’re creating an authentic, transparent record of your achievements and professionalism.
  7. You connect with other developers, which creates opportunities for collaboration, hiring and is simply fun

That’s how you learn and become a better professional — you do more of different stuff.

You see and try different approaches, learn the good and the bad parts, apply what you’ve seen in different situations and get feedback about your decisions.

By iterating and regularly challenging yourself with more complex subjects you gain the professional confidence and experience 🥋

Discovering opportunities to contribute

As I have mentioned, it is easier to start to contribute when you have an actual issue in you have to resolve. But what should you do if you don’t work with OSS tools and still want to find contribution opportunities?

Online

Github recommends project owners to assign labels to issues that are easier to start with. A simple search by label: good first issue will reveal more than 200k issues to pick from 😄

You use label: help wanted search query to discover more complex issues that are not necessarily beginners-friendly.

There’re plenty of resources that do some kind of aggregation based on technology, difficulty, and popularity of a project.

Here’s a list of few such projects to get you started:

And a lot, a lot more…

Offline

There’s a good chance more people in your area are interested in open source contribution opportunities. Try to find a meetup event.

One particular example I want to highlight is a Goodness Squad. I personally participated in one of those events a few years ago and it was extremely effective and helpful for me.

Summary

While writing the article and discussing it with my friends we noticed that there are plenty of resources to find projects that need contributors help. However, it is quite hard to find a project that you can learn a particular skill / coding aspect.

That’s why I have decided to try and create an alpha version of such a list:

This is a small list of projects that I personally found helpful for my own professional development (Javascript-related only for now). I hope it is a good start for a place developers can find good projects that they can learn from.

The article was originally published at: https://dev.to/agoldis/learn-by-contributing-27g6

--

--