BitBootcampBitBootcamp ← all explainers 🔄 Review ⚙ Settings

Drill 62 — The 99.9% That Didn't Matter

Theme: Vendors & Dependencies · Format: 20-min drill · Difficulty: core

The story

The primary fraud-data vendor goes down — fully — for an entire business day. No fallback was ever designed: no cached last-known values, no secondary vendor, no degraded-mode policy. Applications queue for nine hours while the ops floor refreshes the vendor's status page. The contract's SLA (Service Level Agreement — the contracted reliability promise, usually with penalties) performs exactly as written: a service credit of $400 lands on next month's invoice. The day's business impact is six figures.

⏸ Stop here and ask the room: the contract worked precisely as agreed. Who failed?

Run it — facilitator script

Timing: 2 min story · 10 min questions · 3 min reveal · 5 min transfer.

Read the story and pause at the ⏸. The instinct in the room will be to blame the vendor — let that happen, then point back at the sentence "the contract worked precisely as agreed" and hold the question open. The drill turns when someone says "we did."

"What does that SLA actually promise — reliability, or a refund?"

Listen for: someone who has read the remedy clause and can say it out loud — credits capped at a fraction of monthly fees, consequential damages excluded. The strong answer states the reframe unprompted: an SLA prices their failure at their rates; it does nothing to prevent yours.

Weak signal: quoting the nines as if they were a physical property of the service ("they're three nines, so this can't really happen") — or nobody in the room ever having seen the actual remedy language on a contract we've signed.

"What is our policy during their outage: approve cautiously, hold, degrade — and who chose it?"

Listen for: a written, business-approved degraded-mode policy — which application classes proceed with a flag, which hold, for how long, and the name of the person who chose that trade-off in daylight, with the risk appetite on the table.

Weak signal: "we'd figure it out in the incident channel" — which means the policy is queue-and-wait, chosen by nobody, at 9 a.m., under pressure. A default decided by absence is still a decision; it's just an unowned one.

"Has anyone ever watched what our system does when this vendor simply isn't there?"

Listen for: a game day — the vendor black-holed in staging, actual behavior observed, findings turned into tickets. Strong answers know the difference between a fallback that exists in an architecture diagram and one that has actually engaged.

Weak signal: "the retry logic should handle it" — should is the tell. A fallback that has never engaged is a hypothesis, and nine hours of queueing is what hypothesis-testing in production looks like.

Facilitator close: answer the ⏸ question explicitly — the vendor kept their contract; we never designed our side of the outage. Both things are true, and only one of them is fixable by us.

The reveal

The SLA was read at procurement as a reliability guarantee; it is a refund policy. Nobody had ever asked "what do WE do during their outage?" — so the answer got decided by default, at 9 a.m., by nobody: queue everything and wait.

Why this happens — the mechanics

An SLA (Service Level Agreement) credit is a refund, not resilience. Read the remedy clause on almost any vendor contract: credits are capped at a percentage of the monthly fee, consequential damages are excluded, and the payout prices the outage at the vendor's rates — what they charged you for the service — not at yours, which is what the service protects. $400 against six figures isn't a broken contract; it's the contract working exactly as its authors intended. The SLA transfers a sliver of cost and none of the risk, and the risk was always the point.

The gap opens at procurement, in translation. "99.9% uptime" reads like an engineering guarantee, but the nines describe intent and history, not a bound — and even a perfectly honored 99.9% permits nearly nine hours of downtime a year, with nothing said about whether those hours arrive one minute at a time or all on the day your queue is deepest. The number that mattered was never in the contract: what does an hour of this vendor being gone cost us? Nobody computes it, because the SLA's confident-looking nines feel like the answer to a question they don't actually address.

And the real decision — what do we do while they're down — has no natural owner, so it never gets made. It's a business-risk trade-off (approve cautiously and eat some fraud risk, hold and eat the queue, degrade to a cached or secondary signal) that engineering assumes the business will call, while the business doesn't know the dependency exists. Decisions with no owner get made by defaults, and the default in every system is the same: block on the dead dependency and wait. That's how "who chose queue-and-hold?" comes to have the worst possible answer — nobody, at 9 a.m., in real time.

Diagrams

Problem — how the failure unfolds:

sequenceDiagram
    autonumber
    participant VN as Vendor
    participant AP as Applications
    participant SLA as SLA contract
    participant BZ as Business
    Note over VN: Fraud-data vendor goes<br/>fully down for a day
    AP--xVN: Every call fails - no cache,<br/>no secondary, no policy
    Note over AP: No degraded mode was<br/>ever designed (silent)
    Note over AP: Applications queue for<br/>nine hours
    Note over BZ: Ops floor refreshes the<br/>vendor status page
    VN-->>SLA: SLA performs exactly<br/>as written
    SLA->>BZ: Service credit of $400 on<br/>next month's invoice
    Note over BZ: Day's impact is six figures -<br/>the contract worked perfectly

Solution — where the guardrails go:

flowchart TD
    A["Primary fraud-data vendor<br/>goes down"] --> B["Fallback cache engages:<br/>last-known values with age<br/>labels"]
    B --> C["Degraded-mode policy<br/>chosen by the business in<br/>daylight"]
    S["Secondary vendor covers<br/>the critical subset"] --> C
    C --> D["Low-risk applications<br/>proceed flagged, high-risk<br/>hold"]
    A -.-> M["Dependency health probe<br/>detects the outage in<br/>minutes"]
    M -.-> AL["Ops paged with a runbook,<br/>not a status page"]
    G["Quarterly game day: black-<br/>hole the vendor in staging"] -.-> B

What good looks like

The lesson

SLA credits are not business continuity. Every critical dependency needs a designed, tested fallback mode — cache-and-degrade, a secondary source, or an explicit queue-and-hold policy chosen by the business in daylight, not improvised during the incident. Then run a game day: black-hole the vendor in staging and watch what actually happens, because a fallback that has never engaged is a hypothesis.

Named concepts: SLA vs. business continuity, fallback modes, vendor game days, single-source risk.

Real-world echoes

Transfer

Take our most critical vendor. What literally happens in the first hour of their total outage — and who decided that? If the answer is "nobody decided," the game day schedules itself.

Make it a ticket: schedule the game day — black-hole that vendor in staging for four hours, record what actually happens, and bring a proposed degraded-mode policy to the business owner for a signature. The signature is the deliverable.

Related