“Don’t be afraid to face fear and discomfort. That’s when we grow to become better.”
Hung Nguyen - Creator of Jest Preview & Vitest Preview, Senior Frontend Engineer at Filum
My first step into the open-source community was in 2018. At that time, I wrote a library to help integrate the Login with LinkedIn feature into web applications more easily. It took five years for the project to reach 80 GitHub stars and 5000 downloads per week. It wasn’t until I started working on open-source full-time that I truly understood how this community works, how to contribute to a project, and how to find users for my own project. These things helped me a lot in building my second project -
Last year, I decided to quit my full-time job to seek new challenges. The first challenge in that journey was to develop my own open-source library. The reason for the birth of Jest Preview is that, in the process of my work, I had to write a lot of frontend tests for web apps, and I encountered the inconvenience of debugging a failed test, I couldn’t imagine what was really happening. I decided to try writing a library to support frontend engineers to see the interface when testing with Jest on a web browser. When building Jest Preview, I simply thought that I was creating a library to make my daily work easier. Later, I learned that other frontend engineers out there also have pain points like mine. Therefore, the library received a lot of response from the community all over the world. Since I don’t have a good money-making mindset, I did this for fun and for my own interest =)).
Disappointment is normal. When developing a feature at a company, one way or another, you will find a solution for it, whether it is “beautiful” or “ugly” code. When developing an open-source library, sometimes I cannot know whether that idea is feasible or not, if it doesn’t work, if the failure takes time or not. Yet I still dive in and continue to develop features, improve the library, and help Jest Preview become more complete. Just do it, and the deserving reward will come to you, trust me.
In June 2022, the organizers of the React Summit event sent me an email - “Your library is nominated for The Most Exciting Use of Technology category, the React Open Source Awards, and we would like to invite you to the Netherlands to attend the event.” At that time, I was touched because it was a dream that I had never thought of. I just thought of making a random library and throw it on GitHub, suddenly being nominated for such a grand prize. Although I didn’t get a visa to go to the Netherlands for the event 🥲, I gained more interesting experiences and connected with talented developers around the world. Another time, Jest Preview was given a star by Dan Abramov, the core team of React. Holding my phone and refreshing, the star increased rapidly, I was startled and couldn’t believe what was happening.
In addition, many experiences I would not easily have if I only did a 9 to 5 job. I have the opportunity to learn about tech conferences, expand connections with super cool dev friends there. For example, last year I attended CityJS Singapore and met Even You, the author of VueJS and Vite. After that conversation, I had more ideas to improve Jest Preview and create the Vitest Preview library. Furthermore, sometimes I receive thanks from engineer friends in the community, thanks to your library, we save a lot of time debugging code, making our daily work easier.
For those who want to contribute to open-source projects, my advice is “don’t be afraid to read library code, don’t think you can’t compete with other contributors.” Personally, if I want to understand a technology deeply, I will try to contribute to that community/technology. Some subjective experiences of mine when approaching a project that I find interesting and want to involve in:
- Use that technology every day: only when using that technology every day, I have enough context, understand the problem that technology is solving. It will be very difficult to learn about a technology if you yourself are not a user of that technology.
- Join the community: most communities (especially open-source communities) have a few channels for exchanges such as Discord, GitHub Discussion, Slack… I will have the opportunity to learn and exchange directly from the author and maintainer.
- Read old issues/PRs: reading source code from scratch is almost impossible for any technology. Even the main maintainers don’t fully understand it. Instead, read the issues marked as completed, or recent PRs. I will have the opportunity to read a part of the source code with a smaller scope. Gradually, you will get used to and understand the source code to contribute. At the same time, know how maintainers and outside contributors contribute to the project.
- Contribute to docs and test: there are two things that can always be contributed to any open-source project, which are documentation and test. When reading docs, if there is any part that is difficult to understand, or any part that can be tested to increase coverage, cover more cases, send a pull request. Those PRs of yours will usually be merged very quickly and be reviewed by cool coders.
- Build the project locally: the key is not to be ambitious to read and understand the whole system, at one point, just focus on one small thing. After a while getting familiar with the project, don’t be afraid to ask the maintainers how to build the project locally (refer to point 2), they will be very open to showing me (then I can send PR documentation to make it easier for the next person)…
Finally, I want to remind all readers: “Don’t be afraid to face fear and discomfort. That’s when we become better.” I have had fears and doubts about myself. But then I still chose to face those fears with my head held high. Discomfort is inevitable, even a lot. But just go ahead, and gradually we will see the way to the destination. Because as Lo Tan once said: In fact, there are no roads on the ground, people just keep walking and make them into roads.