
In February of 2017 I purchased a game that I had seen someone raving on Reddit about called Factorio. For the uninitiated, Factorio is a game about designing processes to Do A Thing™. At the time, my thinking was "okay, a couple random people said it was cool, the video looks neat, and it's twenty bucks, so what the heck".
Five years and one unreasonable addiction later, this little experiment has proven the hypothesis that cheap, indie games can be infinitely more fun and replayable than much of the drivel coming from AAA studios these days.
While a lot of the major publishers are focused on metrics and engagement, and things like how to repackage NFTs so this time people will buy into them, indie devs like Wube are focused on optimizing every system so that people can build potentially game-breaking factories. I love it.
One of the interesting aspects of Factorio is that you can make it whatever you want. Some people love speed running to a rocket launch. Some people love building the most efficient bases possible, and/or pushing for the maximum amount of consumption (and production to support it) per minute. Some like playing with biters that angrily swarm your walls only to be cut down by super charged laser defenses powered by nuclear reactors. Some enjoy peaceful problem solving.
Factorio works for all of these playstyles. It's not "you can do them, but it's going to feel clunky or overpowered". It genuinely feels fun, performative, and balanced no matter what your niche.
Mine is big, sprawling factories connected by massive train systems. I enjoy the challenge of managing a complex rail network and the traffic on it, and of solving problems associated with moving items across the map.
Effecient? No chance.
Fun as hell? Yep.
Anyways, what got me in the mindset of making a post about Factorio wasn't that it's a great game (though it absolutely is). It was something that happened during my playthrough last weekend, after I'd unlocked most of the technology I needed to start scaling up and out.
In the factories I like to play (spread out, hub-and-spoke type production lines) that means trains. Trains are a high-latency, but high-throughput method of transporting items in Factorio. Over the weekend I decided to band-aid a throughput problem I had with more trains, because at the time it was late, I'd been playing way more than I had intended for the day (see: addictive), and I figured I'd solve the problem tomorrow. So I placed some new trains, loaded them up with enough fuel to run overnight (my server is persistent and non-pausing), and went to bed.
Then, at some point during the night, this happened.
It's probably not immediately evident what's going on here, but if you look closely the Southbound train (the one on the left-hand north/south line) is stuck at a signal which is red, meaning it cannot pass for fear of causing a collision. The signal is red because of the Eastbound train which is partially into the intersection, reserving the rail block which that Southbound train is trying to move into.
This is known as a deadlock - a couple of these trains are blocking my (very poorly slapped together) intersection, and none of them can leave because there are other trains in the way, which are themselves blocked by the trains that are blocking them. It's a very circular chicken-and-egg sort of problem. The train can't move because it might cause a collision, but the collision danger (and traffic jam) can't be mitigated without moving the train.
Usually, this happens because of poor planning in the rail network, which is the case here. The right hand side of the image is my original rail network from my starting base, built as quick and dirty as I can and used to bootstrap the production and research of things I need to move later into the game, while the left hand side of the image is the beginnigs of a more functional, aesthetic, and well-planned rail network which serves the larger base. Being late at night, and needing to move items from one section to the other with low effort, I threw down some rails, put a bunch of signals seemingly at random, and caused a major deadlock that backed up my entire train network. Here's the same problem from a satellite view.
For reference, I have a rail yard which holds parking for around 80 trains. When I signed on the next morning, there were four in their stations. Out of 80 trains, 76 of them were involved in this massive traffic jam. This was a mess, but it was a fun kind of mess - here's this gigantic issue that needs to be solved, how do we fix it? This is the essence of Factorio.
There's also another reason this sticks with me so well; there are significant parallels between the process design, problem solving, and management of a factory in Factorio, and in software design. If you've ever been saddled with cleaning up the technical debt left behind by someone who decided to "just do something functional real quick, and we'll fix it later", my train problem should look very familiar, as should the solution: to carefully unwind the traffic jam, build a better interchange, and reroute traffic away from the old segment before decommissioning it entirely.
There are hundreds of these little decision points every playthrough; how do you start? Do you build for speed of progress, or for reuse? What tradeoffs do you make between technical debt and factory hygiene? What risks do you take? How do you scale? The questions you face depend on your playstyle - and again, no matter what that is Factorio just works for it. It's a wonderful game by a wonderful company of passionate indie developers, and I'm sure I'll be playing it for many more years to come.