All Software Is Shit
It's not your fault if software is confusing. Also: the joys of Descript and Dwarf Fortress.
A nugget of wisdom primarily trapped in the world of software engineering
Most of us spend all day interacting with software. We work on our computers, keep in touch with friends on our phones, and relax watching Netflix, meditating with an app, or going for a run—while listening to Spotify and tracking our heart rate on a watch.
Software is everywhere. But frustratingly, most of it does not work all that well.
I have dealt with plenty of software problems over the years, but one stands out in memory as especially terrible. I used to be a touring guitarist, and for years I used the Voice Memos app on my iPhone to capture ideas for future songs. In that app, I had thousands of recordings spanning dozens of hours, and my entire creative process was built around going back through these recordings and stitching ideas together.
Then one day, a software update wiped out more than half of the recordings, seemingly at random, and just like that, I lost years of creative work.
You might have a similar story. And if not, I’m sure you’ve had plenty of experiences where computers behaved unexpectedly or showed you some indecipherable error message that made you so mad you wanted to punch the screen.
Modern life is full of these tiny confusing moments caused by technology. Apps crash. Data disappears. A notification on Twitter says you have five DMs, but when you tap it, only a single message appears.
It can be incredibly frustrating and may even trigger insecurity. "I must be doing something wrong. After all, those smart engineers at Google make hundreds of thousands of dollars a year to write all this code. Surely they wouldn't release something that was straight-up broken!"
But they would, and they do. To us engineers, none of this is a surprise because we have seen enough large-scale software systems under the hood to know they are—without exception—held together by duct tape and bubble gum.
So here's the open industry secret: all software is shit.
If something isn't working correctly, it's probably not your fault. All software is broken, at least to some extent.
How could this be? Well, first, human brains are just not made to write software. Speaking from experience, it is extremely difficult to pull an idea out of your head and convert it into instructions for a computer to follow. Writing code is like translating from English into a language spoken by perfectly rational aliens, but the aliens have this weird quirk where any time you slightly misspeak or say something remotely ambiguous, their heads explode.
I am a good enough engineer that companies pay me lots of money to teach courses to their engineers about how to produce fewer bugs. Even so, I cannot begin to tell you how many bugs have been discovered in code that I’ve written. All code has issues; the best we can do is try to reduce the number of issues.
Put simply: no one knows the right way to do this. The best programmers in the world write code that’s full of bugs and spend hours every day trying to understand why their code isn’t working how they thought it would.
As Ellen Ullman put it in her brilliant Life in Code, "Every single computer program has at least one bug. If you are a programmer, your work is guaranteed to have errors."
But there’s another reason why software is shit: even if a mythical engineer came along who could write flawless code, the modern software ecosystem makes it impossible for any code to work 100% reliably. I am not exaggerating when I say this.
When you visit Instagram, it takes tens of millions of lines of code for your ex’s engagement photo to show up on your screen. Of course, Instagram itself is enormously complicated. But for each line of code written by an engineer at Instagram, there are many thousands of lines of other code that had to be written by random people in the 90s so that apps and phones and the internet could exist, and all of that code is still running in the background, out of sight.
In order for you to sit on the toilet, staring at this gorgeous black-and-white engagement picture and wondering where it all went wrong, that image had to take an epic odyssey from your ex’s phone to Instagram’s computers, then journey again through thousands of miles of cables and your internet provider’s computers before it could end up on your screen.
The pieces of software to enable this were written independently over decades by tens of thousands of engineers. They must work together perfectly to reliably display that page on your screen. And, as we know, no software is written perfectly, so things often go sideways.
Seem complex? It is. The whole thing is a house of cards. What's surprising is not that things stop working sometimes, but that any of this works at all, ever.
(If you find this stuff interesting, I highly recommend this perspective-altering talk. It outlines the problem in much more detail and explores some of the scary long-term implications of building an entire society around a mountain of shit code that barely works and that no one understands.)
So there’s the peak behind the curtain. The world's engineers are trying to write good code, but it’s an impossible undertaking. Between the nature of the task of programming and the way the entire system is constructed, we can't be sure our code will always work.
The takeaway for you as a user of this software is that you shouldn’t be surprised when a website or an app is broken, and you definitely should not blame yourself.
The next time you encounter a bug, remind yourself: "It's not me. All software is shit."
A piece of software that sparks joy
Most software is so terrible that whenever I encounter a program that does what it's supposed to, I am overcome with a sense of awe and gratitude.
Recently, I had just that experience while Nat Bennett and I were putting together a video course on pair programming (which, by the way, you can check out here.)
To make the course, we created some slides, recorded ourselves talking about pair programming for a few hours, and then used Descript to edit down the best parts into about an hour.
Descript transcribes your video into a document using AI and lets you edit the video by modifying the resulting text. It sounds too good to be true, but to my surprise works exceptionally well!
During the editing process, I learned that I say "like," "yeah," and "um" approximately 30 times per sentence, and Descript made it effortless to remove those all and make myself sound much more eloquent.
It's so great that it makes me want to make more video content in the future, just for an excuse to use it again.
An indie video game I'm obsessed with
Dwarf Fortress is, by far, my all-time favorite game. It is a masterpiece, the deepest simulation ever created, built over 20 years with development still going strong.
In it, you lead a colony of temperamental alcoholic dwarves, building a fortress deep underground. Your goal is to stay alive. At this task, you will always fail, usually in delightful and unexpected ways.
For example, one of my first fortresses fell due to a sudden infestation of zombie weregeckos (like werewolves but geckos) which took over my fortress from within during a full moon, a scenario for which my defenses were woefully underprepared.
You've felt this game's effects even if you haven't played it. It was the inspiration for Minecraft and birthed the "colony sim" genre that now includes games like RimWorld.
For 16 years, it has been available for free online. However, the extremely lo-fi graphics and entirely keyboard-driven user interface made it so utterly inaccessible that learning to decipher what was happening onscreen could take many hours. For instance, this screenshot from Wikipedia’s Dwarf Fortress article shows a party of dwarves and their livestock gathered around a wagon stationed in the grass next to a mountain.
But finally, after years of anticipation, the so-called "Steam Release" is out: a paid version of the game with actual graphics, mouse support, and built-in tutorials. Here’s what a similar scene looks like now:
I could not be more thrilled. I'm about 20 hours into my first fortress, and it is everything I dreamed it would be and more. Words cannot describe how excited I am that this game is now accessible to a more general audience.
In honor of its launch, here are a few of my favorite pieces of Dwarf Fortress content.
This Noclip documentary provides an excellent overview of the game and its appeal, leading off with the most insane bug report I have ever heard.
IGN's review of the Steam release is fantastic and essentially says everything I've felt while playing it. I also loved this article from Polygon, which beautifully describes how impactful and unexpected its generated stories can be.
If you are interested in playing and want help getting oriented on the game, I recommend this free tutorial series and the book Getting Started with Dwarf Fortress. The quickstart guide on the Dwarf Fortress wiki is also great. These tutorials are for the old, keyboard-driven version of the game, but the underlying mechanics are identical, even if the controls are different now. They should provide a good starting point until new tutorials emerge centered around the new UI.
To me, this psychotic forum post may be the funniest piece of writing on the internet. It is written by someone who gleefully discovers that merperson bones (the bones of dead mermaids and mermen) are exceptionally valuable items to trade. Accordingly, he asks for help devising a reliable way to murder merpeople so he can sell their remains, and he is far too happy to be asking this question. Apparently, Tarn Adams (the sole programmer behind Dwarf Fortress) was so creeped out by this post that he decided to lower the value of merperson bones in future versions of the game to discourage this behavior.
my response to anyone telling me about the blockchain: think of the “long-term implications of building an entire society around a mountain of shit code that barely works and that no one understands.”!!
I remember this being one of the big realizations I had at [insert giant software company I don't want to be mad at me]. Every team I was on, they mythologized some other team/org in the company as being "the one" with good tech, good code, good processes. And then eventually you met someone who worked at "the one" and found out they felt like THEIR stuff was bubblegum and duct tape, but they mythologized some OTHER team. And eventually you realize just everybody felt whatever they were building sucked. And it probably did.
You should add a weekly Dwarf Fortress subplot update section