BitBootcampBitBootcamp ← all explainers 🔄 Review ⚙ Settings

Drill 59 — The Deprecation Email

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

The story

A data vendor does everything right: six months' written notice that API v1 will be sunset on a fixed date, sent to the integration-contact address on file. That address is an alias pointing at a distribution list from two reorgs ago — delivered successfully, read by nobody. Six months later, on a random Tuesday at 9 a.m., v1 starts returning 410 Gone and production identity checks fail across every product that touches them. The vendor's support line, entirely reasonably, points at the email.

⏸ Stop here and ask the room: the vendor gave six months' notice. Where did the six months go?

Run it — facilitator script

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

Read the story aloud and pause at the ⏸. Resist the urge to move on quickly — the room needs a moment to notice that nobody in the story did anything wrong, and the outage happened anyway.

"Where do our vendors' notices actually land today, and who reads them?"

Listen for: a specific, checkable answer — a monitored team channel or shared inbox with a named owner, plus a recent example of a notice that was read and acted on. Extra credit for anyone who knows what contact address is actually on file with each vendor, as opposed to what we assume is on file.

Weak signal: "whoever set up the integration gets those" — a personal inbox, a stale alias, or a distribution list nobody can enumerate. If the room has to debate where the mail goes, the debate is the finding.

"How many of our dependencies are running on versions already announced for sunset?"

Listen for: a number — or at least the place a number would come from: a registry, a dashboard, a spreadsheet with a review cadence. The strong answer treats version currency like tech debt with a metric attached.

Weak signal: confident guesses with no source ("probably none?"), or the honest-but-alarming "we'd have to go check each one" — which means the audit that closes this story's postmortem has never been run here.

"Whose job is it to know?"

Listen for: a named owner per dependency — a person, not a team — and a standing ritual, like a quarterly registry review, where sunset status is somebody's agenda item rather than everybody's background worry.

Weak signal: diffuse ownership ("the platform team, broadly") or event-driven attention ("we look when something breaks"). That's asymmetric attention reproduced internally — the dependency matters enormously and is nobody's job.

Facilitator close: land the reveal hard — the outage isn't the real finding. The three other unread notices are.

The reveal

The postmortem's real finding isn't the outage — it's that a quick audit turns up three more dependencies quietly running on announced-deprecated versions, their notices sitting unread in the same class of stale aliases. This wasn't an event; it was the first detonation in a minefield.

Why this happens — the mechanics

For the vendor, sunsetting API (Application Programming Interface) v1 is a line item in a release plan — announced once, to the address you gave them, obligation discharged. For you, it's every product that touches identity checks. That's the asymmetric-attention trap at its purest: the notice matters enormously to exactly one side of the relationship, and it's not the side that sent it. The vendor's email is a compliance artifact; reading it was always your problem.

Contact records rot faster than anyone expects because they're written once, at procurement, by someone who may have reorged away twice since. Email delivery keeps succeeding technically — the alias resolves, the message lands — while the human route behind it decays silently. Deliverability is not readership, but nothing in the system distinguishes the two: there is no bounce, no error, no signal that six months of warning went into a void.

And deprecation itself is a non-event until the sunset date. Nothing degrades during the notice period — no latency creep, no error-rate wobble, nothing that competes for attention against live incidents. The only alarm anyone would ever get was that one email: a single point of failure for a production dependency, with no monitoring on it whatsoever. Systems that fail loudly get fixed; announcements that land silently get discovered at 9 a.m. on a Tuesday.

Diagrams

Problem — how the failure unfolds:

timeline
    title Six months of notice, read by nobody
    section The announcement
        Month 0 : Vendor emails v1 sunset notice : Lands in alias from two reorgs ago : Delivered, read by nobody
    section The quiet months
        Months 1-6 : Integration untouched : Nobody owns the notice
    section Sunset day
        Tuesday 9am : v1 returns 410 Gone : Identity checks fail everywhere
    section The postmortem
        Week after : Audit finds three more : deprecated dependencies running

Solution — where the guardrails go:

flowchart TD
    A["Vendor announces v1 sunset"] --> B["Notice routed to a<br/>monitored team channel"]
    B --> C["Dependency registry: every<br/>API, feed, package with<br/>version and owner"]
    C --> D["Registry entry flagged:<br/>sunset announced"]
    D -.-> AL["Quarterly review surfaces<br/>it with five months to<br/>spare"]
    G["Version-currency dashboard<br/>tracks deprecated versions<br/>as tech debt"] -.-> AL
    AL --> E["Migration ticket created,<br/>owned, and scheduled"]
    E --> F["v2 migration ships weeks<br/>before the deadline"]

What good looks like

The lesson

Keep a dependency registry — every external API, data feed, and package, with its version, its named owner, and its sunset status — and review it quarterly. Route vendor communications to a monitored team channel, never a personal address or a stale alias. Track version currency as tech debt with a dashboard: "how many of our dependencies are on borrowed time?" should be a number someone can read, not a surprise someone discovers.

Named concepts: dependency registry, deprecation tracking, vendor communication routing, version currency.

Real-world echoes

Transfer

Pick our five most critical external APIs. For each: who receives that vendor's emails today — and when did that person last actually read one?

Make it a ticket: audit the contact-on-file for those five vendors this sprint — re-point each to a monitored team channel, record the named owner in the dependency registry, and count how many current versions have announced sunsets. The count goes on the dashboard.

Related