Yesterday I released the magical 1.0 release of the faf-moderator-client (mostly called "Mordor"). This is a remarkable milestone for me, as I reserved the 1.0 release for the feature complete version which I now believe to have achieved.
Thus it's time to take a break and recap the history of my first and biggest "standalone" contribution to FAF.
When I joined FAF development in 2017 (over 5 years ago) there was a lot of regular manual work in the background. Most of this revolved around uploading avatars, banning players, maps & mods. It put a lot of unnecessary work on the shoulders of the 4 admins we were back then (dukeluke, Downlord, I and in urgent cases also sheeo). Some of the stuff was wrapped in shell scripts and similar stuff to ease it out. Yet, every change required a person to login to the server and run these scripts.
Also in 2017 we introduced the re-invented API which moved from Python to Java and introduced a framework that allowed us to develop more features much much faster. Now we had an easy to read, edit or create things like bans, avatars and such. But we had no user interface for it.
So I started this as a complete new application on my own around mid 2017. Of course I still got advise from my good friend Downlord. And of course I copied a lot of code from other places such as the java client. But still this was the first application I ever wrote that was going to be beyond a certain complexity, actually useful and used by other people!
In Autumn 2017 things escalated to a dramatic level. A renegade group of players was banned for cheating and began destroying as many open lobbies and games as they could as an act of revenge by exploiting bugs. To this end, hundreds of new accounts were created daily.
Enter Mordor. Like Gandalf in Lord of the Rings told, so acted the moderator client: "A wizard is never late, nor is he early, he arrives precisely when he means to." Actually I like the quote so much that I named the first release gandalf and later on started naming major releases after movie/TV references or other funny names if nothing better came up.
With little effort, our moderators were suddenly able to block newly created accounts independently and within minutes, putting an end to the obnoxious activities of the exploiters.
Over the time more and more features and some were contributed by other developers. Still essentially it was "my" project were I was making decisions and carried the responsibility and it felt good.
So what is left after these 5 years?
Is the code high quality and following best practices?
No. It's just good enough that it barely works.
Is it well tested with automated test frameworks and setting the bar for future projects?
Totally not. That thing has exactly one test and that checks if the application can launch.
Would I do it the same way with the knowledge of today?
Not for all money in the world. Back then many people disliked the fact that I wrote a java based desktop application and recommended a web based approach and they were right back then (and even more 5 years later). But still I do believe that it was the right choice for me personally as the one who invested all that time. Simply because Java was a language I was familiar enough to get it started and enough help and references to get it working. If I had chosen to learn all the web related stuff, I probably would have been stuck at some point and lost interest. Also I wouldn't have learned all the painful issues when writing desktop applications.
So even though I usually frown upon web developing, today I understand why things are the way they are and have a much better understanding of the problems that they solve (better).
Maybe at some point in the future I will restart and do all the things in a web application. Just to get the same learning effect I had with mordor.
I truly believe that you don't become a good software engineer by reading books and articles about best practices. My experience so far tells me you have to get your hands dirty, work against some of the recommendations, make mistakes and fail so that you see why the best practices are the way they are, how they can help and when you should blatantly ignore them.
And now, for the ones who are still reading (wow, you really must be super bored!), here were the release names/themes:
- 0.1 Gandalf:
“A wizard is never late, nor is he early, he arrives precisely when he means to.”
- 0.2 Dr. Jan Itor:
"You will not ruin my Christmas. Not again. Not this year"
This close-to-christmas release was a reference to my favourite TV show Scrubs.
- 0.3 Chinese Democracy
This release allowed creating votes for FAF
- 0.4 Jeremy's farewell
Obsoleted Softlys eye-cancer-coloured avatar management app
- 0.5 Police Academy
The release made the content of the client tutorial tab editable
- 0.6 Paper War
A reference to the new moderation-report feature
- 0.7 Modzarella
"Because mods modding mods is cheesy."
Added features for mods to manage the mod vault
- 0.8 Checks and balances
Implementation of the permission system splitting off the power from the allmighty moderators
- 0.9 Maximum Break
We added managing map pools. A reference to all the Snooker fans out there.
- 0.10 Secret Empire
The only release name not chosen by me but by Sheikah instead. We migrated to our new OAuth service called Ory Hydra. A reference for all Marvel fans. I didn't get it, but I think he still nailed it.
- 1.0 Avengers: Endgame
We hit the end of the road. Nobody is going to revive good old Tony (no, I actually didn't watch a single Marvel movie...)
- 0.1 Gandalf:
Last fun fact: The 1.0 release seems to contain a critical bug, so there will be at least a 1.0.1