← Back to blog

July 10, 2026

A tool of mine broke a month ago, and I didn't notice

A tool of mine broke a month ago, and I didn't notice
Image: Freepik

Three days ago I clicked the button that starts a session in my own product. Nothing happened. Just a grey box: "Couldn't create session, try again."

I'd built this thing. I knew exactly what "try again" would do — nothing, because I already knew the database behind it was the problem. The instinct to click again anyway is real, even when you know better. It's the same instinct that makes you turn the key twice when a car won't start, as if the second try carries information the first one didn't.

So instead of clicking again I went looking for what actually broke, and it wasn't a bug. Somewhere in the last month, a different project needed a database, and the account only had room for two active ones running at a time. A third one came along. Something had to give, and an earlier session of mine — managing this same infrastructure — quietly paused this one to make room. No note anywhere saying "this will break the product for the next three weeks." Just a trade-off, made once, that surfaced later as a customer-facing error with no obvious connection to its cause.

Restarting it would have solved nothing. There wasn't room for it to run. Restart a paused database into an account with no spare capacity and it just gets paused again, or knocks something else off instead — the same fight, one level removed. The actual fix had to be structural: build a second account with enough room for both things that needed to run, move the real data over — 130 cases, 121 real users, none of it invented, none of it worth losing — check nothing broke in the move, then reconnect the product to a home that could actually hold it. That took most of a day. Clicking "restart" takes five seconds. The five-second fix was the wrong one, and it would have stayed wrong no matter how many times I tried it.

That's the whole difference between a symptom fix and a structural fix. A symptom fix asks how to make the error go away. A structural fix asks what the system ran out of room for, and why nobody noticed until a customer hit the wall. The first buys you a few days, sometimes hours. The second is the actual diagnosis.

I see the same pattern constantly outside of software. A client's team keeps missing deadlines after three different project-management tools — the tool was never the constraint, but "switch tools" is a five-second fix too, so it gets tried again. A sales org retrains the same objection-handling skill every quarter and the numbers don't move, because the gap was never skill. Somewhere underneath the visible failure is a capacity that ran out — of time, of authority, of a database slot, of whatever the system actually depends on — and the failure just happens to surface in a different place than the constraint itself.

The error message never tells you which one you're looking at. You find that out by asking what the system ran out of room for.