Safe deprecation of features and migration between versions. Use when removing features, changing APIs, or migrating data schemas. Covers deprecation notices, migration guides, and sunset timelines.
Scanned 9/8/2026
Install to Claude Code
npx -y skills add VidyaBodepudi/Code-Skills --skill deprecation-and-migration --agent claude-codeInstalls into .claude/skills of the current project.
Are you the author of Deprecation And Migration?
Add the live security badge to your README — it updates automatically with every re-scan.
[](https://www.skillsdirectory.com/skills/vidyabodepudi-deprecation-and-migration)More formats (shields.io, HTML) on the badges page.
---
name: deprecation-and-migration
description: >
Safe deprecation of features and migration between versions. Use
when removing features, changing APIs, or migrating data schemas.
Covers deprecation notices, migration guides, and sunset timelines.
version: 1.0.0
permissions:
- fs.read
- fs.write
- shell.exec
triggers:
- context: "deprecating a feature"
- context: "removing an API endpoint"
- context: "migrating data schemas"
- command: "/ship"
platforms:
- claude-code
- cursor
- gemini-cli
- copilot
- codex
- opencode
- windsurf
- kiro
dependencies:
- git-workflow-and-versioning@^1.0.0
author: codehands-core
signed: true
tier: 2
---
## Overview
Deprecation is making a promise: "this will be removed, here's what to use instead, and here's how much time you have." This skill ensures deprecated features have clear notices, migration paths, and respectful timelines.
## When to Use
- When removing a feature or API endpoint
- When changing a public API signature (breaking change)
- When migrating database schemas
- When replacing one library/tool with another
- NOT for internal-only changes with no external consumers
## Process
### 1. Deprecation Notice
Before removing anything, add a deprecation notice:
```typescript
/**
* @deprecated Use `newFunction()` instead. Will be removed in v3.0.0.
*/
function oldFunction() { ... }
```
### 2. Migration Guide
Write a migration guide:
```markdown
## Migrating from v1 to v2
### Breaking Changes
1. `oldFunction()` removed → use `newFunction()`
2. `/api/v1/users` removed → use `/api/v2/users`
### Step-by-Step
1. Update import: `import { newFunction } from 'package'`
2. Replace all calls to `oldFunction(a, b)` with `newFunction({ a, b })`
3. Run tests to verify
```
### 3. Sunset Timeline
- **Deprecation notice**: v2.0 (current release)
- **Last supported version**: v2.x (minimum 1 major version)
- **Removal**: v3.0 (never remove in a minor/patch version)
## Common Rationalizations
| Rationalization | Reality |
|---|---|
| "Nobody uses this feature" | If you don't have usage metrics, you don't know. Add deprecation logging first, then decide. |
| "We can just remove it" | Removing without notice breaks consumers. Even internal consumers. Deprecate first. |
## Red Flags
- Removing features without deprecation notice
- Breaking changes in minor/patch versions
- No migration guide for breaking changes
- No usage metrics before deciding to deprecate
## Verification
- [ ] Deprecation notice with replacement and removal version
- [ ] Migration guide written
- [ ] Breaking changes in CHANGELOG
- [ ] Major version bump for breaking changes (semver)
## See Also
- `codehands:git-workflow-and-versioning` — Semver for breaking changes
- `codehands:documentation-and-adrs` — ADR for deprecation decision

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.
No comments yet. Be the first to comment!