Let me tell you my open source story. In 2016, the Director of Backend Engineering at my company, who was also in my team suggested all us new kids, that we need to jump on any idea we might have and work on it. We were, as some of us Indians fondly like to say, dhadh hee (too) excited on that and the next coming days. One of my kid colleagues (kid = junior dev) made this really helpful node module called npm-install-all . It was a simple idea that came out of the frustration to keep track of whether a needed node module had been added to package.json file after playing around with it and deciding that it was needed (this was before the days when npm install <some package> automatically added it to package.json file). He was the first one of us who solved some problem that he was having. But that time, all I saw was Whoa! He made a node module! This is his open source starter. I should do something soon lest I never be able to do anything. Then I had this idea, which at that time nobody had done right β While trying to debug with console.log s sometimes we need demarcation lines between two logs for visible separation so that we know where one log ends and the other starts. What I intended to do was not just make a generic module that would enable people to do so easily, but also to make those separators (for example simple horizontal line like βββββββββββββ ), adjust to change in the terminal size. I gave up on that module way to early. It wasn't until a couple of weeks back that I had another idea for a node module. So I'm creating a twitter bot where I needed to dynamically create twitter threads from a long string (basically just split a long string into allowed tweet size array of strings). So I looked around to see if there were any node modules to do that. There weren't. I decided to pick that up and make it . I coded it up in a couple of days and published it. Then a day later, to my horror, I realised that I had completely fudged it up! It was a disastrously wrong implementation. To another horror, I had written tests for the first time in my life, and the tests were as good as nothing. They were wrongly written as well. So I started writing the node module again, from scratch, and realised that it wasn't as easy as it sounded initially, there were too many edge cases to take care of. 3 days later, the node module was done, with tests written for it, which actually tested something useful. And then I published it! My point of writing this whole story is that, I can't tell you (literally can't tell you, because it'll take up too much time) to enumerate all the things that I learnt from writing this node module. But trying to summarise β I learnt some ES6 features I hadn't every used before. I used esm node module for using ES6 imports and exports module system I learnt how to return early to save confusing else and else if statements. I coded up the node module in javascript. I had to do so many type checks in my code, and even in my tests. I realised for the first time, why statically typed languages like Typescript would be beneficial and would save immense amount of otherwise testing and debugging time I learnt how to brainstorm first on notepad and properly get the architecture of how things need to be implemented before jumping into writing code. I learnt how to write tests (as I said, I had not written any tests before for any project) I learnt how to set up a basic travis build system to automatically run tests for different node versions. I learnt how to make the node module visually appealing by writing proper API docs and putting up a cool logo. I learnt how to depreciate old versions of the package (because I had published the wrong implementation as I said above). I could do all of these like an important exam preparation β because I knew my node module might be beneficial for many people out there, I spent extra time in making it and testing it properly, so that it could be as useful to people as it would be for me. And more so, so that people could chip in and open an issue for a bug, or for general advice about the code or anything. It's always good to get feedback (see how much feedback I got for a pull request that I made for a popular google extension) . The best thing about open source is that most people mean well and are friendly. Wanting to open source something would push you to maintain it, if not for people then for yourself, in case no one else uses it. At least you'd get to learn a lot β worst case scenario. Best case scenario? You'll get feedback and get to collaborate with people and learn even more. So what is that you are afraid of now? Chime right in! Open source it properly! Hope this helps!