My journey with open source and lessons learned
Tags: javascript, webdev, beginners, opensource
Published: 2022-04-25 15:42:48

> Disclaimer: This might be a long read!

Hello everyone, before we start, here is a short introduction about myself, I am [Sidharth Mohanty](https://github.com/sidmohanty11), a 2nd year CSE B.Tech undergraduate at [OUTR, Bhubaneswar, India](https://www.cet.edu.in/). This blog will be based on sharing my journey so far with open source. I am a full-stack developer who mostly revolves around all things related to javascript or typescript. I also have experience building backend applications with Golang.

So it was September 2021, when I reached a point where I wanted to make some meaningful contributions to open-source projects, and the question pulling me behind was “HOW?”. At that point, I was a beginner to open-source contributions, and we all need some inner satisfaction and confidence about our path while doing things, right? So I started searching: _“reactjs open source projects”, “popular javascript open source projects”, GitHub’s explore page, advanced GitHub search, etc._ found some cool communities too but the problem was I was unsure what they were expecting from me. So, some of the major pitfalls when I started with open source contributions were,

i. the communities were inactive in terms of code push to the repo
ii. they were inactive in answering questions
iii. features were generally planned by the internal engineering team

**_Lesson 1: YOU NEED TO HAVE A LOT OF PATIENCE!_**

While starting contributions with open-source projects, “YOU NEED TO HAVE A LOT OF PATIENCE” to select the project that aligns with your skills and interest.

A few days passed by and I was searching for a project that aligns with my skills and interests. In October, I started checking for beginner-friendly open source communities. If you are aiming for GSoC, it is always a good way to select the projects by referring to the previous years projects/organizations. [Here](https://www.gsocorganizations.dev/) is the link to a website which helps you view analytics of different organizations.

After a lot of research, I boiled down my choices to two organizations to “start my contributions with” and one of them was [Rocket.Chat](https://github.com/RocketChat/Rocket.Chat).

**_Lesson 2: Ask smart questions. Everybody’s time is valuable, learn to respect it._**

**_Lesson 3: Connect with people, it’s very important._**

Join the different community channels of the interested/chosen organization. Start connecting with mentors and contributors of the project to understand the requirements and long-term goals of the project. This will help to get involved in the community, brainstorm ideas with other contributors and provide inputs in the project.

It was mid of October and I started using RocketChat. I went and joined all their public channels, explored their features, and amazingly enough I liked this project a lot.

**_Lesson 4: You got to really like that project before you start to contribute._**

Before you jump into the contribution and start finding ‘beginner-friendly’ or ‘first-time’ issues, start setting up the project in local or cloud-servers. This will help to understand the working of the features and getting familiar with the codebase.

For large projects like Rocket.Chat, there are around thousands of open issues and finding a relevant beginner friendly issue becomes difficult.

I followed the documentation and tried to set up RocketChat in my local environment. There were around 2k issues at that time, so for me starting out was difficult. I searched around some beginner-friendly issues (labelled with easy or good first issue tags), fortunately, I found an issue that was not being worked on and a member has already put the file details with the change that was required to be made. So, I played around with the code for a while, and on 1st November I gathered all my courage and made my [first PR](https://github.com/RocketChat/Rocket.Chat/pull/23605). I was super curious to get any feedback on my PR, but it’s open-source, right? So don’t forget lesson no. 1. I kept on searching for issues that I could work on and kept on playing around with the codebase. I made around 5-6 PRs in the month of November and I was receiving some good feedback from the community or at least I was being noticed because I received an email from a member of the organization asking if I was planning for GSoC’22 and he also sent me a link to join that channel.

**_Lesson 5: Stay consistent and work hard enough to get “your contributions” or “your efforts” noticed_**

While starting to contribute to open source communities, it is really important to prove your potential and interest towards the project. This could be achieved by consistent contribution to the project. Open source communities highly appreciate the meaningful contributions and it boosts your confidence to contribute more and more. When you have time, go through the previous PRs of other contributors to understand the coding quality followed by the community and the thought behind feature implementation. This will help to understand and learn more about the community and project.

I found out a lot of people had already joined the channel and had started contributing. I went through their PRs, I went through organization members’ PRs and just kept learning more and more. I really liked the recognition that I was receiving during that time and wanted more of that. So I kept on trying to resolve any potential issues.

I got to a point where I had gone through a lot of issues (nearly 1k) and I saw most of them weren’t also labelled or planned for the upcoming releases. So, I learned something here too,

**_Lesson 6: Hard work is great but hard work + smart work = AMAZING!_**

Before starting to contribute on a specific issue, try to acquire as much background knowledge about the implementation of the issue. After receiving the reviews and thoughts from everyone, place yourself in the seat of a user and think how beneficial could this implementation bring to you. At the end of the day, the invested effort should bring beneficial changes either to users or other developers.

**_Lesson 7: Work on the features that the community wants_**

So, in the issues section, I used the GitHub issue search and I literally searched “needed feature”. This provided me with 50-60 issues and I was happy, really happy. I thought maybe solving these will help the users and help the community in some way. I would go through the issue, and its comments, read the opinions of people, if they needed that feature or not, and also the opinion of organization members. At last, I would ask my intuition if it will be a good thing to add to RocketChat and if the answer was “yes”, let's try! I had tried to solve or add some of these most needed features and the recognition I got here was 100 times more than my previous approach.

Along with willing for good results, start enjoying “the process” of contributing to the projects. Stay involved in the community discussion channels and understand the priority/important feature implementation required in the project.

In this process, I was learning A LOT. But I think the most important thing that kept me going was “the process”. Meanwhile, a lot of the folks who were trying to contribute to RocketChat messaged me to ask about some tips and tricks to get started and I would tell them about my journey, I also made a lot of friends in the community and received a lot of great feedback about my contributions and some good wishes for my future endeavors. Having this type of exposure was not something I had ever expected, but this helped me a lot to push myself even harder.

**_Lesson 8: Ask for feedback, it’s really important to stay motivated and keep yourself upgrading._**

**_Lesson 9: It’s a long process, don’t expect instant results_**

**_Lesson 10: Keep looking for opportunities, they can come to you in any form._**

While I relate this lesson to my own experience, once a community member posted an idea related to RocketChat Apps Engine (RocketChat maintains its own engine to develop apps inside RocketChat which are published in their marketplace). I was very excited to learn about the idea and had a chance to closely work with other community members. This experience boosted my confidence and helped me strengthen my bond in the community.

**_Lesson 11: Get into a “Yes, I am up for this!” mindset, if you really want to get involved_**

But be cautious about what you are signing up for.

While working on the projects, there are multiple opportunities and ideas popping up in the community. Stay active to be updated with the upcoming opportunities and grab the one that suits your interest and skills. While grabbing the opportunities, there are few things to keep in mind. 

- Always be proactive in designing and delivering the tasks.
- Explore all the opportunities and find the depth of it.
- Before jumping and assigning the task to yourself, discuss the requirements and approach with the mentors
- Make sure about the time commitment.

One day, Rohan Lekhwani sir, one of the active contributors and previous year's GSoCer asked if anyone of us wanted to contribute to a project, to which also I said, “yeah I am interested!”, so I got a message asking about my projects and previous experiences. As I was just in my second year I had a few cool projects to showcase, but fortunately one of my projects caught his attention and I was selected to work in a ”power team” on the project. So, I was super excited because we were to be guided by members of the organization. I was excited to an extent that when I received my first work, I thought let me give my best here and provide it as quickly as possible. So, I did. But what the members were expecting and what I did was different. Being an introvert, it was really difficult for me to really express myself, ask questions or suggestions, etc. Mentors were kind enough to let me know that it’s okay to ask questions, and shared their immense knowledge with me. Every week there was a scheduled virtual meet where I was given the complete freedom to open up in front of my mentors and teammates and I really loved it. I was learning a lot, yes, again!

The most important life lesson I got out of this is, to communicate your thoughts effectively, nobody is going to eat you alive if you do so. It is noticed more than 50% of the developers face the issue to communicate properly with the mentors and aren’t able to perform at their best due to communication gaps.

A big shoutout to my mentors here, as they’ve guided me, encouraged me, and helped me in all stages of my journey: [SingLi sir](https://github.com/Sing-Li), [Rohan sir](https://in.linkedin.com/in/rohanlekhwani), [Debdut sir](https://www.linkedin.com/in/debdut-chakraborty/), and [Duda](https://br.linkedin.com/in/dudanogueira)! Thank you so much!

**_Lesson 0: Learn to communicate clearly_**

_Why is this lesson number 0 you may ask?_ Well, because if I would have been an effective communicator from the start I think possibilities were limitless. You don’t need to bug everyone but communicate enough to express your thoughts, plans, etc.

**_Lesson 12: Bond with others_**

With time, I developed great bonding with my mentors. I would receive appreciation whenever I reached a milestone, that always helped me to boost my confidence, and if I was stuck they were ready to help me at any point.

**_Lesson 13: It’s all about the journey, not the results_**

_The major thing which I learned in my journey is it’s all about the journey. It’s not a competition nor a shiny thing to mention in your profile but it’s all about coming together and building something useful, learning and evolving in all parts of your life._

I want to be honest here, I could've never imagined this type of exposure, making so many friends, getting guidance from mentors, improving my communication skills, etc. All of these were possible because of my mentor [Muskan didi](https://in.linkedin.com/in/muskan-khedia), who guided me through the very beginning (when I was just starting out to code in my first year). She pushed me to get started with open source and explained its importance. From helping me to `git rebase` my PR to providing guidance to face challenging situations in life, she has always been there. I would say, there is a significant role of a mentor in one’s life to reach the peak of your potential.

**_Why open source?_**

If you ask me, other than the benefits mentioned above, open-source provides us with a platform where endless opportunities come to you in ways you have never imagined. For example, I got a $500 freelance offer to integrate RocketChat into an application. I stayed the [top contributor](https://gsoc.rocket.chat/) of RocketChat this season which increased my reach all over the community. I was also nominated by all my team members to add a [milestone commit](https://github.com/RocketChat/RC4Community/commit/ddc933b9cc0e4d53f4041682d01789ee8477ee0a) to the project. I connected with people from different fields of expertise. Most importantly, I enjoyed all of it.

![freelance-offer](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fpsdwjw2g59r4cc5vbo0.png)
![leaderboard-rc](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/fw6bzs82yd4cfi4jf3rq.png)

Lastly, I wrote this blog because I see posts everywhere about _"how can you contribute to open source?"_, _"what is open source?"_, _"how to make a PR and contribute to open source software"_ but I don't see many posts where people have shared their life lessons. So, I thought it might help individuals who are stuck, save their time and help them to get started because I do believe open source is more than just coding. Please share your open-source journey and lessons below because we never know how our experiences can help others.

If you want to reach me:
Email : sidmohanty11@gmail.com
GitHub: https://github.com/sidmohanty11
LinkedIn: https://www.linkedin.com/in/sidmohanty11
Twitter: https://twitter.com/sidmohanty11