jardSoftware for anonymous imageboard management (2017 - Present)
As you can see on the rest of this website, I worked on plenty of side projects in my life. But usually, they are only short-lived projects occupying me for few weeks, intending to solve a single problem or satisfy a paying customer. What I was lacking, was a larger-scale software project, one, that could be extended and polished indefinitely. And thus, jard was born.
I created the repository in 2017 and since then, the following pattern has emerged - I would develop it almost religiously every day, during a month (or three), and then put it to rest due to burning out, or lack of time caused by work/school/life in general, only to come back a few months later and start the cycle again. This may not be the most effective strategy, but it allowed me to work on the project without pressure, so I could maintain a very caring approach to code quality.
During the years the codebase has evolved, undergoing several major refactors like switching from traditional MVC pattern with Thymeleaf templates to exposing REST API and having a separate client codebase (written in React), separating Hibernate entities from DTOs, or most recently - rewriting the test suite from Java to Kotlin.
This is by far my biggest and most ambitious project and one I am really proud of. It taught me things I didn't even know could be learned (the unknown unknowns). Not just from the perspective of writing the code, but the whole process of developing, deploying, and releasing a software product - like setting up a CI pipeline, deploying with PaaS, or setting up DNS records for confirming an outgoing e-mail authenticity.
If you are interested in learning more about this endeavor of mine, please consult the README of the GitHub repository, or write me an e-mail. Right now, I am very close to finally releasing the 1.0 version and sharing it with relevant communities to get feedback from other people - very exciting.
Lessons learned: Too many to be listed here. Management of software project during the whole lifecycle, from initial development, through several major refactors, to building CI/CD pipelines and releasing.
