BitBootcampBitBootcamp ← all explainers 🔄 Review ⚙ Settings

Theme 1 — Silent Failures

The reflex this theme builds: green dashboards prove nothing — what would tell us this is actually working?

Why this theme matters

Traditional monitoring was built for systems that fail loudly — a crashed process, a 500 error, a full disk. AI/ML systems fail quietly: the pipeline runs, the API returns 200 OK, the dashboard stays green, and the answers are wrong. A model scoring garbage looks identical to a model scoring well, from the infrastructure's point of view. That's why the mean time to detect (MTTD — how long a failure goes unnoticed) for semantic failures is measured in weeks, while for crashes it's minutes.

The mindset shift: stop asking "is the service up?" and start asking "is the service right?" Every drill here is a variation on that gap. Abbreviations are expanded on first use; the full reference is glossary.md.

The drills

#DrillOne-line hookProblem diagram~Difficulty
1The Model That Scored Everyone the SameGraceful degradation imputes 40% of feature vectors — approvals go near-random for 19 days while every technical signal stays green.sequencecore
2Green Dashboards, Zero TrafficA routing rule sends all traffic to the old deployment — the monitored one serves zero requests, with an error rate of 0% (of nothing).sequenceintro
3The Average That Hid the OutageOne client is 100% down for six hours — the global error rate ticks to 4.2%, safely under the 5% threshold.sequenceintro
4The Stale ScoreA TTL typo (21m → 21d) freezes velocity features — a fraud ring discovers it before any monitor does.sequencecore
5The Twice-a-Year BugA performance dip every March and November gets a nickname instead of a root cause — it was daylight-saving time.timelinecore
6The Health Check That Checked Nothing/health returns 200 while every request fails — then the "fix" turns a 30-second database blip into a fleet-wide ejection.sequenceadvanced

Best practices — the silent-failure checklist

What to actually do, distilled from drills 1–6:

  1. Define SLIs (Service Level Indicators — the numbers that measure whether the service does its job) at the semantic level, not just the infrastructure level: score-distribution stability, imputation/null rates, output length and format-validity, field-fill rates. If the service produces decisions, an SLI must describe decision quality.
  2. Alert on the absence of success, not just the presence of failure: minimum-throughput alarms ("fewer than N successful requests in 10 minutes"), and end-to-end synthetic transactions (scripted fake requests that exercise the real path and assert on the answer) running continuously.
  3. Slice every SLI by the dimensions customers experience — tenant, region, segment, channel, document type. Set per-slice thresholds. Aggregates are where minority outages hide.
  4. Give every derived or cached data product a freshness SLI with a staleness alarm. "How old is this value allowed to be?" must have a written answer.
  5. Treat config changes as deploys: reviewed, canaried (rolled to a small slice first), and verified after rollout. Most silent failures in this theme started as a "harmless" config or schedule change.
  6. Separate liveness (restart me), readiness (don't route to me), and deep health (page a human) — and never wire deep dependency checks into automatic fleet ejection, or a dependency blip becomes a self-inflicted outage.
  7. Add a business-metric backstop: approval rate, queue depth, handling time, decisions per hour — with anomaly alarms. Business metrics catch the failure modes you failed to imagine; they are the monitor of last resort.
  8. Keep an anomaly registry: every unexplained wobble gets an entry with a timestamp. Review quarterly for patterns (calendar periodicity is a fingerprint — DST, month-end, expiry cycles). An anomaly with a nickname is an incident on layaway.
  9. Test your monitors by injecting failures (empty outputs, stale data, drifted distributions) in staging on a schedule. An alert that has never fired is unverified code.
  10. Measure your MTTD (Mean Time To Detect — how long failures go unnoticed) for past incidents. If detection came from a human noticing rather than a monitor firing, that's the gap list to work through.

Also see