OK, let’s get the rant out of way…#
I like coding for fun, but like most grown-ups I am always struggling to make space in my busy calendar to enjoy quality time with my keyboard. Mostly weeks, but sometimes months, go by between my programming sessions - no point pretending, this is just how it is. Like many people, I have thought the solution to this problem is a really good framework that provides all that boilerplate functionality I need to get interactive graphics on the screen and a pre-built extensive (end extensible) library of key features and functions as a ‘force multiplier’ of my limited coding time, right?
Over the years I have been tempted many times into the latest-greatest-fancy-pants coding framework of the moment XNA, Mono, Unity, Unreal, Godot… All of them have started well with a great weekend and yet another port of my project up and running in, what feels like, no time… that old framework is dead to me, this is the one!
But in the ensuing months, and sometimes years, they have also all ended in the same way. Instead of progressing my ideas, each precious coding opportunity gets increasingly consumed by frustrating ‘busywork’ generated by the framework provider - enforced updates, breaking changes, deprecated concepts, sudden changes of direction, failing new functionality (which I never even wanted). I think I can just stay on the old version, but v1.2.3.4.32.2.1 happens to be the one with that bug right in the middle of feature I am working on - it’s not a high priority for the framework devs (all lovely people, I know). They’ve already moved onto chasing the gesture support, Mac integration, VR, Vulkan etc. etc. to keep their framework ‘current’. Eventually the bug may be fixed but, more likely, the code is simply deprecated and replaced with a shinier new pattern that avoids the problem! My only option is the dreaded upgrade (with the ensuing tangle of incompatible dependencies) and porting of my hard-won but now also suddenly deprecated code. Although, if I am going to have to do that… everyone is telling me I really should move this new framework that solves all the problems of the old one…
Either way I’m going to be spending my weekend porting again! Arrghh!
A couple of years ago my precious leisure coding time was actually more frustrating, more stressful and frankly more joyless than my work! I had dozens of projects unfinished (even to my rather low standards) simply because my hobby coding rate could not keep up with demands of my framework provider! To get an interesting idea up and running may take me several years of unpredictable weekends and maybe a whole week in the summer or over Christmas. I can’t finish things faster than they can deprecate them!
I was doing entirely the wrong calculation of value. It doesn’t matter how quickly a framework gets my project started or it’s power and future potential if I never have the time required to leverage any of that before it is deprecated and replaced!
Time to get off the hamster wheel…
Back to Basics!#
My mates are using many of the frameworks described above - Monogame, Unity, Godot - and there are endless discussions about the competing features of each but what are my actual priories in a hobby development toolkit?
- Above all else I need stability - I expect long project cycles so no behind-the-scenes breaking changes.
- I can’t really afford to write things twice - I want re-usable code to be flexible.
- I need to be able to accumulate useful code to use over many years - re-usable code needs to be robust & easily tested.
- I want to be able to swap projects on a whim and work on new features immediately - this is a hobby right?
- I need to spin up a new project easily and quickly - minimal friction in getting my idea onto the screen.
- I want the cross-platform capability to deploy to devices that happen interest me - currently x64 Windows, x64 Linux & ARM Linux (RPi), but who knows about next week?
What don’t I need? I think this is almost as important to be clear about from the outset:
- I don’t need bleeding edge graphics performance - I’m very much limited by my art skills in any case!
- Ease-of-use will almost always trump performance requirements.
- It is my personal library - I’m not designing it for other people to use.
Summary#
So there you have it! Gremlin is a very personal project and these issues were my motivation. As I have stated above, it is not intended to be shared directly but maybe my experiences and motivations chime with your own? Maybe writing up my experiences and decision making processes will be helpful if you consider embarking on a similar project?
In my next post I will discuss my initial technical choices to try and satisfy these requirements.

