AI
Debugging the silent failures: why AI agents need deeper observability than traditional services
AI systems can return correct status codes and pass evaluations while still delivering wrong answers—making the old observability playbook obsolete.
The New Stack
Imagine deploying an AI-powered support agent that passes all your tests, evals, and code reviews. Then a customer calls: the answers are stale, or the product information is wrong. You diff the recent change, and everything looks plausible. But plausibility isn't proof.
This gap in observability is what AI systems expose. A conventional service fails visibly—a 500 error, a timeout, a dead dependency. An AI agent fails silently. It returns a 200 status, passes fidelity checks, and the user gets incorrect information anyway. According to Dynatrace's 2026 State of SRE and Platform Engineering report, only 40% of platform engineering teams have observability fully integrated across all deployments, a shortfall that matters little for deterministic services but becomes risky with AI features.
From symptoms to trace inspection#
The challenge begins with finding the right run. A customer asks how to configure export in product version 2026.3. The agent takes 12.4 seconds, performs three identical searches (taking 2.6 seconds total), and returns documentation from version 2024.1 instead. The tests passed. The evals marked the answer as faithful—technically supported by the retrieved documents. Yet it answered the wrong question.
To debug this, capture every decision the AI system made. Each model call, each tool invocation, its arguments and results—all recorded as spans in a distributed trace, stitched together across service boundaries. Include metadata at the root span: the release version, retrieval configuration, feature flags, and the version the user requested.
When you line up an affected run against a similar one from before the change, one detail jumps out: the null product_version filter in every search call. The harness received a version parameter, but it never passed it downstream. This isn't a model hallucination or a prompt problem. It's a plumbing failure—and the trace shows it plainly.
Relevance is not the same as correctness#
The three repeated searches reveal a second issue. Were they legitimate retries, or wasted work? The trace answers this: between searches, there's a single model decision call with no model interaction between the second and third query. The retries came from the orchestration layer, not from the model requesting them. Read the retry policy against the search results—a 200 response with an empty hit list or results below your relevance threshold might justify re-querying.
But the generation phase, at 8.1 seconds, is the real time sink. If the harness concatenated all three result sets into the prompt context, the retries inflated your token count twice over.

