Most failures disappear without teaching the product anything.
A bad output happens. Someone catches it. Maybe it lands in Slack. Maybe a PM opens a ticket. Maybe an engineer tweaks the prompt until that one example works again.
Problem solved, apparently.
The symptom is gone, a human did the repairing, and the system knows nothing it did not know before. That is maintenance.
I learned this building Stem, my own AI system. On June 10 its retrieval eval fell from 83% to 33% the day I switched the model to JSON tool calls. The obvious reading was that JSON mode made the model worse. Revert it.
The transcripts said otherwise. Stem’s own grep had returned (no matches) for a string that sat in four files. Two runs had ended in under three seconds with a full plan in the model’s reasoning channel and nothing in its answer, and the loop had treated empty as final. One gold answer no longer matched a file the pipeline rewrites during the day. Three harness bugs, one stale fixture, zero model bugs. After the fixes: 100%, and faster.
That day changed the question I ask after a failure, from “how do I fix this output?” to “what did this failure teach me about the product?”