**coltonlewis.name: Factorio And Software Engineering Flaws [Org] All L1 (Kernel Hacker Mode) ---

Factorio And Software Engineering Flaws

Factorio

If you've lived under a rock the past decade and don't know what Factorio is, it's a automation game where you crash land on an alien planet and have to build a factory to mine the resources and build increasingly advanced gadgets culminating in building a rocket ship to leave the planet. That is the base game, but for many people the factory is its own reward. There are so many ways to automate every little thing and each new factory can form a work of art.

This game has a lot in common with software engineering. Software engineers tend to like it, some so much so that they put thousands of hours into it and it consumes all of their free time. The similarity goes so deep that I've heard tales of engineers willing to hire someone if they can put together a good Factorio factory.

My Play

I only really discovered the game in 2023 and haven't put much time into it by most standards, only about 80 hours, but recently I've been thinking about picking it up again. I'm playing the tutorial again to refresh my memory of the controls. But when I played it before, I never beat the base game, and since Factorio shares a lot of similarities with software engineering, I think my difficulty beating the game maps to some of the same difficulties I have as an engineer.

Difficulties

On balance these qualities make me a good engineer, but Factorio shows how I frequently take them too far.

Desire For Elegance

I love creating beautiful designs and systems. I dislike kludges. Factorio and software share the qualities that you are mainly limited by your imagination. There are uncountable options for how to do anything you can think of. This makes it easy to get off into with weeds. And when I do get off into the weeds I eventually get tired, bored, and want to throw it out and start over.

The preceding paragraph applies to my Factorio saves and a huge number of my side projects. I don't think I'm alone in that.

Loss Aversion

While I quickly become disgusted with designs that are less than perfect, I mourn the loss of the hard work that was required to build those designs in the first place. I get caught in a trap between wanting to do better and not feeling like I have the patience to tear through my existing work and start again. Factorio is especially bad in this regard because of the biters. Though widely agreed by the player base to not be a huge challenge, they are just challenging enough to be annoying. When they destroy part of my base, I fall into despair. This can feel similar to subjecting my code to review by others, who will pick it apart.

As much as you try to take the view that nothing is personal, it feels personal because my time and effort was spent building something just to see it torn down.

Over Planning

Because of the first two difficulties, I sometimes fall into a spiral of over planning where I try to address every possible concern before it comes, but the number of possible concerns are infinite, so I end up wasting too much time on the planning stage instead of building and shipping. I want it to be right the first time and find it difficult to go back and iterate.

Hopelessness

Because the number of possible concerns is infinite and I'm trying my best with limited tools and brainpower, the final and worst difficulty to overcome is hopelessness. Though it doesn't happen often and I'm exaggerating a bit, sometimes I grow very frustrated with the seeming impossibility of writing code or building a factory that will satisfy me. It's times like that I want to quit and go sleep on the couch for the rest of the day. Sometimes the feeling is actually cured by a nap, but sometimes not.

Re-frame

Although I have these problems, it is possible to watch myself and avoid them. Even when I don't in Factorio, it's just a silly game anyway. I play it for fun and if it isn't fun I can stop playing. If I can't avoid these problems in my work, well I'm fortunate I've found a domain where going slow and planning a lot with low tolerance for mistakes is usually rewarded, and the times it isn't rewarded are the times I learn and improve the most at my craft.