While I completed it, I personally did not enjoy my time with Factorio. In my review I specifically used the term "complexity fetishist" to describe the kind of player who might enjoy the game too much.
Which isn't to say there's anything wrong with the game. It actually felt kind of weird to not recommend it since it was a pretty darned good execution of what it set out to be, I just couldn't ever actually suggest to someone that they play it. Either they wouldn't like dealing with the needlessly ever increasing in complexity goldbergian monstrosity, or worse they actually would.
I think the game's popularity among developers highlights a core problem with our industry. Look at Factorio, then look at all of the over engineering, the layers upon layers of abstraction, the obsessive need to keep making software larger and more complicated only to eventually tear it down and rebuild the exact same thing with the new-hotness widgets...
The universe is a Goldbergian monstrosity running on a Godlbergian mostrosity. Computer programmers didn't invent this pathology, and they might help us understand it.
Factorio is a celebration of things as they are.
"Five: From the wheels-upon-wheels-upon-wheels evolution of computer programming dig out, systematize and display every feature that illuminates the level-upon-level-upon-level structure of physics." ~ JA Wheeler in "Information, Physics, Quantum: the Search for Links"
My point is that the problem with complexity fetishism is that one adds complexity where none is necessary simply because one enjoys the complexity. That's fine for a game, but our industry is very often doing it at work with products that are ostensibly meant to make people's lives better.
"then look at all of the over engineering, the layers upon layers of abstraction, the obsessive need to keep making software larger and more complicated only to eventually tear it down and rebuild the exact same thing with the new-hotness widgets"
That could be a sane evolutionary process. I'm not saying it is, of course there are problems with the tech industry, but this process of exploring a space of possibilities with the tools you have, then breaking them down and building up a better suited set of tools from the ground up doesn't sound like a bad thing to me.
Maybe what I mean is, what makes you think the game is unnecessarily complex? Playing it, I was always amazed with how you become capable of achieving more and more with less and less time and effort as the game goes on. I don't see that it is made artificially more complex, it seemed like there was a lot of effort put into making the emergent complexity manageable at larger and larger scales.
- The vast majority of products you create are never actually employed to do anything and are instead thrown into a blender to make science-goo, arbitrary amounts of which are required to unlock new stuff that is also mostly destined for the blender.
- Bots are introduced way too late in the game, forcing the player to manage the rapidly increasing complexity of their infrastructure manually for a large portion of it.
- Power distribution is a tedious non-problem you're forced to keep solving, again manually most of the time because bots come so late in the game.
To name a few. The natural argument here is that those things are required to motivate the player to make their automation faster and more efficient to progress the game, but the point is that they feel needlessly arbitrary. In a game like Subnautica, for instance, there are some big high-resource things you have to build with reasonably deep critical paths, but they are things you actually use instead of just melting them down to increase a number somewhere. They feel necessary, science-slurry doesn't.
Players also claim that yeah, that's all true, but the real game doesn't start until after you've researched everything and launched your first rocket anyway. Meaning all of that is essentially a 40 hour tutorial.
Added complexity isnt always bad. It's just that abstraction is indeed a very, very hard thing to be done. Powerful features will be complex.
Take browser as example, it's a form of abstraction (imo, it's an abstraction done right). It abstract the http communication in form of html and represent as gui. Browsers are indeed, very, very complex.
Factorio was inspired by minecraft tech mods. My favorite minecraft mod is gregtech. It adds the most complexity of any mod I know of, but it’s balanced in a rewarding way. Higher tier setups need more factory to produce, but also produce squared gains (each power tier goes up by a factor of 4). The endgame is fusion for both power and alchemy. It’s great stuff, but eventually one has seen it all.
If you really want to see an offender of complexity for complexity’s sake: check out gregtech new horizons. They maintain a minecraft modpack based around needing gregtech recipes for all other mods. On paper that’s great. Hell, even I made a pack like that for personal play. They go pretty far with it though, to the point that the maintainers seem to have an expectation of grinding endlessly and never reaching the highest tiers. An outsider might dismiss it as chasing a dragon.
I actually haven't completed all that many of the packs I play, e.g. I finished Age of Engineering (even meticulously upgrading all my storage to infinity though I knew I'd probably never use it) but I didn't technically finish Agrarian Skies (I had a few of those stretch goal quests left) or Project Ozone 2 (got bored during the last of my singularities) or even Compact Claustrophobia (I've run it twice, I escape, and then I tend to lose interest before getting to the Moon)
I recently finished Star Factory and I realised that on the one hand it was nice to be able to look at it and say yup, I have ticked every box, almost anything you could want my setup now produces in unlimited quantities -- but on the other hand of course because it's so small it also felt cramped. I had to use very obviously bad solutions because the better options just weren't available in the pack.
One problem I had in Factorio was that it seemed like it was just doing one thing over and over, with different dress up - whereas I like how Minecraft packs teach me both new things I need to do, and entirely new ways to solve problems. Writing a Predicate that automatically processes my Astral Sorcery crystals goes from an idea that I'm obviously not the first to have, to something I can do almost by reflex... and then a pack says too bad, no Integrated Dynamics so figure out a different way.
The other problem I had is that I like to ignore our universe's rules, I like infinitely renewable everything, sure that's unrealistic but it's a video game. My Minecraft wins are generally powered by something ludicrous, like a single inexplicably efficient solar panel beaming energy from a world of eternal daylight, or a closed box which is somehow producing and burning unlimited amounts of Ethylene made from nothing. Factorio clearly doesn't want such shenanigans.
Constant learning does keep modded minecraft fresh. That’s why I eventually stopped playing: I had sufficiently seen it all.
One thing that really allured me towards the end was the idea of voxel layouts. I found it fun to optimize pipe layouts between heat exchangers and boilers to maximize throughout and minimize resource cost.
Factorio has similar feelings with 2D layout optimization, but it feels comparatively simplistic. There is also never a crunch for resources in factorio. “Oh I need more iron” is very different than “I just spent an hour hunting down a chrome vein and I better carefully pick what I’ll make next”. This is a rather hardcore game mechanic and I can see it being very niche.
I think a lot of the appeal comes from reducing complexity, not adding it.
My first playthrough was a rube-goldberg spaghetti mess. Scaling out specific resources near the end became a very painful process.
I'm in my second playthrough, and the goal is to build a factory WITHOUT all the complexity. How can I cleanly scale out resource production without things becoming a hot mess? How can I build flexible re-usable subsystems that don't restrict systems downstream?
Solving simple problems with complex solutions is one thing (over-engineering) but solving a complex problem with an elegant solution is much harder. And factorio is full of complex problems.
My biggest problem with Factorio is that after a few hours it starts feeling like programming, which is why it attracts a lot of programmers, but it lacks any tooling or QoL features that remove some of the frustrations of programming.
I can't add tests to ensure that refactoring my belt system doesn't break some process on the other side of the map.
I can't place a breakpoint to trigger a debugger and step through a tricky piece of logic.
I can't raise exceptions on unexpected behavior and handle it in a sane way.
Some of these are contrived examples and I can't imagine what the UI would look like, and they might be achievable via debug mode or some mods, but I haven't explored much outside of the base game.
So as the factory grows (and it must grow!) the game doesn't have any mechanisms to help you deal with the complexity. After a while it becomes a chore to manage, and I usually end up thinking that I'd rather enjoy programming instead. Which after spending a work day doing at my day job, I rarely have the motivation to do in my spare time, and when I do, I'd rather invest it on side projects than on Factorio.
Still, it's one of the greatest games ever made, and the thrill of watching it all work when it does work is exhilirating, much like programming. :)
Which isn't to say there's anything wrong with the game. It actually felt kind of weird to not recommend it since it was a pretty darned good execution of what it set out to be, I just couldn't ever actually suggest to someone that they play it. Either they wouldn't like dealing with the needlessly ever increasing in complexity goldbergian monstrosity, or worse they actually would.
I think the game's popularity among developers highlights a core problem with our industry. Look at Factorio, then look at all of the over engineering, the layers upon layers of abstraction, the obsessive need to keep making software larger and more complicated only to eventually tear it down and rebuild the exact same thing with the new-hotness widgets...