It’s been almost 2 years since I released OpenBullet version 1.0.0 to the public, and that first day of April 2019 already feels like a lifetime ago.

I am very proud of what I achieved during all this time, and I am happy with my choice of making OpenBullet an open source software with a very permissive license. Although the journey was really fun, the tech debt got to a point where OpenBullet 1 felt like a house of cards, or rather, like a puzzle: many components glued together in weird ways. This was mostly due to the fact that I was still developing my programming skills, so I used OpenBullet as my playground to try out as much stuff as I wanted, often with disregard to good OOP practices, nonsensical mutual dependencies and no clear architecture to be seen.

Updating even the smallest component was a very painful experience. Whenever I wanted to add a new setting to a block, I had to manually fix the LoliScript parser and writer to account for this change, while making sure that configs created with the previous versions would not break.

Moreover, even though I had to learn it because it was pretty much the only good option for Desktop UI development with .NET, I never liked XAML and I always felt like it would have been great to be able to use my existing frontend skills (HTML and CSS) to make decent-looking and responsive interfaces.

Finally, the fact that OpenBullet 1 has always been platform-specific prevented many people from using it, and as a Linux user I also found myself having to write some python scripts from scratch just to scrape a webpage when I had a fully featured killing machine on the other system that I already built for this exact purpose.

The idea

One day, while I was looking at some new tools from the Microsoft team that is in charge of .NET (formerly .NET core), the word Blazor jumped to my eye. A full-stack cross-platform framework to build websites without the need to write any JavaScript? Could that be real? I started messing with it and it was love at first sight. That very moment, I knew this was the tool I would want to work with in the future. It might not have been production-ready for an enterprise platform since there were only a handful of ready to use components and still many bugs to solve, but it was ready enough for what I wanted to build.

So in April 2020, after the first anniversary of OpenBullet, I got to work. I decided to stop all updates to OpenBullet 1 and focus on something new, something that would make me feel like a kid again, discovering all the secrets of a new toy on Christmas day. I was hooked. When I realized that a second, completely redesigned version of OpenBullet was possible using this technology, I knew this was what I wanted to do in my free time for the rest of the year.

Yes, sometimes exams got in the way and slowed down the pace of development, as I’m the only coder currently involved in the project, but I never gave up, even when things were looking grim, and OpenBullet 2 is now ready for Beta stage.

I can safely say that I don’t regret anything about that decision, and I’m really glad that I embarked onto this new journey because I picked up many new skills that will help me in my normal developer job as well (like getting familiar with entity framework or with the authentication, authorization and localization middlewares).

The future

I don’t know what will be of OpenBullet once I will finish my studies, which are now close to their end. Right now I cannot tell if I will still have time to update OpenBullet 2 in my spare time or if I will be too busy with other things. I don’t even know if people will actually prefer using it over the previous version, since it has a very different approach and may not be easy for everyone to learn.

I only know that I enjoyed almost every moment of developing it, watching it grow bigger and bigger, and I now have a finished project at which I can point my finger and say “I made that”.

As a final note, I want to remind myself and everyone else that all this would not have been easy without the help of two friends, demiurgo and meinname, who stood by my side during the good and the bad times, without ever asking for anything in return, in order to realize my vision.