My Journey in Open-Source Library Development · Oleg Dubovoi's Blog<br>A Markdown version of this page is available at /publications/my-journey-in-open-source-library-development.md.
← All publications Open source isn’t just about publishing code, it’s about creating impact, learning in public, and connecting with a community. In this post, I’ll walk you through my process of developing an open-source library and show you why it’s one of the most rewarding things you can do as a developer.
Prehistory
In the spring, while watching one of Yegor Bugaenko’s streams — I was inspired by the idea of open-source development. Yegor asserted that if you want to go beyond being an ordinary developer and become a more sought-after and unique specialist, you need to create something of your own. Whether it’s a book, a blog, a library, or even a framework, such projects allow you to stand out among many other developers, especially in today’s IT market. This not only demonstrates your professionalism but also shows genuine engagement in the development of the field.
All of this made me think: how do I really stand out among other developers? Despite years of working in IT and participating in various projects, I still didn’t have anything of my own — something that could showcase my uniqueness and professionalism.
Searching for Ideas
I revisited my old pet projects on GitHub, but quickly realized that none of them were truly significant. So, I decided to start from scratch and create something new. Full of motivation and enthusiasm, I began to think about what I could write that would be in demand, at least among a small audience, and that would match my skills.
For two or three days, I analyzed ideas for my open-source project. The more I pondered, the more it seemed that everything had already been written, and that what had yet to be realized would be impossible to achieve alone. Let me say right away: this is a misleading perspective. Don’t let it destroy your potential. Yes, much has already been created, but that’s no reason to give up and abandon the idea of creating something of your own.
Now, I’ll explain why:
There’s always a chance to catch a trend and create a tool or service that quickly becomes popular. For example, during the COVID-19 pandemic, websites were developed that provided real-time statistics on infections and the latest news. Currently, we are witnessing a trend toward AI services, which continues to gain momentum. All it takes is to seize the moment and offer a solution that is in demand during that period.
It’s not necessary to be the first in a niche to conquer it. Let’s take Discord as an example: it appeared in 2015 when there were already established players like TeamSpeak, Ventrilo, Skype, and RaidCall. Yet, within just a few years, Discord became the leader in its segment. The key is not the novelty of the idea, but how effectively you address an existing problem.
The most important aspect of creating something new is to identify a real problem and offer a solution. This can be a global challenge or a small but significant issue that needs improvement. It’s crucial to understand what difficulties other developers or regular users face and how you can help them overcome these challenges.
After further reflection, I felt a desire to create something useful for the .NET community — a small library that could facilitate project development. Since my primary focus is .NET, I decided to concentrate on what I already know and do well. One idea that came to mind was to create a library for tracking input events from the keyboard and mouse.
A month before that, while working on a desktop application for Windows, I faced the task of tracking key presses on the keyboard to perform certain actions. The main nuance was that it needed to work regardless of whether our application was active. Since there were no ready-made solutions at that time, I utilized native P/Invoke calls and successfully achieved the desired result. At that moment, I didn’t consider that other developers might also face this issue and that a small library addressing this problem could be quite useful.
Yes, it’s not a library that will change anyone’s life, but it’s the first step toward creating something of my own. It’s an opportunity to gain valuable experience and spend time engaging in something I am truly passionate about, which is why I decided to take action.
Development
The first step was brainstorming ideas for the functionality my library would have. I wanted its capabilities to be as broad as possible while remaining accessible and user-friendly. My goal was for the user not to have to write more than 3-5 lines of code in most scenarios.
During the brainstorming process, I came up with the idea that it would be possible not only to track input but also to control it. For example, with code, one could simulate button presses or key combinations, move the mouse cursor, disable certain keys so that...