· 7 min read
The LLM Says It Found the Root Cause, Which Is Exciting Because It Said That Three Root Causes Ago
By I. Tanaka
- satire
- guides
This is satire, but it is also an operational guide for the increasingly common production incident in which an LLM announces it has found the root cause with the serene confidence of a person who has never had to explain a rollback. The model will identify the definitive failure mechanism, provide a seven-step remediation plan, and then, after receiving one additional line from stderr, identify a different definitive failure mechanism. This is not indecision. It is iterative certainty.
Recognizing a Root-Cause Cascade
A root-cause cascade begins when an engineer pastes a stack trace into a coding assistant at 2:13 p.m. The assistant responds: “The root cause is clearly a null configuration value.” Everyone relaxes. A ticket is updated. Someone begins drafting a postmortem title involving “configuration drift.” Then the engineer notices that the configuration value is not null. It is the string "null", which is arguably worse but operationally different.
At 2:17 p.m., the assistant revises its diagnosis. The root cause is now environment-variable precedence. It supplies a crisp explanation of how the staging deployment inherited a legacy variable from the Moonbase Availability Region. No one knows what the Moonbase Availability Region is, but it sounds sufficiently real that a principal engineer opens the infrastructure repository and searches for it.
At 2:24 p.m., a newly pasted log line reveals the service never read the environment variable. The assistant thanks the engineer for “that crucial detail” and reports that the actual root cause is a connection-pool exhaustion event caused by an unclosed database cursor. This feels better because database cursors have the tactile authority of old-school enterprise suffering. The incident channel adds a database engineer, who replies that the service does not use a database.
The Official Root-Cause Lifecycle
To keep the investigation orderly, the Institute for Applied Confidence recommends assigning every model-generated diagnosis a lifecycle state. This prevents the team from confusing a current root cause with a former root cause, a root cause that has been superseded by a more root-like cause, or a root cause that remains emotionally compelling despite all available evidence.
- Proposed Root Cause: The model has detected a suspicious noun in a log line.
- Confirmed Root Cause: The model has used the word “clearly” at least twice.
- Previously Confirmed Root Cause: The team has discovered a fact incompatible with it.
- Legacy Root Cause: It appears in the incident document because deleting it feels dishonest.
- Strategic Root Cause: A broad organizational condition, such as “insufficient observability,” added after nobody can identify the specific failure.
- Root Cause of Record: The cause selected for the postmortem because it fits in the template field.
This process is essential. Without it, engineers may waste time asking whether the first answer was wrong. That framing is unnecessarily binary. The first answer was correct within the small, beautiful universe composed entirely of the first 40 lines of logs. The second answer was correct within the expanded universe containing an HTTP status code. The third answer was correct after someone mentioned that the deploy happened on a Thursday. Each diagnosis is a locally optimal truth, preserved until displaced by a larger context window.
How to Interview a Model During an Incident
The most effective prompt is not “What is the root cause?” This invites the model to complete the ceremonial act of finding one. Instead, ask it to maintain a differential diagnosis, identify observations that would falsify each hypothesis, and distinguish direct evidence from plausible mechanism. The model will still sometimes reply with a numbered list titled “Definitive Root Cause Analysis,” but you have established a paper trail.
- Ask: “What evidence in the supplied logs directly supports this claim?”
- Ask: “What alternative explanations fit the same symptoms?”
- Ask: “What one observation would most strongly disprove your leading hypothesis?”
- Ask: “Which details are assumptions rather than facts from the incident?”
- Ask: “Do not propose a fix until you state the confidence level and missing evidence.”
Be aware that confidence labels require interpretation. “High confidence” means the answer resembles patterns from many other answers. “Medium confidence” means the answer resembles patterns from many other answers but contains a caveat. “Low confidence” means the answer resembles patterns from many other answers and has begun using phrases like “worth investigating.” None of these values should be confused with a calibrated probability unless you have independently validated the system in your environment, which would be an excellent use of the afternoon you had hoped to spend fixing production.
The Fix-First Temptation
Once the assistant provides a fix, the room enters the most dangerous phase: the patch appears reasonable. It adds a retry. It increases a timeout. It wraps something in a mutex. It introduces an abstraction named ResilientExecutionCoordinator, which coordinates execution resiliently in 14 files. The unit tests pass because the unit tests faithfully reproduce the simplified world in which the assistant’s previous root cause was true.
At this point, establish a rule: no model-generated remediation is evidence of its own diagnosis. A patch that stops the alert may have fixed the cause, masked the symptom, moved the failure downstream, or merely waited long enough for the unrelated dependency to recover. The distinction matters, particularly when the new alert arrives under a different team’s service name and everyone celebrates the reduction in your dashboard noise.
Writing the Postmortem
For the postmortem, resist the temptation to list all four LLM root causes in chronological order under “Contributing Factors.” This creates an archaeological document in which future engineers excavate layers of certainty: null config, environment precedence, database cursor, DNS cache, cosmic-ray-adjacent packet fragmentation. Instead, record the evidence trail, the rejected hypotheses, the decision points, and what would have detected the problem earlier.
“A root cause is not the first explanation that makes the graph look less frightening.”
There is one non-satirical point beneath the rubble: LLMs are useful during debugging when treated as fast hypothesis generators, log summarizers, and question-asking partners—not as instruments that convert incomplete evidence into fact. Production systems already contain enough confident guesses. The valuable engineering work is still deciding which guess survived contact with reality.