River
Y CombinatorBacked by Y Combinator
FREE TEMPLATE

Feature Sunset and Deprecation Plan

Every sunset guide says to notify affected users. This template counts the accounts whose way of using the feature has no replacement at all.

Free download  ·  No account needed

Every deprecation guide gives the same two instructions: notify the users who are affected, and give your high-value accounts a personal call. Both are right and both point at the wrong column. Value is not usage, and the accounts that churn over a sunset are the ones whose particular way of using the feature has no equivalent in whatever replaces it. Nobody counts those before the announcement goes out, which is why the first anyone hears of them is a support ticket in the last fortnight.

So this pack does two joins before anybody is told anything. Every distinct way the feature is reached goes against what the replacement actually covers, which produces a list of accounts with nowhere to go. Then the usage data goes against the announcement list, which finds the accounts where the notice arrives at somebody who has never opened the thing. At the fictional Wexmoor those came to 43 accounts and 31 accounts, and 26 of the 84 heaviest users were in the first group.

Depth then sets the channel, measured as active weeks in a quarter rather than event volume. A call goes to the accounts running something through this every week, and a changelog line covers the 1,217 that stopped over a year ago. Send the usage export, every surface the feature is reachable from, and the announcement list. What comes back first is the count of heavy accounts with no path, then the launch brief and release notes the replacement needs.

2,310 accounts, 419 that use it, 43 with nowhere to go

The register with coverage attached, the migration percentage computed against the right denominator, and every escalation scored against what the register predicted.

Affected Account Register

Depth says how loudly to knock. Coverage says whether to knock at all

Illustrative, for a fictional distribution-analytics product called Wexmoor retiring Classic Reports in favour of Report Builder. 2,310 accounts had it enabled, 419 used it in the trailing thirteen weeks, 406 had never opened it once.

AccountTierWks of 13UsersHow they use itReplacement covers itNoticeReaches a user
Thrushgill IndustrialEnterprise134UI, legacy export endpointNo equivalentHeld backNo
Ockbrook WholesaleMid-market121Automation trigger, exportNeither, none plannedHeld backNo, service account
Whinfell SupplyMid-market113UI, three portal embedsYes, but URLs changeCall, 120 daysYes
Vellacott GroupEnterprise1311UI, scheduled emailYesCall, 120 daysYes, 9 of 11
Padstone DistributionSMB71Legacy export endpointNo equivalentHeld backNo, user left in Jan
Meltham FoodsMid-market54Scheduled emailYesEmail, 90 daysYes
Gorseland ChemicalsMid-market00UI at quarter endYesIn-product, 60 daysn/a
Silverdale Medical SupplyEnterprise00Last opened 512 days agon/aChangelog, 30 daysn/a

Two accounts that make the argument

Silverdale is in the top ARR decile and gets a changelog line. Ockbrook is mid-market, runs an automation off this every week, and gets a phone call. Segmenting by account value inverts both. Wexmoor’s top decile held 231 accounts, of which 168 had not opened the feature in a quarter and only 28 were load-bearing, so that list makes 168 unnecessary calls and misses 56 accounts that use it weekly.

BandAccountsChannelLead time
D3 load-bearing, 11 to 13 active weeks84Named contact and a call120 days
D2 regular, 4 to 10 active weeks121Direct email to the users90 days
D1 light, plus 268 seasonal dormant482In-product notice on the feature60 days
D0 dormant, no use in a year1,217Changelog entry30 days
Never used it406Nothing at allnone

A blanket announcement is 2,310 notices, 1,891 of which go to somebody with nothing to migrate. The 268 seasonal accounts are dormant on a trailing quarter and used it in the same calendar month a year earlier, which is what a quarterly close looks like from thirteen weeks away.

Migration Tracking

The percentage everybody quotes is measured against the wrong number

Six weeks after wave one went to the 205 regular and load-bearing accounts. Cutover is five weeks away.

AccountWhat has to movePathNoticeAcknowledgedMigratedIn the denominator
Barhale Supply2 digests, 9 saved reportsCovered4 Feb5 Feb18 FebYes
Naseby Trading6 saved reportsCovered11 Feb12 Feb25 FebYes
Whinfell Supply3 supplier-portal embedsManual re-embed4 Feb7 FebStarted 3 MarYes
Denby Marine1 intranet embedManual re-embed11 Feb18 FebNot startedYes
Thrushgill IndustrialNightly warehouse exportNo path4 Feb4 FebCannotNo
Ockbrook WholesaleAutomation on report outputNo path11 FebNeverCannotNo
Padstone DistributionScheduled export jobNo path11 FebNeverCannotNo

Both readings, and only one of them is true

Against accounts notified: 96 of 205 is 46.8%, 109 left at 16 a week is 6.8 weeks, and the cutover is five weeks away, so the date slips by 13 days. Against accounts that have a path: 38 of the 205 cannot migrate at all, so 96 of 167 is 57.5%, 71 left at 16 a week is 4.4 weeks, and the date clears with four days spare.

Numerator and denominator were both wrong in the first reading and they were wrong in opposite directions, which produced a percentage that looked mildly uncomfortable while concealing the 38 accounts walking into a cutover with nowhere to go.

Escalation Log

Every row carries a category, so the analysis can be scored

Nine of fourteen rows shown, from the 205 accounts notified in wave one.

AccountWhat they saidCategoryPredictedCommitment
Thrushgill IndustrialThe nightly export runs our replenishmentNo migration pathYesExemption to 30 Sep, API date by 15 Apr
Ockbrook WholesaleAn automation fires on the result and nothing replaces itNo migration pathYesEngineer scoping a webhook, answer by 22 Mar
Padstone DistributionNobody here knew this job existed and it is in our closeNo path, no live contactYesCall the new owner, exemption to 30 Sep
Whinfell SupplyRe-embedding on a supplier portal is our engineering workCost lands on themYesURLs sent 14 Feb, offered to write the change
Ellerdine Plant HireNinety days does not work, our systems freeze in Q1TimingNoMoved to the 120-day tier
Crandale PaperRaised the sunset as a renewal riskNo migration pathNoA chart type nobody had counted as a pattern
Selbrigg ToolsWe only found out because a colleague mentioned itNotice did not arriveYesResent to both users, register column added
Hensbarrow AggregatesOur auditor needs this exact layout until the audit closesNo migration pathYesExemption to 15 Jul, parity logged
Wrayburn SealsWhat happens to two years of saved definitionsDataNoExport built and offered to all 419 active accounts

The score

Nine of the fourteen escalations were accounts with no migration path, and eight of those nine were flagged uncovered in the register before a single notice went out. That is what a working analysis looks like: the cost was chosen rather than discovered. The ninth was a chart type nobody had counted as a usage pattern, which is the useful kind of surprise, because it adds a pattern, which changes the coverage count, which changes who is in the sequence.

What is in the pack

01

Affected Account Register

One row per account with the feature enabled. Active weeks in the trailing quarter, distinct users, days since last use, every pattern it uses, whether the replacement covers each one, its notice tier, and whether anybody on its announcement list has ever opened the thing.

02

Migration Tracking

Progress measured against accounts that have a path, not accounts notified, with both figures side by side so nobody quotes the flattering one by accident. Weekly rate from the last three weeks, and the date it puts the cutover on.

03

Escalation Log

Every contact with a category and a flag for whether the register predicted it. An escalation you predicted is a cost you chose. One you did not is a usage pattern nobody counted, and it goes straight back into the register.

04

Sunset Plan and Notice Sequence

The document that gets approved and the sequence derived from the register: channel and lead time per band, pause conditions, and the machine-readable signal for integrations. Where a contract or published policy sets a floor it wins, and Microsoft's Modern Lifecycle Policy commits to twelve months' notice where nothing succeeds the product. A defect is the other kind of unwanted news, and it goes to whoever it actually reached rather than following a planned sequence.

05

Migration Guide and Support Brief

The guide is organised by usage pattern rather than by product area, so a reader finds their own section in two lines. The brief tells the support team to open the register before answering, because depth and coverage change the entire reply.

06

How Usage Depth Is Computed, plus a weekly sweep

The method in eight steps, and an automation that recomputes both migration percentages, flags load-bearing accounts with no signed exemption, and names the accounts that acknowledged and then quietly stopped. Whether the replacement then gets used is a separate measurement.

How it works

  1. 1

    Send the usage export

    Per account and per user, with dates, covering at least a quarter and ideally eighteen months. Plus every surface the feature is reachable from, what replaces it, and the announcement list.

  2. 2

    Depth by week, not by volume

    River counts distinct active weeks rather than events, so an account with four hundred hits in one onboarding week ranks below one that opens it every Monday, and dormant accounts get checked against the same period a year earlier.

  3. 3

    The replacement gets costed

    Every distinct way the feature is reached gets one of three verdicts: covered, covered with work landing on the customer, or no equivalent. The union of accounts on an uncovered pattern is the number that decides whether the date is real.

  4. 4

    Then it runs weekly

    Migration recomputes against accounts that can actually move, the cutover date is re-forecast from the recent rate, and any account that acknowledged and then stopped surfaces with its owner named beside it.

Frequently asked questions

Every deprecation guide says to notify affected users. What is different here?

They all stop at deciding who to tell. None of them checks whether the replacement covers the way each account uses the feature. That is one lookup per usage pattern, available before any notice goes out. At Wexmoor it found 43 accounts with nowhere to go, 26 of them among the 84 heaviest users.

How do you define how heavily an account uses something?

Distinct weeks with at least one use in the trailing quarter, not total events. An account with four hundred events during one onboarding week is not a user and an account with one event every Monday is. Volume-ranked lists get that exactly backwards, which is why the top of them is usually wrong.

Is an account with no recent usage safe to remove quietly?

Check it against the same period a year earlier first. A trailing quarter is exactly the window that hides a quarterly close or an annual audit report. At Wexmoor 268 of 1,485 dormant accounts had used the feature in the same calendar month twelve months before, so 18% of that list was on a cycle rather than gone.

Why not just call the biggest accounts personally?

Because value is not usage. Wexmoor's top ARR decile held 231 accounts, of which 168 had not opened the feature in a quarter and only 28 were load-bearing. Calling that list means 168 unnecessary conversations and 56 accounts that use it every single week never hearing from a human.

How do you notify a scheduled job or an integration?

Not by email. Put the signal on the surface itself: a Deprecation field saying the endpoint is going, and a Sunset field carrying the date it stops responding. At Wexmoor 22 active accounts had every event attributed to a service account or a leaver, so no human existed to email.

What do we do about an account the replacement cannot serve?

Hold it out of the notice sequence and give it one of three outcomes, each with a date attached. The missing capability ships by a stated day, the account gets a written exemption to a stated day, or you tell them plainly there is no replacement and help them export. Never a dated notice they cannot meet.

How do we know the sunset is actually on track?

Measure migration against accounts that have a path, never against accounts notified. Wexmoor six weeks in read 96 of 205, or 46.8%, forecasting a thirteen-day slip. Against the 167 that could move it was 57.5% and four days of slack, with 38 accounts still walking into a cutover with nowhere to go.

Find out which accounts have nowhere to go

Send the usage export, every surface the feature is reachable from, and the announcement list. The first thing back is the count of heavy accounts the replacement cannot serve.

Stage my sunset notices