The Shutdown Procedure Discipline for Decommissioning Services
Most services that should be retired are not. The 6-step procedure that actually retires services, with the bugs that hide in step 4.
The six steps
1. Communicate retirement timeline. 90 days notice for internal consumers; 6 months for external.
2. Add deprecation warnings to logs and responses. Visibility before removal.
3. Identify and migrate consumers. Each consumer team has an owner; tracked to completion.
4. Stop accepting new traffic. The most error-prone step; some consumer always missed migration.
5. Wait. Quiet period of 30 days during which the service runs but is unused.
6. Tear down. Code, infrastructure, runbooks, dashboards. Leave nothing behind.
What hides in step 4
Forgotten consumers. A scheduled job in another team's repo that nobody updated.
External callers you did not know about. Customers integrated against an internal endpoint that became external.
Caching layers. Stale references in caches outlive the service.
Why bother
Operational cost. Services that exist consume oncall attention even when unused.
Cognitive cost. Engineers cannot tell what is real and what is dead.
Security cost. Unmaintained services accumulate vulnerabilities.