Drowning in Data: How Your Observability Stack Became the Incident It Was Supposed to Prevent
Photo: engineer overwhelmed by data screens monitoring dashboard dark office, via images.template.net
There's a very specific kind of 3 a.m. panic that happens when your on-call engineer is staring at a Grafana dashboard with 47 panels, a Slack channel firing alerts every six seconds, and absolutely no idea which signal is real. Your system is logging everything. You've instrumented every function call, every DB query, every HTTP handshake. You did the work. And somehow, you're still flying blind.
This is the observability paradox: the more data you collect, the harder it becomes to see anything useful. It's not a hypothetical — it's a pattern that plays out at companies of all sizes, from seed-stage startups running on a single EC2 instance to mid-size SaaS platforms burning $40k a month on Datadog ingestion.
The Volume Problem Nobody Talks About in the Sales Demo
Observability vendors love to talk about "full-fidelity tracing" and "zero sampling." What they don't mention in the pitch deck is what happens when you take that advice literally across a production system handling 10,000 requests per second.
You end up with log pipelines that consume more engineering bandwidth to maintain than the services they're supposed to monitor. You end up with storage costs that quietly balloon quarter over quarter — not because your product is growing, but because your log verbosity is. One mid-size fintech team we spoke with discovered they were spending more on log ingestion for a single microservice than they were on the compute that ran it.
At some point, the pipeline itself becomes a reliability risk. Fluentd configs drift. Kafka topics for log forwarding fall behind during traffic spikes. Your observability infrastructure starts generating its own incidents.
Alert Fatigue Is a Systems Failure, Not a People Failure
When engineers start ignoring alerts, the instinct is to blame discipline or culture. That's the wrong frame. Alert fatigue is an architectural symptom. It means your threshold configuration is producing so many false positives — or low-priority noise — that the human brain has correctly learned to discount the signal.
This isn't laziness. It's adaptation. Your team is doing exactly what evolution designed them to do: tune out repetitive stimuli that don't correlate with real consequences.
The problem is that buried inside the noise are the alerts that actually matter. The P0 that fires at the same severity as the "disk at 70% capacity" warning nobody's touched in eight months. The latency spike that gets lost in a flood of routine retry errors. By the time someone realizes the real fire is burning, it's been burning for 20 minutes.
Studies on incident response consistently show that mean time to detect (MTTD) gets worse as alert volume increases beyond a certain threshold. You're not buying faster incident response by logging more — you're buying slower.
The Engineering Tax You're Not Counting
Here's the cost that rarely shows up in an observability ROI conversation: the ongoing engineering labor to maintain the thing.
Somebody has to write the log parsing rules. Somebody has to update the dashboards when the schema changes. Somebody has to audit the alert configs when the team changes. Somebody has to figure out why the trace sampling rate is suddenly producing gaps in production. Somebody has to fight with the retention policies when the S3 bill spikes.
For a lot of teams, that "somebody" is a rotating cast of engineers who'd rather be building features — and who resent the time sink enough that the observability tooling slowly rots into a state of benign neglect. The dashboards stop reflecting reality. The alerts stop getting tuned. The whole thing becomes a museum exhibit of how the system used to work six months ago.
That's not observability. That's theater.
What Minimal Instrumentation Actually Looks Like
The teams that respond fastest to incidents aren't necessarily the ones with the most data. They're the ones who've been ruthlessly intentional about what they instrument and why.
A few principles that actually work in practice:
Start from user impact, not system internals. The most valuable signals are the ones that directly correlate with something a user experiences — error rates on checkout, latency on the auth flow, failed webhook deliveries. Everything else is supporting context, not the headline.
Use structured logging with purpose. Unstructured logs are expensive to store and nearly impossible to query at scale. If you're going to log something, log it in a format that's queryable, and log it because you've already thought about what question it answers.
Sample aggressively, and be honest about it. Not every trace needs to be captured at 100%. A 10% sample of healthy traffic tells you almost everything a 100% sample does, at a fraction of the cost. Reserve full-fidelity capture for error paths and slow outliers.
Treat alert configs like production code. They should be reviewed, versioned, and pruned on a regular cadence. An alert nobody acts on is worse than no alert — it's training your team to ignore the pager.
The Right Question to Ask Your Stack
Before you add another logging statement, another metric, another trace span — ask yourself what decision it enables. Not hypothetically. Concretely: if this data shows X, what do you do differently than if it shows Y?
If you can't answer that, you're not adding observability. You're adding storage costs and cognitive load.
The goal was never to see everything. The goal was to see the right things fast enough to act. Those are very different engineering problems, and conflating them is exactly how you end up with a $60k monthly Splunk bill and an on-call rotation that treats the pager like background noise.
Build the instrumentation your team will actually use. Prune the rest. Your incident response times will thank you — and so will your cloud bill.