Why Your SLOs Are Lying to You in AI-Augmented Systems (And What to Measure Instead)
Why Your SLOs Are Lying to You in AI-Augmented Systems (And What to Measure Instead)

It was 3 AM when I got paged. Our AI-powered search service was showing a perfect 99.9% success rate and p99 latency well under our 500ms target. Every dashboard was green. But customer support was flooded with complaints about “useless” and “broken” search results. Users were screaming on Twitter. Revenue-impacting features were failing silently.
The system wasn’t down. It was worse than down. It was confidently returning garbage while all our reliability metrics told us everything was fine.
That night, I learned that the SLO framework we’d relied on for years — the one that had served us so well through hypergrowth, traffic spikes, and multiple rewrites — had become a dangerous lie. Not because SLOs were wrong, but because the assumptions underneath them had fundamentally changed the moment we introduced AI into our critical path.
The Illusion of Traditional Reliability
For a decade, we’ve measured backend reliability with three golden signals: latency, error rate, and availability. These metrics made sense because our systems were deterministic. Give the same input twice, get the same output. A database query either succeeds or fails. An API call returns 200 or 500. Response times cluster around predictable percentiles.
This determinism let us build meaningful SLOs. We could say “99% of requests will complete in under 200ms” and actually know what that meant for user experience. If latency spiked or error rates jumped, we knew users were having a bad time. The metrics were honest proxies for quality.
But AI systems — specifically, LLM-augmented backends — broke this fundamental contract. They introduced three qualities that make traditional SLOs nearly useless: non-determinism at the core, variable compute requirements that can’t be predicted from input size, and a new failure mode I call “successful garbage.”
Successful garbage is when your API returns a 200 status code, your latency is acceptable, your error rate is zero, but the actual content returned is wrong, hallucinated, off-topic, or otherwise useless to the user. Traditional monitoring sees success. The user sees failure. Your SLOs lie.
How We Got Here (And Why It Seemed Fine at First)
When we first integrated GPT-4 into our search pipeline, we did what every responsible engineering team does: we wrapped it in observability, set SLOs based on our existing framework, and monitored the hell out of it. We tracked API call success rates to OpenAI. We measured end-to-end latency. We set up alerts for when p99 crossed our thresholds.
For the first few weeks, everything looked great. Our SLO was 99.5% availability with p95 latency under 800ms. We were hitting 99.8% and 650ms respectively. The dashboards were beautiful. Management was happy.
Then the complaints started trickling in. Users saying search results were “weird” or “irrelevant.” Not broken — the features worked. Just… wrong. We investigated a few cases manually and found that yes, occasionally the model would return something off-base, but that’s the nature of LLMs, right? We added some prompt engineering, tuned the temperature, moved on.
The trickle became a flood. We dug deeper and discovered something horrifying: approximately 12% of our “successful” AI-augmented responses were functionally useless or actively misleading. But our error rate SLO showed 0.2% errors. The 11.8% gap between technical success and functional success was invisible to every system we had.
We were flying blind while staring at a dashboard full of green lights.
The Token Generation Time Trap
The first crack in traditional latency SLOs appears when you realize that token generation in LLMs is inherently variable in a way that database queries never were. A SQL query against an indexed table has roughly predictable performance characteristics. Sure, there’s variance, but it’s bounded and usually explainable by factors like table size, index freshness, or concurrent load.
LLM token generation time depends on factors you cannot control: model load on the provider’s infrastructure, the semantic complexity of the prompt (not just its length), the randomness in the generation path itself, and the length of the response, which you often can’t know until generation is complete.
We set our initial p99 latency target at 1000ms based on early testing. Within two weeks, we had to raise it to 2500ms because real-world usage included longer, more complex queries that legitimately required more tokens. Then we noticed that even identical prompts could vary by 500ms or more in response time depending on time of day and mysterious backend factors at our LLM provider.
So we raised the threshold again. And again. Eventually, our p99 latency SLO was so high that it became meaningless. It would only fire if the API was essentially down. We’d optimized away the signal.
The deeper problem: latency tells you nothing about whether the response was worth waiting for. A 200ms response that’s completely wrong is worse than a 2000ms response that’s correct. But traditional latency SLOs can’t distinguish between them. They measure the cost, not the value.
When Error Rates Stop Meaning Anything
Classic error rate monitoring assumes a binary world: requests either succeed (2xx status codes) or fail (4xx/5xx). This worked beautifully when backends were deterministic processors. A payment API either charges the card or returns an error. An inventory system either reserves the item or tells you it’s out of stock.
AI responses aren’t binary. They exist on a spectrum from “perfect and exactly what the user needed” to “technically coherent but completely useless” to “actively hallucinated misinformation.” And here’s the killer: from a traditional backend perspective, all of these return 200 OK. The HTTP transaction succeeded. The API responded. Tokens were generated and returned.
We started manually reviewing a sample of “successful” AI responses and bucketing them. Roughly 70% were good to great. About 18% were mediocre but acceptable — they answered the question but not optimally. About 12% ranged from useless to dangerously wrong. That 12% was invisible to our SLOs.
One particularly bad incident: our AI-powered code assistant started suggesting SQL injection vulnerabilities in response to security-related queries. The feature was “up” by all our metrics. It was fast, it had zero errors, availability was perfect. But it was actively harming users. We didn’t discover it through monitoring — we discovered it through a furious Slack message from a security engineer who’d almost committed the suggested code.
Error rate SLOs measure technical failures. In AI systems, the most dangerous failures are semantic, not technical.
The Silent Degradation Problem
Here’s a failure mode that will haunt your AI-augmented systems: silent degradation. This is when model quality slowly erodes in ways that don’t trigger traditional alerts.
Maybe your LLM provider silently shifts traffic to a faster but slightly less capable model version to manage their costs. Maybe your prompt template stops working as well after a model update, but not catastrophically — it just gets 15% worse. Maybe context window limitations start clipping important information as your data grows, but not in a way that causes errors, just worse results.
We experienced this firsthand when GPT-4’s behavior shifted after an update. Our accuracy (measured manually, because we had no automated way to track it) dropped from 88% good responses to 76% over the course of a week. Our SLOs never budged. As far as our monitoring was concerned, nothing had changed. We were meeting all our targets.
The only reason we caught it was because our customer satisfaction scores tanked. We had to work backward from user complaints to engineering metrics, which is exactly the wrong direction. Your monitoring should tell you before your users do.
Traditional SLOs assume that if your system is healthy by technical metrics, users are happy. In AI systems, these two things can diverge catastrophically.
What Senior Engineers Learn the Hard Way
After rebuilding our reliability framework three times and getting paged for “successful failures” more than I care to admit, I’ve learned that AI-augmented systems require a fundamentally different approach to reliability measurement. You can’t just add some latency buffers and call it done. You need to measure what actually matters: outcomes, not outputs.
The insight that changed everything for me: traditional SLOs measure system health, but AI systems require measuring system usefulness. Health is necessary but not sufficient. You need a new layer of outcome-based reliability metrics that answer the question “did this response actually help the user accomplish their goal?”
This isn’t academic. This is about having honest conversations with your monitors. If your dashboards can be green while users are suffering, your dashboards are worse than useless — they’re giving you false confidence.
Measuring Correctness in a Non-Deterministic World
The hardest problem is defining what “correct” means when your system is fundamentally probabilistic. For a search API, correct is obvious: return relevant results. For a code completion tool, correct means syntactically valid, semantically appropriate, and ideally idiomatic. For a customer support bot, correct means accurately answering the question without hallucinating policy details.
But how do you measure these automatically, at scale, in production?
We built what we call a “shadow evaluation pipeline.” For a sample of production traffic (we started at 5%, now run at 20%), we run additional validation:
For search results, we measure relevance using a combination of a smaller, faster model as a judge and user interaction signals. Did they click the result? Did they immediately bounce back and try a different query? For code suggestions, we parse the output and verify it’s at minimum syntactically valid in the target language. We also track whether suggestions are accepted or rejected by users. For conversational AI, we use a separate LLM call to evaluate if the response is on-topic and factually grounded in our provided context.
This isn’t free. Shadow evaluation adds cost and complexity. We’re making additional LLM calls just to evaluate other LLM calls. But the alternative — flying blind — is more expensive. One incident where your AI feature suggests something dangerous or embarrassingly wrong will cost more in reputation and trust than months of evaluation overhead.
The key insight: you need automated quality gates, not just technical health checks. These quality gates measure properties like relevance, factual consistency, topicality, and safety. They’re probabilistic, not binary, so you track them as distributions and set thresholds for acceptable degradation.
Outcome-Based Reliability: The New North Star
What we eventually converged on is a two-tier SLO system. The first tier is traditional: availability, latency percentiles, and technical error rates. These tell you if the system is mechanically functional. They’re table stakes.
The second tier measures outcomes. We call these Outcome-Based Reliability Indicators (OBRIs), because they’re not quite SLIs in the traditional sense. They include:
Usefulness rate: What percentage of AI responses are actually useful to the user? We measure this through a combination of explicit feedback (thumbs up/down), implicit signals (did they retry immediately, suggesting the first answer was bad?), and automated evaluation using judge models.
Semantic latency: Not time to first token, but time to useful answer. If a user has to make three requests because the first two were garbage, your real latency is 3x what your p99 tells you. We track the distribution of requests per successful outcome.
Degradation velocity: How quickly is quality changing? We compare rolling windows of usefulness rates and alert on sudden drops or gradual erosion. A 5% drop in usefulness over 24 hours triggers an investigation, even if all technical SLOs are green.
Safety boundary violations: Automated checks for hallucinated facts, policy violations, or outputs that match known failure patterns. This is binary — either it happened or it didn’t — but it’s crucial for preventing catastrophic failures.
These metrics are harder to measure than status codes and response times. They require instrumentation beyond your typical logging and metrics pipeline. They cost money to compute. But they tell you what’s actually happening with your users.
The Observability Stack You Actually Need
Implementing outcome-based reliability required us to rethink our entire observability strategy. Our existing stack was built around logs, metrics, and traces — all designed for deterministic systems. We had to add new layers.
First, we implemented request-scoped context tracking that follows not just the technical path of a request (like distributed tracing) but also the semantic content at each stage. When an AI request comes in, we log the sanitized prompt, the model used, key parameters, the full response, and most importantly, we assign it a unique evaluation ID.
That evaluation ID lets us asynchronously run quality checks without blocking the user response. We return the AI-generated content immediately, then in parallel, we run it through our evaluation pipeline. Results get written back to a separate analytics store that feeds our OBRI dashboards.
Second, we built a lightweight feedback loop into every AI-powered feature. Not annoying popups asking “was this helpful?” constantly, but contextual, low-friction ways to signal success or failure. For search, that’s implicit: did you click, did you bounce? For code suggestions: did you accept it? For conversational features: explicitly asking for feedback only when our automated eval scores are borderline.
Third, and this was the hardest sell to leadership, we allocated budget for ongoing evaluation. We have a small team that continuously spot-checks production AI outputs, labels them for quality, and feeds that data back into our evaluation models. This grounds our automated evals in human judgment and prevents drift.
The result is an observability stack that costs about 40% more than our traditional setup but has caught three major quality regressions before they meaningfully impacted users. That alone justified the investment.
Common Misconceptions That Will Hurt You
There’s a dangerous belief I see in a lot of AI integration discussions: “We’ll just monitor the LLM API the way we monitor any third-party service.” This is catastrophically naive. An LLM provider going down is not your main risk. Your main risk is the LLM being up and confidently returning nonsense.
Another misconception: “Users will tell us if the quality is bad.” Some will. Most won’t. They’ll just stop using the feature and assume your product is flaky or low-quality. By the time complaint volume reaches actionable levels, you’ve already lost trust at scale.
The most insidious one: “We can’t measure quality automatically, so we’ll just have to accept higher uncertainty.” Yes, measuring semantic quality is harder than measuring status codes. But hard doesn’t mean impossible. If you’re shipping AI features without quality measurement, you’re not engineering — you’re gambling.
How to Think About This Going Forward
If you’re integrating AI into your backend systems — and if you’re not now, you will be soon — start by accepting that your existing reliability framework is insufficient. That’s not a criticism of your team. It’s just reality. The tools and practices we built for deterministic systems don’t translate directly.
Here’s the mental model I use: traditional SLOs measure the cost of service delivery. Outcome-based reliability measures the value of what was delivered. Both matter. Neither alone is sufficient.
When you’re defining SLOs for AI-augmented systems, ask these questions: If this metric is green but users are unhappy, what’s wrong with the metric? What would I measure if I could see through the user’s eyes? How do I distinguish between “technically successful” and “actually useful”? What’s my feedback loop between user outcomes and engineering visibility?
Design your instrumentation to answer these questions from day one. Retrofitting outcome-based observability after you’ve scaled is exponentially harder than building it in from the start.
And most importantly: be honest with yourself about what you’re not measuring. If you can’t automatically evaluate quality, instrument for human evaluation at sample rates. If you can’t measure usefulness directly, find proxy signals. Uncertainty is fine. Pretending you have certainty when you don’t will destroy trust — in your systems, and in your judgment.
The Real Cost of Fake Reliability
I’ll leave you with this: that 3 AM page I started with? We eventually tracked the root cause. Our LLM provider had quietly rolled out a model optimization that made responses faster but less accurate for our specific use case. Their SLOs were fine. Our technical SLOs were fine. Our users were getting garbage.
We lost about 8% of our active users in the two weeks before we caught and fixed it. Some came back after we resolved the issue. Many didn’t. That’s the real cost of reliability metrics that lie to you — not downtime, but slow erosion of trust that you don’t see until it’s too late.
AI-augmented systems are powerful. They let us build features that were impossible a few years ago. But they require us to rebuild our reliability practices from first principles. The SLOs that served us well for decades are now vanity metrics. The real question isn’t whether your AI service is up. It’s whether it’s any good.
Measure that instead.
References
- Google SRE Book — Service Level Objectives — The foundational text on traditional SLOs, still essential reading but written before LLMs changed the game
- Hamel Husain — Your AI Product Needs Evals — Practical guide to building evaluation systems for LLM applications
- Anthropic — Measuring and Improving LLM Reliability — Research perspective on automated quality measurement
- Shreya Shankar — The Untold Story of Operational ML — War stories about measuring ML system quality in production
- Eugene Yan — Patterns for Building LLM-based Systems — Includes discussion of monitoring and evaluation patterns
- Honeycomb — Observability for LLM Applications — Practical observability approaches for AI systems
메타데이터
- post_id
- d7f7a8ca3be6
- slug
- why-your-slos-are-lying-to-you-in-ai-augmented-systems-and-what-to-measure-instead-d7f7a8ca3be6
- url
- https://medium.com/@vitiya99/why-your-slos-are-lying-to-you-in-ai-augmented-systems-and-what-to-measure-instead-d7f7a8ca3be6
- canonical_url
- https://medium.com/@vitiya99/why-your-slos-are-lying-to-you-in-ai-augmented-systems-and-what-to-measure-instead-d7f7a8ca3be6
- author_url
- https://medium.com/@vitiya99
- status
- ok
- fetched_at
- 2026-06-13 12:55:53