DEV Community

Om Keswani
Om Keswani

Posted on

The Silent Outage: When Your System Is Up but Nobody Can Use It

At 3 a.m., every dashboard in your monitoring stack is green.

CPU is fine. Memory is fine. The load balancer is healthy, the database is responding, the p99 latency is sitting comfortably under its threshold. If you got paged right now, you'd be annoyed, because nothing is wrong.

And yet, somewhere out there, a customer is staring at a spinner. Another one is getting a 200 response with an empty array where their data should be. A third one tried to save something, saw the save button go grey, and assumed they did something wrong.

None of them will file a ticket. They'll just close the tab.

"Up" is the wrong question

We built our entire monitoring culture around a binary: is it up or is it down? That question made sense when infrastructure failed loudly — a crashed process, a dead disk, a dropped connection. Machines used to fail in ways that were obvious.

Now they fail in ways that are polite.

The service returns 200. The response body is valid JSON. It's just wrong. The feature flag flipped and 20% of users are seeing a broken variant. The third-party API you depend on started returning empty results instead of an error, so your UI dutifully renders an empty state that looks exactly like "you have no data."

Your health check hits /health, gets a cheerful {"status": "ok"}, and goes back to sleep. It never asked whether a user could actually do anything.

The outage nobody declared

Here's the part that stings: silent outages can run for days.

Not because nobody noticed — because nobody noticed systematically. A handful of users complained in a support channel. Support shrugged it off as user error. An engineer saw a weird Slack message, thought "that's odd," and got pulled into something else. The numbers in your analytics show a small dip in engagement, which is well within normal variance, so it doesn't trip anything.

Meanwhile a full week passes where your product is technically available and practically useless for a slice of your users, and you find out because someone finally posts about it publicly.

That's not a monitoring failure. That's a definition failure. You're measuring the system. You should be measuring the outcome.

Why users go quiet

This is the part engineers consistently underestimate.

Users don't report silent failures. They assume they're the problem. They assume it's their browser, their connection, their account, their fault. Filing a bug report costs them time and makes them feel stupid, and if the thing is broken-but-pretending-to-work, they have no proof anything is broken at all.

So they leave. Quietly. And they don't come back, because the worst kind of broken product is one that looks like it's working. They don't think "your service is down." They think "this tool doesn't work for me," and they go find one that does.

An outage that announces itself costs you a night. An outage that hides costs you customers you never hear from again.

What actually catches these

A few things that work, and none of them are glamorous:

Test the journey, not the endpoint. Don't just check that the API responds. Check that a user can log in, find their data, and complete the one action that matters most. If you can't script that, you don't fully understand your own product.

Assert on content, not just status codes. A 200 with an empty body is a failure. A page that renders without the user's name on it is a failure. Teach your checks the difference between "no results" and "should have results."

Watch for silence. A drop in successful actions is an alert. A spike in empty responses is an alert. Your users' absence is data.

Use your own product. Nothing catches silent failures faster than an engineer who actually clicks through the thing they built last quarter. It's embarrassing how much this finds.

The uncomfortable truth

Your system was up. Your customers couldn't use it. Those two statements can be true at the same time, and your dashboards will never tell you.

The green light doesn't mean everything's fine. It means the things you thought to check are fine. The silence in between is where your users are quietly giving up.

Top comments (0)