
Deprecation And Migration
Plan and execute safe sunsetting of APIs, features, or legacy systems while migrating users to a replacement without leaving hidden dependencies.
Overview
deprecation-and-migration is an agent skill most often used in Operate (also Build, Ship) that plans sunsetting and user migration so legacy code is removed safely instead of maintained indefinitely.
Install
npx skills add https://github.com/addyosmani/agent-skills --skill deprecation-and-migrationWhat is this skill?
- Frames code as liability with explicit maintenance cost (bugs, deps, security, onboarding)
- Triggers for replacement, sunsetting, consolidation, and dead-code removal
- Lifecycle mindset: deprecation planning starts at design time for new systems
- Decision support for maintain-vs-migrate on legacy systems
- Structured discipline for moving users safely from old to new implementations
Adoption & trust: 3.7k installs on skills.sh; 49.1k GitHub stars; 3/3 security scanners passed (skills.sh audits); trending (+200% hot-view momentum).
What problem does it solve?
You are carrying old APIs, features, or duplicate stacks that still have dependents but no clear, safe plan to turn them off.
Who is it for?
Solo builders maintaining APIs or features who must replace an implementation without stranding users or silent dependents.
Skip if: Greenfield prototypes with no users to migrate, or one-off deletes with zero external consumers and no coordination need.
When should I use this skill?
Removing old systems, APIs, or features; migrating users from one implementation to another; deciding whether to maintain or sunset existing code.
What do I get? / Deliverables
You get a deprecation and migration plan with explicit triggers, user communication, and cutover steps so liability shrinks without surprise outages.
- Deprecation timeline with notices and compatibility window
- Migration checklist for consumers and data or config moves
- Decision record for maintain vs sunset with rollback criteria
Recommended Skills
Journey fit
Spans multiple journey phases - primary shelf plus alternate fits below.
Deprecation and migration are ongoing production concerns—reducing liability while systems still run maps to Operate. Iterate is where you evolve or retire implementations based on cost, risk, and user movement rather than only greenfield Build work.
Where it fits
Define deprecation headers and dual-write period in the spec before coding the v2 API.
Review a PR that removes endpoints only after migration metrics show near-zero traffic on the old path.
Choose to sunset an unmaintained integration after weighing security patch cost against migration effort.
Cut scope by committing to retire a duplicate module instead of building a third variant.
How it compares
Use as a lifecycle and communication workflow instead of ad-hoc delete PRs that skip migration windows and consumer notice.
Common Questions / FAQ
Who is deprecation-and-migration for?
Indie builders and small teams who own APIs, libraries, or product features and need disciplined removal and user cutover—not just hiding old UI.
When should I use deprecation-and-migration?
Use it in Operate when deciding maintain vs sunset on legacy systems; in Build when designing a replacement and its deprecation timeline; in Ship when coordinating release trains that dual-run old and new paths; and in Validate when scope should exclude dead features you plan to
Is deprecation-and-migration safe to install?
It is process guidance only; review the Security Audits panel on this Prism page for the skill package source, and apply your own staging checks before production cutovers.
SKILL.md
READMESKILL.md - Deprecation And Migration
# Deprecation and Migration ## Overview Code is a liability, not an asset. Every line of code has ongoing maintenance cost — bugs to fix, dependencies to update, security patches to apply, and new engineers to onboard. Deprecation is the discipline of removing code that no longer earns its keep, and migration is the process of moving users safely from the old to the new. Most engineering organizations are good at building things. Few are good at removing them. This skill addresses that gap. ## When to Use - Replacing an old system, API, or library with a new one - Sunsetting a feature that's no longer needed - Consolidating duplicate implementations - Removing dead code that nobody owns but everybody depends on - Planning the lifecycle of a new system (deprecation planning starts at design time) - Deciding whether to maintain a legacy system or invest in migration ## Core Principles ### Code Is a Liability Every line of code has ongoing cost: it needs tests, documentation, security patches, dependency updates, and mental overhead for anyone working nearby. The value of code is the functionality it provides, not the code itself. When the same functionality can be provided with less code, less complexity, or better abstractions — the old code should go. ### Hyrum's Law Makes Removal Hard With enough users, every observable behavior becomes depended on — including bugs, timing quirks, and undocumented side effects. This is why deprecation requires active migration, not just announcement. Users can't "just switch" when they depend on behaviors the replacement doesn't replicate. ### Deprecation Planning Starts at Design Time When building something new, ask: "How would we remove this in 3 years?" Systems designed with clean interfaces, feature flags, and minimal surface area are easier to deprecate than systems that leak implementation details everywhere. ## The Deprecation Decision Before deprecating anything, answer these questions: ``` 1. Does this system still provide unique value? → If yes, maintain it. If no, proceed. 2. How many users/consumers depend on it? → Quantify the migration scope. 3. Does a replacement exist? → If no, build the replacement first. Don't deprecate without an alternative. 4. What's the migration cost for each consumer? → If trivially automated, do it. If manual and high-effort, weigh against maintenance cost. 5. What's the ongoing maintenance cost of NOT deprecating? → Security risk, engineer time, opportunity cost of complexity. ``` ## Compulsory vs Advisory Deprecation | Type | When to Use | Mechanism | |------|-------------|-----------| | **Advisory** | Migration is optional, old system is stable | Warnings, documentation, nudges. Users migrate on their own timeline. | | **Compulsory** | Old system has security issues, blocks progress, or maintenance cost is unsustainable | Hard deadline. Old system will be removed by date X. Provide migration tooling. | **Default to advisory.** Use compulsory only when the maintenance cost or risk justifies forcing migration. Compulsory deprecation requires providing migration tooling, documentation, and support — you can't just announce a deadline. ## The Migration Process ### Step 1: Build the Replacement Don't deprecate without a working alternative. The replacement must: - Cover all critical use cases of the old system - Have documentation and migration guides - Be proven in production (not just "theoretically better") ### Step 2: Announce and Document ```markdown ## Deprecation Notice: OldService **Status:** Deprecated as of 2025-03-01 **Replacement:** NewService (see migration guide below) **Removal date:** Advisory — no hard deadline yet **Reason:** OldServ