AI-Specific Failure Modes: What Actually Breaks
The page arrives at 3am: 'support assistant returning garbage.' In a classic web service, that phrase means a bad deploy. In an AI service, it could be five different failures, and the first five minutes determine which runbook you open.
AI-specific failure modes, ranked by how often they page:
| Failure mode | Symptom | First move |
|---|---|---|
| Provider outage | 5xx from the model API, all features | Open the outage runbook; flip the fallback flag |
| Hallucination spike | Answers confident but wrong, citations broken | Check the last prompt deploy; roll back if correlated |
| Prompt injection | Model follows instructions from user input or retrieved docs | Isolate the input; tighten the system prompt and filters |
| Cost blowout | Token spend 10x baseline in an hour | Kill the feature flag; find the loop in the traces |
| Quality regression | Gradual accuracy drop after a model or prompt update | Pin the previous model and prompt version |
The table is the triage. The symptom narrows the failure mode; the failure mode picks the runbook. Skipping triage and guessing is how a 15-minute rollback becomes a 4-hour investigation.
Notice what is missing: 'the model is bad.' Model quality is never the first hypothesis. The model is the same binary it was yesterday; what changed is the prompt, the retrieval, the routing, or the provider. Tracing LLM calls is what lets you check the last deploy in minutes instead of hours.
Runbook: Provider Outage and Fallback Models
A provider outage is the most common AI incident and the most rehearsed. The runbook has three moves, in order:
- Confirm it is the provider, not you. Check the provider status page and your own error rate. If your error rate is flat and the provider is down, the outage is theirs.
- Flip the fallback flag. Route traffic to a secondary model. This is a feature flag, not a deploy — it takes seconds, not a release cycle.
- Set the degraded mode. If no fallback model is available, disable the AI feature and serve a static response. A support assistant that says 'I cannot answer right now' is better than one that times out for every user.
def route_model(request, flags):
if flags.provider_outage and flags.fallback_enabled:
return FALLBACK_MODEL # secondary provider, same interface
if flags.provider_outage:
return None # caller serves the degraded response
return PRIMARY_MODEL
The fallback model must be tested before the outage, not during it. A fallback that has never served traffic is a hypothesis, not a mitigation. Model fallback patterns and rate limiting with retries are what keep the fallback from cascading — a thundering herd of retries against a recovering provider turns a 5-minute outage into a 30-minute one.
The runbook ends when the provider recovers and the fallback flag flips back. The postmortem starts then — not during the incident.
Runbook: Quality Regression and Rollback
A quality regression is the incident that looks like a non-incident. Error rates are flat. Latency is flat. The answers are just... worse. Users file tickets with phrases like 'it used to be better,' and nothing pages.
The rollback path must exist before you need it. Two artifacts, pinned and versioned:
- The previous prompt version. Prompts are code. They are deployed, they change behavior, and they regress. Versioning prompts in codebases means the previous version is a known artifact, not a memory.
- The previous model. Model providers update models silently. The model that answered well last week may be a different weights file today.
def rollback_quality(feature: str, registry):
previous = registry.get_previous(feature)
registry.deploy(feature, prompt=previous.prompt_version, model=previous.model)
return previous
# The deploy is a config change: prompt v14 -> v13, model claude-sonnet-4-6 -> claude-sonnet-4-5
The non-obvious requirement is that the rollback is a config change, not a code deploy. A rollback that waits for a CI pipeline is a rollback that takes 20 minutes; one that flips a version pointer takes 20 seconds. The offline eval harness and regression suites are what let you confirm the rollback worked — run the suite against the pinned version before and after the flip.
Detection is the harder half. Quality regressions are caught by online eval metrics — a sampled set of requests scored continuously — not by user tickets. If your only signal is 'users complain,' your detection gap is the incident.
Data Exposure and Blameless Postmortems
Data exposure is the incident where speed is a legal requirement, not an engineering preference. The runbook is short because the decisions are made before the page:
- Contain. Revoke the exposed key immediately. A rotated key stops the bleeding; every minute it lives is a minute of exposure.
- Scope. Search the trace logs for every request that carried the sensitive data. This is why tracing LLM calls records what it records — the trace is the audit trail.
- Notify. Affected customers and, where applicable, regulators, within the contractual window. The notification is a legal process, not a blog post.
def scope_exposure(trace_store, key_id: str, window_hours: int):
hits = trace_store.query(
filter={'attributes.api_key_id': key_id},
since=timedelta(hours=window_hours),
)
return [h.trace_id for h in hits]
The query is only possible because the key ID was a span attribute. Teams that log only 'request succeeded' cannot scope an exposure; teams that log trace context can answer 'who was affected' in minutes.
The postmortem is where AI incidents differ most from classic ones. A blameless postmortem captures the detection gap, not just the root cause:
- Root cause: the key was logged in a span attribute.
- Detection gap: nothing alerted on the key appearing in logs; the exposure was found by a customer.
Fixing the root cause without fixing the detection gap means the next exposure is found the same way. Incident drills exist to close that gap before the real page. The responsible AI foundations — collect only what you need, redact before you log — are the prevention layer that makes the runbook rare.
Quiz
1. A provider outage is confirmed. What is the first move after confirming it is not your own error rate?
2. Why must a quality rollback be a config change rather than a code deploy?
3. For suspected data exposure, why is scoping via trace logs a runbook step rather than an afterthought?
4. What does a blameless postmortem capture beyond the root technical cause?
Flashcards
Question
What are the five AI-specific failure modes and their first moves?
Click to reveal answer
Answer
Provider outage → flip fallback flag. Hallucination spike → check last prompt deploy, roll back if correlated. Prompt injection → isolate input, tighten system prompt and filters. Cost blowout → kill feature flag, find loop in traces. Quality regression → pin previous model and prompt version.
Question
What are the three moves in a provider outage runbook?
Click to reveal answer
Answer
1. Confirm it is the provider, not you (status page + your error rate). 2. Flip the fallback model feature flag — a config change, not a deploy. 3. Set degraded mode: disable the AI feature and serve a static response if no fallback exists.
Question
Why must a quality rollback be a config change rather than a code deploy?
Click to reveal answer
Answer
A rollback that waits for a CI pipeline takes 20 minutes; one that flips a version pointer takes 20 seconds. During a quality regression, every minute of degraded answers is user-facing damage.
Question
What are the three steps for suspected data exposure?
Click to reveal answer
Answer
Contain (revoke the key immediately), Scope (search trace logs for every request that carried the sensitive data), Notify (affected customers and regulators within the contractual window).
Question
What does a blameless postmortem capture beyond the root cause?
Click to reveal answer
Answer
The detection gap: why monitoring did not catch the incident before users did. Fixing the root cause without fixing the detection gap means the next incident is found the same way — by a customer.
Revision Notes
Key Takeaways
- 1. AI incidents have five distinct failure modes; the symptom picks the runbook, and skipping triage turns a 15-minute rollback into a 4-hour investigation.
- 2. Provider outages are handled by a fallback flag and degraded mode — config changes that take seconds, not deploys that take a release cycle.
- 3. Quality regressions need a pinned previous prompt version and model, rolled back as a config change, and detected by online eval metrics rather than user tickets.
- 4. Data exposure response is contain, scope, notify — and scoping is only possible because trace logs record what they record.
- 5. Blameless postmortems capture the detection gap, not just the root cause; fixing only the root cause means the next incident is found the same way.
Interview Tips
- • Walk through a concrete AI incident end to end: the symptom, the triage decision, the runbook you opened, and the fix — the failure-mode table is your answer structure.
- • Explain why a quality rollback is a config change and what you pin (prompt version + model); the 20 seconds vs 20 minutes detail shows you have operated this.
- • Describe the data exposure runbook and why trace logs make scoping possible; the key-ID-as-span-attribute detail signals production maturity.
- • Discuss what a blameless postmortem captures beyond root cause, and give an example of a detection gap you would fix.
Cheat Sheet
Responding to AI Incidents — Cheat Sheet
Triage table:
| Failure mode | Symptom | First move |
|---|---|---|
| Provider outage | 5xx, all features | Fallback flag |
| Hallucination spike | Confident, wrong, citations broken | Roll back prompt deploy |
| Prompt injection | Model follows input/doc instructions | Isolate input, tighten prompt + filters |
| Cost blowout | 10x spend in an hour | Kill feature flag, find loop in traces |
| Quality regression | Gradual accuracy drop | Pin previous model + prompt |
Outage runbook: confirm provider → flip fallback flag → degraded mode (static response). Fallback must be tested before the outage.
Quality rollback: config change, not a deploy. Pin previous prompt version + model. Confirm with offline eval harness.
Data exposure: contain (revoke key) → scope (trace logs) → notify (contractual window). Key ID must be a span attribute for scoping to work.
Postmortem: root cause + detection gap. Fixing only the root cause means the next incident is found by a customer.
Links: tracing LLM calls · cost budgeting
Continue Learning
Before You Start
- No prerequisites listed.