My realisations/experiences in a chronological order :

Realisation #1 : If you’ve never contributed to a project before, its going to be extremely difficult to contribute to someone else’s code

I spent weeks trying to find a project that was interesting and easy to contribute to. Sure, I was able to find some issues and fix typos in documentation, but what I really wanted to do was contribute code.

Only after many weeks did the thought of building a project myself came to my mind.

First few commits

Realisation #2 : Building a project on your own is a good way of jump starting some kind of open source work

After weeks of toiling hard to find a project, I started building my own project with hopes of learning along the way.

I started building a music downloader and my first few commits were ugly pieces of code that would never get merged into any major project’s code base.

I was using C type loops. Ugly python code.

Realisation #3 : If you’re humble and ready to learn, random people on the internet will go miles to help you

After I had roughly built a working version of my music downloader I posted it on various python/programming related subreddits.

I was surprised to see that random people on the internet reviewed my code, told me what was wrong and then provided me with resources to fix things.

Responses on reddit

Few people started sending pull requests and issues which helped me learn how to manage a project.

The end result turned out to be a music downloader that downloaded songs with metadata.

Realisation #4 : (Some problem -> write code to solve it) = Success + Satisfaction

I soon got bored of my initial project because all it did was download songs and the problem that I now faced was adding metadata to my existing songs.

So I switched to building something similar that made use of some of my previous code.

I started building a tool that would add metadata, album name and other details to existing music files.

Realisation #5 : Knowledge grows exponentially

As I started writing more code I realised that I was able to understand and apply concepts faster than before.

Having become accustomed to looking for answers on Google and Stack Overflow, I was no longer afraid of learning new modules and libraries.

During this time I had also started building a few other projects. I was actively managing 3–4 projects.

Realisation #6 : Results show if you keep at it

Remember that second project that I built to add metadata to existing files? I posted it on reddit to receive feedback and turns out people actually liked it.

The next few weeks went towards fixing issues, managing pull requests and adding features. These weeks turned out to be the most valuable.

On the trending page

The project peeked at 450+ stars on GitHub and even trended on the main page!

I was in no way an expert programmer at this stage, but I was definitely not a beginner anymore.

This success gave me a major boost and I started spending even more time on writing better code.

Realisation #7 : Contributing to other’s code doesn’t feel impossible now

First pull request

Over the last few months I had built numerous projects and I was surrounded by a lot of code. I started looking for projects that interested me and started fixing issues and adding features.

Turns out the thought process behind contributing to some project was :

Hmm, this project seems interesting *Opens issues* Reads the code and tries understanding what it does. Fiddles with code and tries solving a issue.

These points would make no sense to me 6 months ago because I was looking for a recipe that could give me the power to contribute to open source.

But that’s not how it works.