BitBootcampBitBootcamp ← all explainers 🔄 Review ⚙ Settings

Drill 103 — The SLA With No Teeth

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

The story

A payments platform runs every card authorization through a third-party fraud-scoring API. It's a hard dependency on the hot path: no score, no decision. When the vendor was selected two years ago, procurement checked the box that mattered most — a 99.9% uptime SLA — and everyone moved on. The number felt like insurance. Because it felt like insurance, nobody funded a fallback: no cache-and-degrade mode, no second provider, no queue-and-hold. The SLA was the resilience plan.

One Thursday evening at peak, the vendor's scoring endpoint starts returning HTTP 500s on roughly a third of requests and 30-second timeouts on the rest. It never goes fully dark — the login page loads, the status dashboard is reachable, the docs are up. But the one endpoint the platform actually calls is effectively unusable. With no fallback, the platform's timeout path declines transactions it can't score, and for four hours good customers are told their cards were refused. The incident channel lights up; the vendor's status page stays a cheerful green.

The next morning, calmer, the team does the obvious thing: they file for the SLA service credit. That is the moment they read the contract for the first time since signing — and discover that the guarantee they'd been treating as a safety net was never load-bearing at all.

⏸ Stop here and ask the room: the vendor had a 99.9% SLA, and it was down for four hours at peak. Why is the credit going to be almost nothing — and why is that the smaller problem?

Run it — facilitator script

Timing for a 20-minute session: 2 min story · 10 min staged questions · 3 min reveal · 5 min transfer.

Read the story aloud and pause at the ⏸. Let the room reach for "we'll get a big refund" before you show them why they won't — the disappointment is the teaching moment.

The vendor's dashboard says 99.94% this month. Your users had four broken hours. Who's measuring wrong?

The endpoint returned 500s and timeouts but never went fully offline. Does the SLA even cover that?

Say the credit is real — 5% of one month's fee. Is the SLA doing its job?

The reveal

The credit is trivial, and it's trivial in three independent ways, each fatal on its own. First, the SLA's "uptime" is measured by the vendor's own reachability probe on a monthly average, so a four-hour peak degradation shows as 99.94% — above the 99.9% floor, so no breach occurred by the contract's math. Second, even if it had dipped below, the failure mode that hit you — elevated errors and latency, not a total outage — is explicitly excluded; the SLA only covers "total unavailability of the Service for a continuous period exceeding 30 minutes as measured by Provider." Third, the remedy is a service credit capped at 5% of one month's fee, claimable only within 30 days with your own evidence, and named as your "sole and exclusive remedy." The guarantee was theatre: a number that reads like protection, measured by the party it protects against, excluding the failures that actually happen, and paying out a rounding error if it pays at all. The real finding in the postmortem isn't the credit — it's that a hot-path dependency had no fallback because a line in a contract was standing in for engineering.

Why this happens — the mechanics

An SLA is a commercial instrument, not an engineering control, and it's written by the vendor to bound their liability, not to guarantee your uptime. Three levers do the work, and all three point the same way. The definition of "up" is the vendor's: they choose the probe (usually control-plane reachability, not the data-plane call you depend on), the granularity (a monthly average washes out even a multi-hour incident), and the vantage point (their network, not yours). The list of covered failure modes is short by design — "total unavailability" is rare, while the degradations that actually hurt you (partial errors, latency cliffs, poisoned responses) live in the uncovered gap. And the remedy is capped and exclusive — a credit worth a few percent of one month's fee, which is cheaper for the vendor to pay than to prevent, and which the "sole remedy" clause bars you from exceeding no matter what you lost.

Underneath sits the asymmetry this whole theme is about: the dependency matters enormously to you and almost nothing to the vendor. Reliability is your production incident and their line item. So the SLA the vendor offers is calibrated to their indifference, and treating it as your resilience plan imports that indifference straight into your architecture. The trap is specifically that a credible-looking SLA suppresses the work that would actually make you resilient — you don't build the fallback, don't measure your own availability, don't dual-source, because a number in a contract told you not to bother. The guarantee's real damage is the engineering it convinced you to skip.

Diagrams

Problem — how the failure unfolds:

sequenceDiagram
    autonumber
    participant A as Auth Service
    participant V as Vendor API
    participant P as Vendor Probe
    participant S as Vendor Support
    A->>V: score txn (peak load)
    V--xA: 500s and 30s timeouts
    Note over A: fallback declines<br/>good customers 4h
    P->>P: control-plane reachable<br/>logs 99.94 percent
    Note over V,P: partial degradation<br/>not a total outage
    A->>S: file SLA credit claim
    S--xA: excluded failure mode
    Note over S: remedy 5 percent<br/>of one month fee

Solution — where the guardrails go:

flowchart TD
    A["Vendor outage or<br/>partial degradation"] --> B["Your probe scores every<br/>call at the integration<br/>point (2xx under budget)"]
    B -.-> AL["Alarm: 5-min error rate<br/>over 1 percent OR p99<br/>over 800 ms"]
    A --> C["Contract enumerates<br/>covered failure modes<br/>(latency, partial errors)"]
    C -.-> AL
    AL --> D["Auto-failover to second<br/>provider or defined<br/>fallback policy"]
    D --> E["Tiered credits to 100 pct<br/>+ exit-for-cause right<br/>(sole-remedy clause struck)"]

What good looks like

The lesson

Read every SLA as a refund policy, not a reliability guarantee — the vendor defines "up," lists which failures count, and caps what it pays. Your resilience is the SLO you measure yourself, the fallback you build, and the exit you negotiated while you still had leverage; the number in the contract is theatre until you can measure it and enforce it.

Named concepts: SLA vs SLO, independent SLO measurement, covered failure modes, service credits and exit rights, multi-vendor redundancy.

Real-world echoes

Transfer

Pick the single vendor whose outage would hurt you most. When did you last measure your own availability against that vendor's endpoint — not their dashboard — and do you know which failure mode their SLA excludes?

Make it a ticket: instrument your top critical dependency to compute a per-endpoint SLO this sprint (success = 2xx under an 800 ms budget, alarm at 1% error over 5 minutes), and read that vendor's SLA to record, in one line, the failure mode it excludes and the credit cap. If either the measurement or the fallback is missing, that's the next ticket.

Related