Staging 驗收與 Go/No-Go 決策

一句話總結:Staging 驗收不是再跑一次 QA,是在接近 Production 的環境裡確認「整體行為是否如預期」。Go/No-Go 是多方利害關係人的共同決策,不是某個人拍腦袋。

結論先講:如果你的 Staging 環境跟 Production 差距很大,那 Staging 驗收就是在演戲。Go/No-Go 會議沒有 Rollback Plan 就不准喊 Go。

Staging:Production 的鏡像

Staging 驗收的定位不同於 QA。QA 環境做功能測試,Staging 做的是「在接近 Production 的環境中,整體行為是否正常」。

Staging 環境要做到:

  • 部署方式跟 Production 一樣(同一條 CI/CD pipeline、同樣的部署指令)
  • 使用脫敏後的生產資料(不是空資料庫或幾筆測試資料)
  • 第三方服務用 Sandbox 但配置結構一致
  • SSL/TLS、DNS、Reverse Proxy 配置跟 Production 一致

如果你的 Staging 用的是 SQLite 但 Production 用 PostgreSQL,那你的 Staging 驗收基本上沒有意義。

UAT:讓非技術的人來確認

UAT(User Acceptance Testing)不是找 Bug——那是 QA 的工作。UAT 是讓 PM、業務負責人、客服主管來確認:

  • 做出來的東西是不是他們要的
  • 操作流程順不順暢
  • 業務規則對不對(價格計算、折扣邏輯、權限控制)
  • 跟其他系統的串接正不正常

「PM 說這不是我要的」這種事,應該在 Staging 被發現,不應該在 Production 被發現。

效能驗證

在 Staging 跑效能測試,確認新版本沒有效能退化:

  • 核心 API 的 P95/P99 回應時間在 SLA 範圍內嗎?
  • 預期負載下系統穩定嗎?
  • CPU、Memory 用量合理嗎?有 Memory Leak 嗎?
  • 跟當前 Production 版本比較,效能有退化嗎?

Data Migration Dry-run

如果這次 Release 有 DB Schema 變更或資料遷移,必須在 Staging 做 Dry-run:

  1. 執行 Migration——確認腳本可以跑
  2. 計時——記錄需要多久,評估對 Production 的影響(需不需要停機?)
  3. 驗證資料——Migration 後資料正確嗎?
  4. 測試 Rollback——Migration 能回滾嗎?回滾後資料完整嗎?

第四點最關鍵。我見過太多 Migration 只寫了 up 沒寫 down。出了問題之後才發現回不去。

Go/No-Go:不是一個人的決定

Go/No-Go 是整個 Release 流程中最關鍵的決策點。它不是 PM 一個人說了算,也不是 Tech Lead 一個人說了算。

RACI 矩陣:

角色職責
Release Manager(R)收集所有資訊、召開會議、執行決策
Tech Lead(A)做最終技術決策。有權叫停
PM + QA Lead(C)提供功能和品質層面的意見
EM + 下游團隊(I)被告知決策結果

Go/No-Go Checklist

逐項確認:

品質門檻:

  • P0 Bug = 0
  • P1 Bug = 0(或有風險簽核)
  • 回歸測試通過率 > 95%
  • 核心流程 100% 通過
  • QA Sign-off 完成

Staging 驗收:

  • UAT 完成且 PM 簽核
  • 效能驗證通過
  • Data Migration Dry-run 通過

準備度:

  • Rollback Plan 就緒且在 Staging 驗證過
  • 監控 Dashboard 準備好
  • On-call 人員排定
  • Release Notes 寫好

時機:

  • 不是週五下午
  • 不在重大活動期間
  • Release Window 內有足夠人員在線
  • 下游團隊已通知且準備就緒

Rollback Plan 審查

在 Go/No-Go 會議中,Rollback Plan 必須被明確審查:

項目必須回答的問題
觸發條件什麼指標超過什麼門檻就觸發?
執行步驟任何 on-call 工程師都能執行的逐步指令?
資料回滾有 Migration 的話,回滾後資料怎麼處理?
時間預估Rollback 需要多久?
驗證方式回滾完成後怎麼確認系統恢復正常?

沒有 Rollback Plan = 不准 Go。 這是硬規矩。「出問題再想辦法」不是 Plan。

溝通計畫

Release 不只是工程師的事。溝通計畫涵蓋:

  • T-2 天:通知工程團隊 Release 時間和範圍
  • T-1 天:通知客服團隊新功能和常見問題預備
  • T-0(Release 時):Slack Release 頻道即時更新進度
  • T+1 小時:發送 Release 結果通知

外部溝通(如適用):Release Notes 發布、用戶公告、API 變更通知。

這篇的重點回顧

Staging 不是再跑一次 QA,是在 Production-like 環境做整體驗證。UAT 讓非技術的人確認「這是我要的」。Go/No-Go 用 RACI 矩陣明確責任,用 Checklist 確保無遺漏。Rollback Plan 是 Go 的必要條件。溝通計畫讓所有利害關係人不被 Release 嚇到。

系列文章:

延伸閱讀:

「Go/No-Go 會議最好的結果是無聊——每一項都打勾,沒有爭議,30 分鐘散會。」