ML Failure Simulator
Break a serving system ten different ways and read the nine signals a monitoring stack would show. Then do it blind: open signals one at a time, name the cause, and find out how many causes were still consistent with what you looked at.
Every failure here has a wrong fix that looks right, and for most of them it is the same one: retrain. Retraining on corrupted labels bakes the corruption in; retraining on a feature that went null teaches the model to ignore it; retraining because someone moved the threshold changes nothing the threshold did. The order of checks that transfers is business metric first, then whether quality is unknown or down — the difference is the whole diagnosis — then serving, then features, and the model last.
A new feature — "days since last support ticket" — is added to the training set with a point-in-time join that is off by one: it sees the ticket the user opens after the outcome. The model retrains and ships.
How to read this page honestly
What the model is, and what it deliberately refuses to be.
- SIMULATEDA declarative model of a serving system: ten failures, nine signals, one reading per pair. The readings are what each signal would show — including *unknown* (the labels have not arrived, so quality is unknowable rather than bad) and *missing* (the thing producing the signal is gone). Nothing is measured on a real system.
- SIMULATEDSome partial views are genuinely ambiguous. Feature PSI up, prediction mean up, quality down reads identically for real drift and for a serving-side preprocessing change;
candidates()returns both, and the page says so instead of pretending the first three signals were enough. Over all nine signals every failure is distinct — which is the argument for the signals that feel redundant. - SIMPLIFIEDReal incidents have several causes at once, readings that are noisy rather than clean directions, and a dashboard that was not built to show the signal you need. The habit that transfers is the order of checks: business metric first, then whether quality is *unknown* or *down*, then serving, then features, then the model — and never the model first.