February 5, 2025 · 2 min read
In praise of boring software
Why our most reliable systems run on PostgreSQL, Docker and Nginx, and what newer tools really cost you later.
Here is what we keep choosing: PostgreSQL, Docker, Nginx. None of it is interesting. All of it has run in production somewhere for a very long time, and that is the point.
We see this most clearly when something breaks. When Postgres acts up on a Tuesday afternoon, it is almost always our query, our index, our resource limit. We do not sit there and wonder if we hit some unknown bug in a database that shipped eleven months ago. The bug is ours, so we start looking in the right place. That sounds small. Over a year of incidents, it is not.
The same boring tools help when someone new joins. An engineer who has never opened our repo has very likely set up Nginx before, somewhere, for something. They read the config and mostly know what it does before we explain anything. The mature tool also comes with boring documentation, ten years of Stack Overflow answers, and the failure modes that other people already hit and wrote down. We get all of that for free.
What new tools really cost
We are not against new tools. We have shipped a few clever ones and enjoyed building each one. The problem is that the bill comes later, and it never comes at 3pm when you are rested and the office is full. It comes at 11pm when one person is on call and has to work out what the clever thing was doing before it stopped.
We once wrote a caching layer that really did help, and that exactly one of us could debug. That is a fine trade until that person is asleep, or has left. Choosing the interesting option is sometimes right. The honest question is whether it solves a problem the boring option cannot, or whether it just looks better in the commit log.