Agent skill

phased-delivery-plan

段階的リリース計画

Stars 163
Forks 31

Install this agent skill to your Project

npx add-skill https://github.com/majiayu000/claude-skill-registry/tree/main/skills/data/phased-delivery-plan

SKILL.md

civicship-api 段階的デリバリー計画

大きな機能を段階的にリリース可能な単位に分割し、リスクを最小化したデリバリー計画を策定します。フィーチャーフラグ、ロールバック計画、成功指標を含む実行可能なプランを生成します。

使用方法

bash
# 要件定義書から段階的計画を生成
/phased-delivery-plan docs/requirements/point-expiration.md

# 衝突レポートを踏まえた計画生成
/phased-delivery-plan "ポイント有効期限機能" --with-conflicts

引数:

  • $ARGUMENTS: 要件定義書のパス、または機能名
  • --with-conflicts: /check-requirement-delta の結果を考慮

デリバリー計画プロセス

ステップ1: 機能の分解(Feature Decomposition)

大きな機能を独立してリリース可能な小さな単位に分割:

markdown
## 機能分解

### 最終ゴール
「ポイント有効期限機能」を完全に実装

### 分解単位(Vertical Slices)

#### Phase 1: データ基盤(Infrastructure)
**目的:** 有効期限データを保存できるようにする
**スコープ:**
- Prismaスキーマ変更(`t_wallets.expiresAt` 追加)
- マイグレーション実行
- GraphQL型追加(`GqlWallet.expiresAt`)

**価値:**
- ユーザーには見えない(内部変更のみ)
- 次フェーズの前提条件

**リスク:** 🟢 Low
- 既存機能への影響なし
- ロールバック容易(カラム追加のみ)

---

#### Phase 2: 読み取り機能(Read-Only)
**目的:** 有効期限を表示できるようにする
**スコープ:**
- GraphQL Query に `expiresAt` フィールドを追加
- フロントエンドでの表示対応

**価値:**
- ユーザーがポイント有効期限を確認できる
- 運営が手動で有効期限を設定し、効果を確認できる

**リスク:** 🟢 Low
- 読み取りのみ(データ変更なし)
- 既存機能に影響なし

---

#### Phase 3: 手動設定機能(Manual)
**目的:** 管理者が手動で有効期限を設定できるようにする
**スコープ:**
- GraphQL Mutation `walletSetExpiration` 追加
- 管理画面での設定UI

**価値:**
- 特定のキャンペーンで有効期限を試験運用
- 小規模でのフィードバック収集

**リスク:** 🟡 Medium
- 手動設定による人為ミスの可能性
- ロールバック可能(設定を削除すればOK)

---

#### Phase 4: 自動付与機能(Automated)
**目的:** ポイント付与時に自動的に有効期限を設定
**スコープ:**
- WalletService に有効期限ロジック追加
- デフォルト有効期限の設定(例: 付与から1年)

**価値:**
- 全ポイントに自動的に有効期限が付与される
- 運用コストの削減

**リスク:** 🟡 Medium
- ビジネスロジックの変更
- 既存のポイント付与フローに影響

---

#### Phase 5: 失効通知機能(Notification)
**目的:** 有効期限切れ前にユーザーに通知
**スコープ:**
- バッチ処理で有効期限7日前のポイントを検出
- LINE通知送信

**価値:**
- ユーザーエクスペリエンスの向上
- ポイント失効の不満軽減

**リスク:** 🟢 Low
- 通知のみ(データ変更なし)
- 失敗しても本質的な機能に影響なし

---

#### Phase 6: 自動失効機能(Expiration)
**目的:** 有効期限切れポイントを自動的に失効
**スコープ:**
- バッチ処理で有効期限切れポイントを検出
- ポイント残高から減算

**価値:**
- 完全な有効期限機能の実現
- 運用の自動化

**リスク:** 🔴 High
- ポイント残高の変更(不可逆)
- ユーザーの資産に直接影響
- ロールバック困難

ステップ2: フェーズ間の依存関係

各フェーズの依存関係を明確化:

mermaid
graph TD
    P1[Phase 1: データ基盤] --> P2[Phase 2: 読み取り機能]
    P2 --> P3[Phase 3: 手動設定機能]
    P3 --> P4[Phase 4: 自動付与機能]
    P4 --> P5[Phase 5: 失効通知機能]
    P4 --> P6[Phase 6: 自動失効機能]
    P5 -.optional.-> P6

依存関係ルール:

  • Phase N は Phase N-1 が完了するまで開始不可
  • Phase 5 と Phase 6 は並行実装可能
  • Phase 6 は Phase 5 なしでも実装可能(推奨はセット)

ステップ3: フィーチャーフラグ戦略

各フェーズをフィーチャーフラグで制御:

markdown
## フィーチャーフラグ設計

### 環境変数ベースのフラグ

**ファイル:** `src/config/features.ts`

\`\`\`typescript
export const FEATURE_FLAGS = {
  // Phase 2: 有効期限の表示
  WALLET_EXPIRATION_DISPLAY: process.env.FEATURE_WALLET_EXPIRATION_DISPLAY === "true",

  // Phase 3: 手動設定
  WALLET_EXPIRATION_MANUAL_SET: process.env.FEATURE_WALLET_EXPIRATION_MANUAL_SET === "true",

  // Phase 4: 自動付与
  WALLET_EXPIRATION_AUTO_SET: process.env.FEATURE_WALLET_EXPIRATION_AUTO_SET === "true",

  // Phase 5: 失効通知
  WALLET_EXPIRATION_NOTIFICATION: process.env.FEATURE_WALLET_EXPIRATION_NOTIFICATION === "true",

  // Phase 6: 自動失効
  WALLET_EXPIRATION_AUTO_EXPIRE: process.env.FEATURE_WALLET_EXPIRATION_AUTO_EXPIRE === "true"
} as const;
\`\`\`

---

### GraphQLスキーマでのフラグ制御

\`\`\`typescript
// Resolver でフラグチェック
Query = {
  wallet: async (_, { id }, ctx) => {
    const wallet = await this.usecase.getWallet(id, ctx);

    // Phase 2 のフラグが OFF の場合、expiresAt を除外
    if (!FEATURE_FLAGS.WALLET_EXPIRATION_DISPLAY) {
      delete wallet.expiresAt;
    }

    return wallet;
  }
};

Mutation = {
  walletSetExpiration: async (_, { input }, ctx) => {
    // Phase 3 のフラグチェック
    if (!FEATURE_FLAGS.WALLET_EXPIRATION_MANUAL_SET) {
      throw new Error("FEATURE_NOT_ENABLED");
    }

    return this.usecase.setExpiration(input, ctx);
  }
};
\`\`\`

---

### フラグの段階的有効化

| Phase | 開発環境 | ステージング | 本番(10%) | 本番(50%) | 本番(100%) |
|-------|---------|------------|------------|------------|-------------|
| Phase 1 | Week 1 | Week 2 | - | - | Week 2 |
| Phase 2 | Week 2 | Week 3 | Week 4 | Week 5 | Week 6 |
| Phase 3 | Week 3 | Week 4 | Week 5 | Week 6 | Week 7 |
| Phase 4 | Week 5 | Week 6 | Week 7 | Week 8 | Week 9 |
| Phase 5 | Week 6 | Week 7 | Week 8 | - | Week 9 |
| Phase 6 | Week 7 | Week 8 | Week 9 | Week 10 | Week 11 |

**ロールアウト戦略:**
1. **開発環境:** 即座に有効化
2. **ステージング:** 1週間後に有効化
3. **本番(10%):** カナリアリリース、特定コミュニティのみ
4. **本番(50%):** 問題なければ半数に展開
5. **本番(100%):** 全ユーザーに展開

ステップ4: リスク評価とロールバック計画

各フェーズのリスクとロールバック手順を定義:

markdown
## リスク評価とロールバック計画

### Phase 1: データ基盤

**リスク:** 🟢 Low
- マイグレーション失敗の可能性: 5%
- 既存データへの影響: なし

**ロールバック手順:**
1. マイグレーションのロールバック
   \`\`\`bash
   pnpm db:migrate-rollback
   \`\`\`
2. Prisma Client の再生成
   \`\`\`bash
   pnpm db:generate
   \`\`\`
3. アプリケーション再起動

**ロールバック所要時間:** 5分

---

### Phase 2: 読み取り機能

**リスク:** 🟢 Low
- GraphQLスキーマの破壊的変更: なし(フィールド追加のみ)
- パフォーマンス影響: なし

**ロールバック手順:**
1. フィーチャーフラグを OFF
   \`\`\`bash
   export FEATURE_WALLET_EXPIRATION_DISPLAY=false
   \`\`\`
2. アプリケーション再起動(またはホットリロード)

**ロールバック所要時間:** 1分

---

### Phase 3: 手動設定機能

**リスク:** 🟡 Medium
- 管理者の誤操作: 30%
- 意図しない有効期限設定: 20%

**ロールバック手順:**
1. フィーチャーフラグを OFF
2. 誤って設定された有効期限をクリア
   \`\`\`sql
   UPDATE t_wallets SET expiresAt = NULL WHERE expiresAt < NOW();
   \`\`\`

**ロールバック所要時間:** 10分

**リスク軽減策:**
- 管理画面に確認ダイアログを追加
- 有効期限設定の監査ログ記録
- 設定前にプレビュー機能

---

### Phase 4: 自動付与機能

**リスク:** 🟡 Medium
- ビジネスロジックのバグ: 25%
- 全ポイントに影響: High Impact

**ロールバック手順:**
1. フィーチャーフラグを OFF
   \`\`\`bash
   export FEATURE_WALLET_EXPIRATION_AUTO_SET=false
   \`\`\`
2. 誤って設定された有効期限をクリア
   \`\`\`sql
   UPDATE t_wallets SET expiresAt = NULL WHERE createdAt > 'YYYY-MM-DD';
   \`\`\`

**ロールバック所要時間:** 15分

**リスク軽減策:**
- ステージング環境で十分なテスト
- カナリアリリース(10% → 50% → 100%)
- リアルタイム監視(有効期限設定数のメトリクス)

---

### Phase 5: 失効通知機能

**リスク:** 🟢 Low
- 通知送信失敗: 10%
- 過剰な通知: 15%

**ロールバック手順:**
1. フィーチャーフラグを OFF
   \`\`\`bash
   export FEATURE_WALLET_EXPIRATION_NOTIFICATION=false
   \`\`\`
2. バッチ処理の停止

**ロールバック所要時間:** 5分

**リスク軽減策:**
- 通知送信のレート制限
- ユーザーごとの通知頻度制御(1日1回まで)
- オプトアウト機能

---

### Phase 6: 自動失効機能

**リスク:** 🔴 High
- ポイント残高の誤減算: 15%
- ユーザー資産への影響: Critical Impact
- ロールバック困難: 失効したポイントは復元困難

**ロールバック手順:**
1. **即座にフラグOFF**
   \`\`\`bash
   export FEATURE_WALLET_EXPIRATION_AUTO_EXPIRE=false
   \`\`\`
2. **バッチ処理の緊急停止**
3. **影響調査**
   \`\`\`sql
   SELECT userId, SUM(amount) as expiredPoints
   FROM t_point_expiration_logs
   WHERE executedAt > 'YYYY-MM-DD HH:MM:SS'
   GROUP BY userId;
   \`\`\`
4. **ポイント復元(可能な場合)**
   \`\`\`sql
   -- 失効ログから復元
   INSERT INTO t_point_transactions (userId, amount, type, reason)
   SELECT userId, amount, 'REFUND', 'Expiration rollback'
   FROM t_point_expiration_logs
   WHERE executedAt > 'YYYY-MM-DD HH:MM:SS';
   \`\`\`

**ロールバック所要時間:** 30分〜2時間

**リスク軽減策:**
- **失効ログの記録:** 失効前に別テーブルにログ保存
  \`\`\`prisma
  model t_point_expiration_logs {
    id          String   @id @default(cuid())
    userId      String
    amount      Int
    expiresAt   DateTime
    executedAt  DateTime @default(now())
  }
  \`\`\`
- **ドライラン:** 本番実行前にシミュレーション
- **段階的実行:** 1日100ユーザーずつなど、少数から開始
- **手動承認:** 最初の1ヶ月は自動実行せず、管理者が確認後に実行

ステップ5: 成功指標(KPI)の設定

各フェーズの成功を測定する指標:

markdown
## フェーズごとの成功指標

### Phase 1: データ基盤

**技術指標:**
- [ ] マイグレーション成功率: 100%
- [ ] TypeScriptコンパイルエラー: 0件
- [ ] テストカバレッジ: 変更なし

**判断基準:**
- 全ての指標が基準を満たせば Phase 2 へ進む

---

### Phase 2: 読み取り機能

**技術指標:**
- [ ] GraphQLクエリエラー率: < 0.1%
- [ ] レスポンスタイム劣化: < 5%
- [ ] N+1クエリ: 検出されない

**ビジネス指標:**
- [ ] ユーザーからの問い合わせ: 0件
- [ ] クライアントアプリのクラッシュ: 0件

**判断基準:**
- 1週間の本番運用で問題なければ Phase 3 へ進む

---

### Phase 3: 手動設定機能

**技術指標:**
- [ ] Mutationエラー率: < 1%
- [ ] 有効期限設定の成功率: > 99%

**ビジネス指標:**
- [ ] 管理者の操作ミス: < 5%
- [ ] ユーザーからの問い合わせ: < 10件/週

**判断基準:**
- 2週間の運用で問題なければ Phase 4 へ進む
- 操作ミスが多い場合はUIを改善

---

### Phase 4: 自動付与機能

**技術指標:**
- [ ] 有効期限自動設定の成功率: > 99.9%
- [ ] ポイント付与のエラー率: < 0.1%

**ビジネス指標:**
- [ ] ユーザーからの苦情: < 5件/週
- [ ] 有効期限に関する問い合わせ: < 20件/週

**判断基準:**
- カナリアリリース(10%)で1週間問題なければ 50% へ
- 50% で1週間問題なければ 100% へ

---

### Phase 5: 失効通知機能

**技術指標:**
- [ ] LINE通知送信成功率: > 95%
- [ ] バッチ処理の実行時間: < 10分

**ビジネス指標:**
- [ ] 通知のオプトアウト率: < 10%
- [ ] ユーザーエンゲージメント: 通知後のアプリ起動率 > 20%

**判断基準:**
- オプトアウト率が高い場合は通知内容を見直し
- 問題なければ Phase 6 へ進む

---

### Phase 6: 自動失効機能

**技術指標:**
- [ ] 失効処理の成功率: 100%(エラー許容なし)
- [ ] 失効ログの記録率: 100%

**ビジネス指標:**
- [ ] ユーザーからの苦情: < 10件/週
- [ ] ポイント失効に関する問い合わせ: < 30件/週
- [ ] ポイント復元リクエスト: < 5件/週

**判断基準:**
- 最初の1ヶ月は手動承認制
- 問題なければ完全自動化へ移行

ステップ6: デリバリースケジュール

具体的なスケジュールとマイルストーン:

markdown
## デリバリースケジュール

### 全体スケジュール(11週間)

| Week | Phase | タスク | 環境 | マイルストーン |
|------|-------|--------|------|---------------|
| 1 | Phase 1 | データ基盤実装 | 開発 | スキーマ変更完了 |
| 2 | Phase 1 | マイグレーション実行 | 本番 | 🎯 データ基盤リリース |
| 2-3 | Phase 2 | 読み取り機能実装 | 開発 | GraphQL対応完了 |
| 3-4 | Phase 2 | フロントエンド対応 | ステージング | UI実装完了 |
| 4-6 | Phase 2 | カナリアリリース | 本番 | 🎯 読み取り機能リリース |
| 3-4 | Phase 3 | 手動設定実装 | 開発 | 管理画面実装完了 |
| 5-7 | Phase 3 | 試験運用 | 本番 | 🎯 手動設定リリース |
| 5-6 | Phase 4 | 自動付与実装 | 開発 | ロジック実装完了 |
| 7-9 | Phase 4 | カナリアリリース | 本番 | 🎯 自動付与リリース |
| 6-7 | Phase 5 | 失効通知実装 | 開発 | バッチ処理実装完了 |
| 8-9 | Phase 5 | 通知配信開始 | 本番 | 🎯 失効通知リリース |
| 7-8 | Phase 6 | 自動失効実装 | 開発 | 失効ロジック実装完了 |
| 9-11 | Phase 6 | 手動承認期間 | 本番 | 🎯 自動失効リリース |

---

### 週次の詳細スケジュール

#### Week 1-2: Phase 1 データ基盤

**Day 1-2:**
- [ ] Prismaスキーマ変更
- [ ] マイグレーションファイル作成
- [ ] GraphQL型定義追加

**Day 3-4:**
- [ ] 開発環境でマイグレーション実行
- [ ] ユニットテスト作成
- [ ] コードレビュー

**Day 5:**
- [ ] ステージング環境へデプロイ
- [ ] 統合テスト実行

**Week 2 Monday:**
- [ ] 🚀 本番環境へマイグレーション実行
- [ ] 監視開始

**判断ポイント:**
- マイグレーション成功 → Phase 2 へ進む
- 失敗 → ロールバック、原因調査

---

#### Week 2-6: Phase 2 読み取り機能

**Week 2-3:**
- [ ] GraphQL Resolver実装
- [ ] フロントエンド対応
- [ ] E2Eテスト作成

**Week 4:**
- [ ] 🚀 カナリアリリース(10%)
- [ ] メトリクス監視
- [ ] ユーザーフィードバック収集

**Week 5:**
- [ ] 🚀 50% ロールアウト
- [ ] パフォーマンス監視

**Week 6:**
- [ ] 🚀 100% ロールアウト
- [ ] 🎯 Phase 2 完了

**判断ポイント:**
- エラー率 < 0.1% → 次へ進む
- エラー率 > 1% → ロールバック

---

[Week 7-11: Phase 3-6 の詳細スケジュール...]

---

### マイルストーン一覧

| # | マイルストーン | 完了条件 | 予定日 |
|---|---------------|---------|--------|
| 1 | データ基盤リリース | マイグレーション成功 | Week 2 |
| 2 | 読み取り機能リリース | 100%ロールアウト完了 | Week 6 |
| 3 | 手動設定リリース | 管理者が使用可能 | Week 7 |
| 4 | 自動付与リリース | 全ポイントに自動設定 | Week 9 |
| 5 | 失効通知リリース | 通知配信開始 | Week 9 |
| 6 | 自動失効リリース | 完全自動化 | Week 11 |

ステップ7: チーム間の調整

各フェーズでの関係者とコミュニケーション:

markdown
## チーム間の調整

### Phase 1: データ基盤

**関係者:**
- バックエンドチーム(実装担当)
- インフラチーム(マイグレーション実行)

**コミュニケーション:**
- Week 1 Monday: キックオフミーティング
- Week 1 Friday: コードレビュー
- Week 2 Monday: 本番マイグレーション立ち会い

---

### Phase 2: 読み取り機能

**関係者:**
- バックエンドチーム
- フロントエンドチーム(iOS, Android, Web)
- QAチーム

**コミュニケーション:**
- Week 2: GraphQL API仕様の共有
- Week 3: フロントエンド実装進捗確認
- Week 4: カナリアリリース前のリハーサル

---

### Phase 3-6: 以降のフェーズ

**関係者:**
- 全開発チーム
- プロダクトオーナー
- カスタマーサポート

**コミュニケーション:**
- 週次の進捗報告
- リリース前のステークホルダーレビュー
- リリース後の振り返り

ステップ8: 監視とアラート

各フェーズの監視項目:

markdown
## 監視とアラート設定

### Phase 1: データ基盤

**監視項目:**
- マイグレーション実行時間
- データベース接続エラー

**アラート:**
- マイグレーション失敗時に即座通知

---

### Phase 2: 読み取り機能

**監視項目:**
- GraphQLクエリエラー率
- `wallet.expiresAt` フィールドのnull率
- レスポンスタイム(P50, P95, P99)

**アラート:**
- エラー率 > 1% で警告
- エラー率 > 5% で緊急通知(自動ロールバック検討)

---

### Phase 4: 自動付与機能

**監視項目:**
- 有効期限自動設定数(時間別)
- 設定失敗数
- 平均有効期限日数

**アラート:**
- 設定失敗率 > 1% で警告
- 平均有効期限が異常値(< 1日 or > 5年)で緊急通知

**ダッシュボード:**
```typescript
// Datadog / Grafana
metrics.increment("wallet.expiration.auto_set", {
  status: "success",
  duration_days: expirationDays
});

Phase 6: 自動失効機能

監視項目:

  • 失効処理実行数
  • 失効ポイント総額
  • 失効ユーザー数

アラート:

  • 失効ユーザー数 > 100/日 で警告(異常値の可能性)
  • 失効処理失敗で即座緊急通知
  • 失効ポイント総額 > 100万pt/日 で確認通知

ダッシュボード:

typescript
metrics.increment("wallet.expiration.executed", {
  user_count: expiredUserCount,
  total_points: totalExpiredPoints
});

---

### ステップ9: ドキュメント更新計画

各フェーズでのドキュメント更新:

```markdown
## ドキュメント更新計画

### Phase 1: データ基盤

**更新対象:**
- [ ] `prisma/schema.prisma` のコメント
- [ ] `docs/database/schema.md` にテーブル仕様追加
- [ ] `CHANGELOG.md` にマイグレーション記録

---

### Phase 2: 読み取り機能

**更新対象:**
- [ ] GraphQLスキーマのdescription
- [ ] `docs/api/graphql.md` にフィールド説明追加
- [ ] フロントエンド向けAPI仕様書

---

### Phase 4: 自動付与機能

**更新対象:**
- [ ] `README.md` に機能説明追加
- [ ] `docs/handbook/FEATURES.md` に詳細仕様追加
- [ ] 運用マニュアル(有効期限の設定方法)

---

### Phase 6: 自動失効機能

**更新対象:**
- [ ] ユーザー向けFAQ
- [ ] カスタマーサポート向けマニュアル
- [ ] 利用規約(ポイント有効期限に関する条項)

ステップ10: デリバリープランサマリー

全体像を1ページにまとめたサマリー:

markdown
# デリバリープランサマリー

**機能名:** ポイント有効期限機能
**総工数:** 11週間
**総リスク評価:** 🟡 Medium

---

## フェーズ一覧

| Phase | 期間 | リスク | 依存関係 | ロールバック |
|-------|------|--------|----------|-------------|
| 1. データ基盤 | Week 1-2 | 🟢 Low | なし | 5分 |
| 2. 読み取り機能 | Week 2-6 | 🟢 Low | Phase 1 | 1分 |
| 3. 手動設定 | Week 3-7 | 🟡 Medium | Phase 2 | 10分 |
| 4. 自動付与 | Week 5-9 | 🟡 Medium | Phase 3 | 15分 |
| 5. 失効通知 | Week 6-9 | 🟢 Low | Phase 4 | 5分 |
| 6. 自動失効 | Week 7-11 | 🔴 High | Phase 4 | 30分〜2時間 |

---

## リスク緩和策

### 🔴 High Risk: Phase 6 自動失効
- 失効ログの記録(復元用)
- ドライラン(シミュレーション)
- 手動承認期間(1ヶ月)
- 段階的実行(100ユーザー/日から開始)

### 🟡 Medium Risk: Phase 3-4
- フィーチャーフラグによる制御
- カナリアリリース(10% → 50% → 100%)
- リアルタイム監視とアラート

---

## 成功の定義

### 技術的成功
- [ ] 全フェーズで本番エラー率 < 1%
- [ ] ロールバック実行回数: 0回
- [ ] パフォーマンス劣化: < 5%

### ビジネス的成功
- [ ] ユーザーからの苦情: < 50件(全期間)
- [ ] ポイント失効に関する問い合わせ: < 100件/月
- [ ] 機能利用率: 有効期限付きポイント > 80%

---

## 中止・延期の判断基準

以下の条件に該当する場合、次フェーズへの進行を中止:

- [ ] エラー率 > 5% が24時間継続
- [ ] Critical な障害発生
- [ ] ユーザーからの苦情 > 100件/週
- [ ] ロールバック失敗

**中止時のアクション:**
1. 即座にフィーチャーフラグOFF
2. 全ステークホルダーへの通知
3. 原因調査と対策会議
4. 再開判断(修正後に再審査)

---

## 承認

**プランレビュー担当者:**
- [ ] プロダクトオーナー
- [ ] テックリード
- [ ] インフラリード
- [ ] QAリード

**承認日:** YYYY-MM-DD

活用例

例1: ポイント有効期限機能

bash
/phased-delivery-plan "ポイント有効期限機能"

生成される計画:

  • 6フェーズ、11週間のデリバリープラン
  • フィーチャーフラグ設定
  • 各フェーズのロールバック手順
  • 監視・アラート設定

例2: 複数ウォレット対応

bash
/phased-delivery-plan docs/requirements/multi-wallet.md --with-conflicts

生成される計画:

  • /check-requirement-delta で検出された衝突を考慮
  • 破壊的変更を最小化する段階的移行
  • 非推奨化期間の設定(6ヶ月)
  • クライアント移行のスケジュール

注意事項

デリバリープランの原則

  • 小さく始める: 最初のフェーズは最小機能
  • 価値を早く届ける: 各フェーズでビジネス価値を提供
  • リスクを分散: High Riskは最後のフェーズに
  • ロールバック可能: 各フェーズで後戻り可能に
  • 測定可能: 成功指標を明確に

よくある失敗

  • 大きすぎるフェーズ: 1フェーズ > 2週間は分割検討
  • 依存関係の無視: Phase N が Phase N+1 に依存
  • ロールバック不可: 不可逆な変更を最初に実施
  • 監視なし: メトリクスを取らずにリリース

参考資料

以下については @CLAUDE.md を参照してください:

  • フィーチャーフラグの実装
  • カナリアリリースの方法
  • 監視・アラート設定
  • ロールバック手順

Expand your agent's capabilities with these related and highly-rated skills.

Didn't find tool you were looking for?

Be as detailed as possible for better results