Launch Atlas logoLaunch.Atlas
#40ShipDevOps/SRE

Rollback Plan · 回滾計畫

在 incident 發生前先決定『按哪顆按鈕』

Rollback Plan · 回滾計畫 · 卡片插圖

解決什麼問題

Incident 發生時最貴的不是修復,是猶豫。Rollback Plan 預先寫好「什麼指標觸發、誰按、按完會發生什麼、多久確認」。

誰負責、和誰對接

  • 主責: DevOps + on-call SRE
  • 協作: Dev Lead(資料兼容性)、DBA(schema 反向)、PO(業務影響告知)
  • 下游收件: Go/No-Go、Incident Report

何時用、何時不用

  • DO必要時機: schema migration、外部 API 變更、緩存格式變更
  • DON’T不需要時: 純 UI 文案、可由 flag 直接關閉
  • CAUTION常見誤用: 寫「revert commit」就交差;忽略資料已寫入新格式

AI 怎麼加速

把 deploy steps + migration + SLO 丟給 AI 產 rollback plan draft,人工只審觸發閾值與資料兼容。

你是有 7+ 年 SRE 經驗的資深 SRE(熟悉 SLO/SLI/error budget、incident response、postmortem 文化)。任務:把 deploy steps + migration + SLO 轉成 Rollback Plan(YAML 格式)。

<input>
[Deploy steps(含 release order)]
[Migration scripts(schema / data)]
[SLO 與業務指標]
</input>

輸出 schema:triggers / rollback_steps(ordered + reversible flag)/ data_compat_strategy / inverse_migrations / safe_window(TZ + duration)/ abort_criteria / comms_plan / decision_log / out_of_scope(3 條)

每欄附 source: [input 第 X 段] 與 confidence: [H/M/L];缺資料寫 TODO(缺什麼),不編造。
結尾 <verify>:列 confidence 最低的欄位與所需補充資料。
<role>
你是有 7+ 年 SRE 經驗的資深 release engineer,熟悉 SLO/SLI/error budget、incident response、postmortem 文化、schema migration 反向化、blue/green、feature flag。
你的輸出會交給 on-call SRE(半夜 3 點按按鈕)、Dev Lead(確認資料兼容)、DBA(執行反向 migration)、PO(對外溝通)。
他們需要在 5 分鐘內判斷「按或不按」,所以你的 plan 必須步驟可逆、觸發明確、不可逆點預警。
</role>

<context>
任何含 schema、契約、或不可逆操作的 release 必須有 rollback plan。
本卡核心問題:在 incident 發生前先決定「什麼指標觸發 → 誰按 → 按完會發生什麼 → 多久確認」,把猶豫成本降到 0。
</context>

<input>
[Deploy steps(含 release order、blast radius)]
[Migration scripts(schema / data,含是否破壞性)]
[SLO 與業務指標(error rate、p95 latency、conversion)]
</input>

<rules>
1. 每個結論註明 source:[input 第 X 段];無法歸因者標 [來源未明示,需確認]。
2. Trade-off 必須列負面後果(例如:選自動 rollback 會犧牲 X 分鐘 false-positive 風險)。
3. 缺資料的欄位標 TODO(缺什麼),不要編造;列「需要什麼補上」。
4. SLO / data integrity 必須涵蓋;任何不可逆操作(drop column、destructive migration)必須單獨標 irreversible: true 並附 forward-only 補救方案。
5. Out of scope:明列 3 條本文件不處理(例如:DR drill、跨 region failover、application-level circuit breaker)。
6. 每個關鍵宣稱標 confidence: [H/M/L],L 必須附說明為何不確定。
7. Rollback steps 必須 ordered,每步附 reversible: true/false 與預估耗時。
</rules>

<output_schema>
triggers:
  slo_breach: [<SLI 名稱 + 閾值 + 觀測窗口>]
  error_rate: <% + 觀測窗口>
  data_integrity: [<檢測點 + 異常條件>]
  source: <input ref>
  confidence: H | M | L

rollback_steps:
  - step: 1
    action: <具體動作>
    reversible: true | false
    estimated_duration: <minutes>
    owner: <role>
    source: <input ref>

data_compat_strategy:
  direction: forward | backward | both
  approach: <expand-contract | dual-write | shadow read>
  irreversible_points: [<point + 補救方案>]
  confidence: H | M | L

inverse_migrations:
  - migration_id: <fwd>
    inverse_script: <path | TODO(缺什麼)>
    data_loss_risk: none | partial | total
    source: <input ref>

safe_window:
  timezone: <TZ>
  duration: <minutes>
  blackout_periods: [<例如:月結、行銷活動>]

abort_criteria:
  hard_stop: [<條件>]
  soft_stop: [<條件>]

comms_plan:
  internal: [<channel + audience + template>]
  external: [<status page + customer email>]
  decision_maker: <role>

decision_log:
  - decision: <例:自動 vs 手動觸發>
    options_considered: [auto, manual, hybrid]
    chosen: <X>
    rejected_reason:
      Y: <why not>
      Z: <why not>
    confidence: H | M | L

out_of_scope:
  - DR drill 與跨 region failover
  - Application-level circuit breaker 設計
  - <第 3 條本文件不處理>
</output_schema>

<thinking>
產出前先:
1. 從 input 抓 3-5 個關鍵 signal(最危險的 migration、最緊的 SLO、blast radius 最大的 step)
2. 列至少 2 條 viable rollback 路徑(forward-fix vs full revert),各自負面後果
3. 列你做了但 input 沒明說的假設(例如:DB 是否支援 online schema change)
4. 確認所有不可逆點都有標記
</thinking>

<output>
(依 output_schema YAML 填寫)
</output>

<verify>
1. 哪個欄位 confidence < H?列出來與所需補充資料。
2. 哪些假設來自我而非 input?標出來。
3. 如果只能再追加一份 input,是哪一份?為什麼?
</verify>

回審重點:human 判斷觸發閾值、不可逆點補救方案、跨團隊通知時機、SLO trade-off。