A quiet ops room at night. A wall of dashboards shows Systems Operational with every service healthy and flat, steady graphs, empty chairs sit at the desk, and a metronome, a mug and a notebook reading No Incidents rest on the table in front of a window over the city. Boring production working as intended.

Boring Software1377668

By

On this page

Boring software doesn't mean the software itself is boring. The thing you build can solve a hard problem with a clean design or a clever workflow, and it can be a piece of engineering you're proud of. It can even be fun, or as my granddaughter Leni would say, satisfying. The part that should be boring is operating it.

We don't talk about that part nearly enough. Teams put a lot of care into how software gets designed, reviewed, and shipped, and far less into what happens once it's running in production and people depend on it, which is where it finally gets tested.

Shipping Is Where Reality Starts Grading You

I have seen plenty of software that was exciting to build and miserable to operate. The demo worked, the architecture diagram looked fine, and the team hit the date, so everyone felt good for about thirty minutes.

Then the support tickets started.

The deployment pipeline turned fragile, and rollback turned out to be possible in theory and terrifying in practice. The one person who understood the weird edge case went on vacation, a customer hit the path nobody thought would matter, and somebody got pulled away from dinner, a weekend, or their kid's event to fix something that should never have broken. What the team actually shipped was debt with a delayed invoice.

The common mistake is treating the release as the finish line, when shipping is only the point where your assumptions start getting graded.

A lot of teams optimize for getting the thing out the door, and I understand why. There are dates, there are customers waiting, and there are leaders asking for progress, and nobody wants to be the person saying "We need more time" when the feature appears to work. So the team makes trade-offs that look sensible on the day. They skip some automation because the manual step is easy enough for now, and they put up with a flaky deployment process because only two people run it. Rollback goes untested because the change is small. Ownership stays fuzzy because everyone knows who usually handles it, one more special case goes in because the release is close, and the branch stays alive another week because merging now would be inconvenient. None of those decisions looks insane on its own.

Production Experiences Your Decisions as a System

Production gets all of those decisions at the same time, though, and it adds them up. By then the skipped automation has become tribal knowledge, and the flaky deployment has made everyone nervous about deploying. The untested rollback is now an incident. Because ownership was fuzzy, the war room is full of people asking who owns the service, while the special case has quietly attracted a second special case and the branch that stayed open another week has turned into everyone else's merge problem.

Boring Operation Has to Be Engineered

Boring operation means the system behaves the way people expect it to. Deployments are routine and rollbacks have been practiced. The logs tell you something useful, an alert means somebody needs to act, and ownership is clear enough that the people supporting the system don't need memory, heroics, or luck to get through a bad night. None of that happens by accident; somebody engineered it.

Mostly it comes from asking the boring questions early, before production asks them for you, even when they feel like paperwork to someone who wants to ship. Who owns this after it ships, and how will we know it's healthy? How do we deploy it safely, and how do we roll it back? What happens if a dependency is slow, if the data is wrong, if the job runs twice, or if only half the rollout succeeds? And what is going to wake someone up at 2 a.m., and what does support need to know before that happens?

You Pay Up Front or You Pay in Production

The best engineering organizations I have seen treat operations as part of the design instead of a cleanup activity, because every shortcut gets paid for somewhere. You can pay up front with tests, automation, and clear ownership, or you can pay later with incidents, customer pain, and people losing parts of their personal lives to problems anyone could have predicted.

The later payment almost always costs more. By then the customer has already felt the failure, the team has been pulled off planned work to fix it under pressure, and the fix has to go into a system that is already misbehaving.

Boring Is Not Overbuilding

None of this means every system needs gold-plated infrastructure, or that a small feature needs a committee, a platform team, and three weeks of design review. Overbuilding is its own failure mode. Plenty of production pain comes from systems made too clever by people trying to prove how smart they were, and boring software usually heads the other way, toward fewer moving parts and nothing that looks like complexity wearing a safety vest.

In practice it looks like a simple deployment path, short-lived branches, and feature flags that get removed once they've done their job. It looks like tests that catch mistakes before a customer does, a merge queue when a broken main is costly, and a runbook that someone other than the author can follow.

A lot of engineers like solving hard problems, and I do too. But some of the most valuable engineering work is fixing a problem once so it stops coming back, and that work rarely looks impressive in a demo or produces a flashy architecture diagram. The team just notices, a few months later, that the thing they used to dread has stopped happening.

Bad Operations Consume People

There's a human side to this that never shows up in the ticket count. Bad operations make teams afraid of their own deployments and wary of touching anything that currently works. Vacations turn into "text me if anything happens," and evenings and weekends start to feel conditional. The person who saves the day gets the credit, and the broken system that made saving the day necessary gets to stay exactly as it was.

You cannot scale heroics.

Leaders Set the Incentives

Leaders set those incentives. If hitting the date is the only thing anyone gets measured on, teams learn to hit the date and push the pain downstream, and if nobody asks about rollback, support, or observability, those become optional. Most outages are process failures wearing technical clothes, and writing each one up as an isolated technical failure means the process failure underneath survives to cause the next one.

Asking who made the bad commit is usually too small a question. A mature team looking at production pain wants to know why the system depended on one person remembering one manual step in the first place.

The Goal Is Boring Production

What I want is production that's stable enough for people to do good engineering without living in a constant state of interruption. Deployments feel normal. Incidents are rare, and when they do happen they're understandable and fixable, and nobody has to open the meeting by asking who owns the problem. The software just works.

That phrase sounds naive to anyone who has operated software for a living, since nothing just works by magic. It works because people made a thousand small decisions that reduced surprise. They removed sharp edges, wrote down the recovery steps, and practiced the rollback before they needed it. They picked boring where clever wasn't needed, and they treated production as a customer rather than the place where unfinished thinking goes to become somebody else's problem. Boring production is a feature, for the customers who get a system they can rely on and for the engineers who get to operate it without giving up their evenings to avoidable failures.

Build it to be as clever and satisfying as you like. Once it's in production, it should sit in the background doing its job while people live their lives, and the good feeling from ship day should last a lot longer than thirty minutes.

Frequently asked questions

What does "boring software" mean?

It means operating the software is uneventful. The thing you build can be clever, elegant, and satisfying. What should be boring is running it, with routine deployments, practiced rollbacks, clear ownership, and no reliance on memory, heroics, or luck.

Isn't software done once it ships?

No. Shipping is the point where reality starts grading your assumptions. The support burden, the fragile pipeline, the rollback path, and the on-call pain all show up after release.

Why do reasonable trade-offs cause so much trouble?

Because production gets all of them at once and adds them up. A skipped automation becomes tribal knowledge, a flaky deploy makes people afraid to deploy, an untested rollback becomes an incident, and a long-running branch becomes everyone else's merge problem. Each one looked sensible on the day it was made.

Does boring software mean overbuilding everything?

No. Overbuilding is its own failure mode, and a lot of production pain comes from systems made too clever. Boring looks like a simple deploy path, short-lived branches, feature flags that get removed once they've done their job, and runbooks someone other than the author can follow.

Why is paying for quality later more expensive?

By the time that bill arrives, the customer has already felt the failure, the team has been pulled off planned work to fix it under pressure, and the fix has to go into a system that is already misbehaving.

What is leadership's role in boring production?

Leaders set the incentives. If hitting the date is the only thing that counts, teams hit the date and push the pain downstream, and if nobody asks about rollback or ownership, those become optional. Most outages are process failures wearing technical clothes, so a mature team asks why the system depended on one person or one manual step instead of asking who to blame.

Conversation

    Log in to join the conversation.

    © 2026 ABWaters. Thinking out loud.