Twelve years ago, I was frustrated with the technology we were using at work, and I set out to learn something else that I’d been hearing about, and wanted to try, Django. Nothing guides a learning project like a target, so I set out to build a game in the style of the old classics Master of Orion, or more specifically Pax Imperia (for us Mac nerds), but generally a web-based multiplayer “eXplore, eXpand, eXploit, eXterminate” (4X) style game. In fact, the original title, before I settled on a name was fourx

So, bit at a time, I built up what I needed to make this happen — learning each piece of the framework as I needed it, and each, successively more complex need for the game lead to incrementally covering most of the framework.

Over time, it got good enough that I invited a handful of friends to try it out, and the feedback was a resounding hell yes — I had 25 or so playtesters, some of whom I found out were setting alarms in the middle of the night to set additional “orders” during game turns that triggered overnight, and others were colluding with each other via outside means (phone, text, etc,) in order to gang up on players who were doing really well. One player even loved the game so much, but hated my graphic design skills so much, that he donated a revamped interface design mock for me to implement.

Graphic Design is my passion (He may have had a point.)

Eventually, though, the game design itself ran up against some problems I wasn’t experienced enough to tackle. Specifically, the nature of these games can lead to exponential growth for each Empire, which makes it nearly impossible for newer players to catch up to older players. Around this same time, I had some big life changes (moved across the country, gave up a job, relationship fizzled and failed) so priorities shifted. Galactic Impact was put to rest. I assured myself, only temporarily.

Fast forward to now, it’s time. It’s been gnawing at me from the shelf for years, and now I’m finally going to bring this thing back to life. Some reflection (with outside help… get a therapist, y’all) has brought me realize that I need something internally grounding in order to show up as my most helpful self for others and avoid Doomscrolling in this onion-peel of crises we’re calling 2020.

Ironically, in the intervening years, the ‘day job’ technology… Ruby on Rails… that I was frustrated with, has become a major tool in my toolbelt, and I’ve hardly touched the one I was so keen to learn at all. Django has undergone (at least) two major revisions, and I don’t really understand the python development ecosystem anymore. Thus, updating to the latest Django would be a lot like a full rewrite AND a re-learning of the framework. So I’m going to be porting this thing to Ruby on Rails 6.

To keep myself accountable, I’m going to be posting here about progress, and sharing some great old code that I find, contrasting with things I’ve learned in the intervening years, and some notes on database development, as Rails has a slightly different take on the Object-Relational-Mapper than Django does. Buckle up.