Mixed feelings on open-source
Tags: nx, opensource, productivity, typescript
Published: 2022-11-15 03:44:33

## Mixed Feelings

I've got mixed feelings about open source. Yet, I still actively create open-source projects. On the one hand, it has never been easier to do it. On the other, **it hardly pays** -at least not directly. 

## Dipping my toes in the water

The first time I created an open-source [project](https://www.npmjs.com/package/react-json-editor-ajrm) was a couple of years ago. I was planning to move abroad and realized I needed a technical portfolio since it would be harder for me to find a job when my work credentials were all from where I was based before.

At the time, I was doing a bit of React, and in my previous job, I had identified this thing that was like "oh, I wish we had something like this" but there was no good open-source code at the time.

I remember spending about two months, on and off with some spurts of a lot of progress :muscle:, and certainly doing a lot more as the day of my departure encroached :hourglass_flowing_sand:. I wrote about 1k lines of JavaScript.

**I found a job 8 days after landed abroad**. I consider myself incredibly lucky. I've moved to several jobs over the past few years, and I've gotten feedback that the open-source project I wrote was a _contributing factor_ to securing the role.

Flash forward to today, and I see that open-source projects achieve relative success with **+400k downloads per month**. I think it became popular because I had made something that at the time there were not any suitable/competing alternatives.

## Lessons Learned 

**A few things I regret:**

1. I wish I had set up my project so that maintaining or extending it would be easier.:weary:

2. I wish I should have stopped to consider if there was a good way to monetize my idea. I believe in sustainable open-source, after all, you are giving away time. :disappointed:

Other things came with open source. I was still a newbie back then, development tools weren't as great as 5 years ago, so I had to learn to set up projects from the ground up and put tooling together. I also found
 new appreciation for writing good documentation.

Documentation is such a ubiquitous thing, that typically is not the first thing on your to-do list or so I thought. When creating something for other developers, however, something that directly influences adoption is having good documentation.

I think open-source because it is public, everyone gets to look at it and can choose to use it, it raised the bar in terms of how well I write up documentation.

## :notebook: Documenting Code

Today, I use things like SwaggerUI, and [typedoc](https://typedoc.org/guides/overview/) especially, which are helpful tools to present the API of your open-source projects.

There is also something satisfying to see that shiny new feature well introduced for everyone to read. Like I get I direct dopamine boost every time I run the build and deploy command for documentation.

I learned about [NX](https://nx.dev/) recently and before this. 

I hated monorepos. Every time I had come across one was in the context of maintaining a massive legacy code monolith-hybrid of sorts, which typically guaranteed it was going to be painful to migrate because project configurations were somehow tightly coupled making it a total pain :shit:.

I have never seen it done correctly until I came across Nx. After figuring out how to automate managing Contributor License Agreements and Github sponsors, :construction_worker: I have decided I will slowly bring all these "small" "side-projects" I've been doing on my weekends and put it all under one repo.

Now I have this massive backlog of projects to port over and make public, and I have different docs set up for each and I knew if I didn't centralize a way to do it, it would create additional overhead to maintain documentation in the long run.

## :sparkles: Look what I just made :sparkles:

I browsed for community plugins for NX and didn't find an adequate solution there. So I went ahead and created a plugin to scratch my own itch, but do others a favor too: [@enio.ai/typedoc](https://www.npmjs.com/package/@enio.ai/typedoc).

My end game is to get paid for doing the thing I am good at, working on the things that only interest me. Setting up sponsors is part of that strategy, writing this post is another.

Thanks for reading this far. I appreciate you for it. :bow: