homebridge-rabbitair
Version:
Homebridge plugin for RabbitAir air purifiers
419 lines (303 loc) • 12.6 kB
Markdown
# Deprecation Workflow
## Overview
The deprecation workflow manages the planned sunset of features. It uses a **3-phase approach** (warnings → disabled by default → removal) to ensure smooth user migration with minimal disruption.
## When to Use
Use `/speckit.deprecate` when:
- Feature no longer aligns with product vision
- Better alternative exists and users should migrate
- Feature has low/no usage
- Maintenance burden is high relative to value
- Security/compliance concerns
- Technical debt reduction initiative
**Do NOT use `/speckit.deprecate` for**:
- Quick bug fixes → use `/speckit.bugfix` instead
- Temporary feature disabling → use feature flags
- Emergency removal → explain why it's urgent first
- Features still actively used → understand impact first
## Core Principles
1. **Users need time to migrate** - Don't surprise them with sudden removal
2. **Communication is key** - Over-communicate throughout process
3. **Provide alternatives** - Give users a migration path
4. **Be patient** - Full sunset typically takes 3-6 months
## Process
### Phase 0: Planning & Preparation (2-4 weeks)
1. **Analyze usage** - How many users? How often?
2. **Run dependency scan** - What code depends on this feature?
3. **Assess business impact** - Revenue? Support burden?
4. **Determine timeline** - How long for each phase?
5. **Identify alternative** - Where should users go?
6. **Get approvals** - Product, Engineering, Support sign-off
### Phase 1: Warnings & Communication (1-3 months)
**Goal**: Inform users, provide migration resources
- Add deprecation warnings to UI
- Add console warnings/logs
- Update API with deprecation headers
- Email all active users
- Publish migration guide
- Brief support team
- Monitor usage trends
**Success Criteria**: All users notified, migration guide available
### Phase 2: Disabled by Default (1-2 months)
**Goal**: Feature off for new users, opt-in for existing users
- Feature disabled by default
- Allow opt-in via settings if needed
- Stronger warnings when enabled
- Personal outreach to remaining users
- Monitor opt-in rate
**Success Criteria**: < 5% of users still opted-in
### Phase 3: Complete Removal (Final)
**Goal**: Remove all code and clean up
- Remove feature code
- Drop database tables
- Remove API endpoints
- Remove tests
- Archive documentation
- Final notice to any remaining users
**Success Criteria**: Code removed, no regressions, zero usage
## Quality Gates
- ✅ Dependency scan MUST be run to identify affected code
- ✅ Migration guide MUST be created before Phase 1
- ✅ All three phases MUST complete in sequence (no skipping)
- ✅ Stakeholder approvals MUST be obtained before starting
- ✅ 48-hour stability period MUST be observed post-removal
## Files Created
```
specs/
└── deprecate/
└── 001-edit-profile-form/
├── deprecation.md # Deprecation plan (created by /speckit.deprecate)
├── dependencies.md # Auto-generated dependency scan (created by /speckit.deprecate)
├── plan.md # Implementation plan (created by /speckit.plan after review)
└── tasks.md # Phased tasks (created by /speckit.tasks after plan review)
```
## Command Usage
```bash
/speckit.deprecate 014 "low usage (< 1% users) and high maintenance burden"
```
This will:
1. Find original feature `014-edit-profile-form`
2. Run dependency scan automatically
3. Create branch `deprecate/001-edit-profile-form`
4. Generate `deprecation.md` with plan template
5. Generate `dependencies.md` with scan results
6. Set `SPECIFY_DEPRECATE` environment variable
7. Show "Next Steps" for checkpoint-based workflow
**Next steps after running the command:**
1. Review `deprecation.md` and `dependencies.md` - are all dependencies identified?
2. Assess business impact - get stakeholder approvals for deprecation
3. Define 3-phase timeline - how long should each phase take?
4. Create migration guide for users
5. Run `/speckit.plan` to create phased implementation plan
6. Review the plan - is timeline realistic? Communication strategy solid?
7. Run `/speckit.tasks` to break down into phase-specific tasks
8. Review the tasks - are all 3 phases covered? Communication tasks included?
9. Run `/speckit.implement` to execute the deprecation (this will span months)
## Example Deprecation Plan
```markdown
# Deprecation Plan: Edit Profile Form (Old Version)
**Deprecation ID**: deprecate-001
**Original Feature**: specs/014-edit-profile-form/
**Status**: Phase 1 (Warnings)
## Deprecation Timeline
**Deprecation Announced**: 2025-10-01
**Phase 1 Start (Warnings)**: 2025-10-01
**Phase 2 Start (Disabled)**: 2025-12-01 (2 months)
**Phase 3 Start (Removal)**: 2026-02-01 (4 months total)
**Total Sunset Period**: 4 months
## Rationale
### Why Deprecate?
- [X] Replaced by better alternative (new profile editor with live preview)
- [X] Low usage (0.8% of users in last 30 days)
- [X] High maintenance burden (12 bug tickets in 6 months)
### Supporting Data
**Usage Statistics**:
- Active users (last 30 days): 42 out of 5,000 (0.84%)
- API calls (last 30 days): 127
- Feature engagement: Declining 15% month-over-month
**Maintenance Cost**:
- LOC maintained: 1,245
- Bug tickets: 12 in last 6 months
- Engineering hours/month: ~4 hours
- Support tickets: 8/month
**Business Impact**:
- Revenue: Negligible (<$50/month estimated)
- Strategic value: Low (superseded by new editor)
## Affected Users
### User Segments
**Internal Users**:
- QA team: Uses for testing (can migrate easily)
**External Users**:
- 42 active users in last 30 days
- Mostly power users who prefer old UI
### Migration Path
**Recommended Alternative**: New Profile Editor (feature 023)
**Why better**:
- Live preview of changes
- Drag-and-drop avatar upload
- Auto-save functionality
- Mobile-optimized
**Migration complexity**: Easy (< 5 minutes)
**Migration guide**: `/docs/migrating-from-old-profile-editor`
## Dependencies (from scan)
**Code Dependencies**:
- `app/routes/profile.edit.tsx` (direct feature file)
- `app/components/EditProfileForm.tsx` (direct feature file)
- `app/routes/settings.tsx` (imports EditProfileForm)
**Risk Level**: Low - Only 1 external dependency
## Phase 1: Warnings (Oct 1 - Dec 1)
**Technical Changes**:
- Banner in old profile editor: "This editor will be removed Feb 1. Switch to new editor."
- Console warning when rendering old component
- API response includes `Deprecation` header
**Communication**:
- Email to 42 active users
- Blog post announcement
- In-app notification
- Support team briefing
## Phase 2: Disabled by Default (Dec 1 - Feb 1)
**Technical Changes**:
- Old editor disabled by default
- Opt-in via settings toggle
- Modal warning before enabling
- Stronger deprecation notice
**Communication**:
- Email reminder to remaining users
- Personal outreach to high-usage accounts
## Phase 3: Complete Removal (Feb 1+)
**Technical Changes**:
- Remove all old editor code
- Remove routes
- Update settings page
- Archive documentation
**Communication**:
- Final warning email
- Changelog entry
```
## Dependency Scan Output
The `scan-dependencies.sh` script generates:
```markdown
# Dependency Scan Results
**Feature**: 014-edit-profile-form
**Scan Date**: 2025-10-01
## Feature Files (Created by This Feature)
- `app/routes/profile.edit.tsx` (245 lines)
- `app/components/EditProfileForm.tsx` (180 lines)
- `tests/profile-edit.test.ts` (95 lines)
## Code Dependencies (Other Files Importing Feature Files)
Files importing `app/components/EditProfileForm.tsx`:
- `app/routes/settings.tsx`
## Summary
- **Feature Files**: 3
- **Dependency Categories**: 1
✅ **Low Risk**: This feature appears mostly isolated. Deprecation should be straightforward.
```
## Checkpoint-Based Workflow
The deprecation workflow uses checkpoints to ensure proper planning and stakeholder alignment before executing a multi-month sunset:
### Phase 1: Analysis & Dependency Scan
- **Command**: `/speckit.deprecate 014 "reason"`
- **Creates**: `deprecation.md` plan template and auto-generated `dependencies.md`
- **Checkpoint**: Review dependencies and usage data - is deprecation justified? Are there hidden dependencies the scan missed?
### Phase 2: Stakeholder Alignment & Timeline Planning
- **Command**: `/speckit.plan`
- **Creates**: `plan.md` with 3-phase timeline and communication strategy
- **Checkpoint**: Review plan - get stakeholder approvals (Product, Engineering, Support). Is timeline realistic for user migration? Is communication strategy comprehensive?
### Phase 3: Task Breakdown
- **Command**: `/speckit.tasks`
- **Creates**: `tasks.md` with phased tasks across all 3 deprecation phases
- **Checkpoint**: Review tasks - are all 3 phases represented? Are communication tasks included for each phase? Migration guide creation planned?
### Phase 4: Phased Execution (Spans 3-6 months)
- **Command**: `/speckit.implement`
- **Executes**: Tasks across months, one phase at a time
- **Result**: Feature successfully sunset with users migrated to alternative
**Why checkpoints matter for deprecation**: A poorly planned deprecation can damage user trust and cause churn. The checkpoint after dependency scan ensures you understand impact. The checkpoint after planning ensures stakeholder alignment. The multi-month execution ensures users have adequate time to migrate.
## Tips
### Setting Realistic Timelines
**Phase 1 Duration** (Warnings):
- Internal/power users: 1 month minimum
- Consumer product: 2-3 months
- Enterprise/API: 6-12 months (longer contracts)
**Phase 2 Duration** (Disabled):
- Low-stakes feature: 1 month
- Medium-stakes: 2 months
- High-stakes: 3+ months
**Total Sunset**:
- Minor feature: 3 months
- Major feature: 6 months
- Core functionality: 12+ months
### Effective Communication
**Email Template**:
```
Subject: [Feature Name] will be retired on [Date]
Dear [User],
We're writing to let you know that [Feature Name] will be retired on [Date].
Why: [Brief, honest reason]
What to do: We recommend migrating to [Alternative]. Here's a guide: [Link]
Timeline:
- Now - [Date]: Feature available with warnings
- [Date] - [Date]: Disabled by default (opt-in available)
- [Date]: Completely removed
Questions? Reply to this email or contact support.
Thanks for your understanding,
[Team]
```
### Handling Pushback
**Common objections**:
1. **"I like the old one better"**
- Acknowledge their preference
- Explain the maintenance/strategic reasons
- Offer to incorporate feedback into new version
2. **"I don't have time to migrate"**
- Offer migration assistance
- Extend timeline if many users feel this way
- Provide detailed migration guide
3. **"This breaks my workflow"**
- Understand their workflow
- Find equivalent in new version
- Consider if feature gap exists
4. **"You're breaking backward compatibility"**
- For APIs: Valid concern, be very careful
- Offer versioned API if possible
- Give very long timeline (12+ months)
### Measuring Success
Track these metrics:
- **Migration rate**: % of users who switched
- **Opt-in rate** (Phase 2): How many came back?
- **Support tickets**: Are users struggling?
- **Sentiment**: What are users saying?
### When to Abort Deprecation
Consider stopping if:
- Usage increases instead of decreases (users need it more than you thought)
- Major customers threaten to churn
- No suitable alternative emerges
- Engineering cost to remove is too high
- Business circumstances change
## Integration with Constitution
This workflow upholds:
- **Section IV: Progressive Enhancement** - Phased approach prevents disruption
- **Section VI: Workflow Selection** - Proper workflow for feature sunset
- **Quality Gates** - Dependency analysis and approvals required
## Related Workflows
- **Modify** - For changing features rather than removing
- **Specify** - For creating the replacement feature
## Communication Templates
### API Deprecation Header
```
Deprecation: version="1.0"
Sunset: "2026-02-01T00:00:00Z"
Link: <https://example.com/docs/migration-guide>; rel="deprecation"
```
### In-App Warning
```
⚠️ This feature will be removed on February 1, 2026
We recommend switching to the new [Feature Name].
[View Migration Guide] [Switch Now] [Remind Me Later]
```
### Console Warning
```javascript
console.warn(
'[DEPRECATED] OldFeature will be removed on 2026-02-01. ' +
'Please migrate to NewFeature. See: https://example.com/migration'
)
```
---
*Deprecation Workflow Documentation - Part of Specify Extension System*