cover

Release 不等於 Deploy——從規劃開始的紀律

一句話總結:Deploy 是把程式碼搬到伺服器,Release 是決定什麼功能在什麼時間對什麼用戶可見。兩者不是同一件事。

結論先講:好的 Release 應該是無聊的。如果每次 Release 都像打仗一樣刺激,你的流程有問題。Release 的品質在規劃階段就決定了一半——範圍失控的 Release,後面流程再嚴謹也救不回來。

Deployment vs Release:這個區別你必須搞清楚

每一個資深工程師都有至少一個「Friday deploy 恐怖故事」。週五下午五點,有人說「這個小改動很簡單,deploy 一下就好」,結果週五晚上到週日都在救火。

問題出在哪?很多團隊把 Release 和 Deployment 當成同一件事。

Deployment 是技術動作——把程式碼從 A 搬到 B。CI/CD pipeline 的工作,工程師的日常操作。Release 是產品決策——決定什麼功能在什麼時間對什麼用戶可見。涉及產品策略、市場時機、風險評估。

一個成熟的團隊可以每天 deploy 數十次,但每兩週才 release 一次。Deploy 是把彈藥送上前線,Release 是決定什麼時候開火。

Feature Flag 正是實現「deploy 與 release 解耦」的關鍵——程式碼已經部署在 Production,但功能對用戶不可見,直到你決定打開開關。

沒有流程的 Release 長什麼樣?

  • 「反正 staging 測過了」——結果 Staging 跟 Production 配置不一致
  • 「趕在下班前上」——出問題時人已經在捷運上
  • 「rollback 應該很簡單吧」——有 migration 但沒寫 rollback script
  • 「QA 說還有幾個 bug 但不嚴重」——上線後才發現那些 bug 恰好打中核心流程

聽起來很熟悉?這些都是 Release 方法論要解決的問題:可預測性、品質保障、風險控制、責任歸屬、持續改善。

Release 的八個階段

完整的 Release 流程有八個階段,每個階段都是下一個的前提:

#階段核心問題關鍵交付物
1Feature Planning這次 Release 什麼?Release Scope 文件
2Development如何有紀律地開發?自測完成的 Feature Branch
3Code Freeze什麼時候停止加功能?穩定的 Release Branch
4QA 驗證品質達標嗎?QA Sign-off Report
5Staging 驗收Production-like 環境正常嗎?Staging 簽核
6Go/No-Go準備好上線了嗎?決策記錄
7Production Release如何安全部署?Smoke Test 通過
8Post-Release上線後穩定嗎?覆盤記錄

Phase 1:Feature Planning

Release 的範圍必須在一開始就定義清楚。用 MoSCoW 分級:

  • Must Have:沒有這些就不 Release
  • Should Have:盡量包含,做不完就延後
  • Nice to Have:有時間才做
  • Out of Scope:明確排除,移到下一版

時間固定還是範圍固定? 建議用 Time-boxed 模式。到日期就發車,沒趕上的等下一班。「所有功能做完才 Release」的模式,常常導致 Release 永遠在延期。

Feature Flag 在這個階段就該規劃——哪些功能用 Flag 控制?啟用順序是什麼?記得,Feature Flag 在功能穩定後要清理,不然程式碼裡會累積一堆過期的 Flag。

Phase 2:Development 紀律

開發階段的紀律直接決定了後續的順暢度。

持續整合 > Big-bang Merge。 Feature Branch 不超過 3-5 天。如果功能太大,拆成可獨立合併的小單元。每日 merge main 到 feature branch,保持同步。CI Pipeline 是門禁——lint、test、build 沒過不能合併。

Big-bang Merge 是什麼?就是所有 Feature Branch 在 Release 前才一次合併。這幾乎必然導致大量衝突。我見過團隊花整整兩天在解衝突,然後趕在 deadline 前 Release 一堆沒有經過充分測試的程式碼。

Developer Self-testing: 在提 MR 之前,開發者自己先過一遍:Happy Path 測過嗎?Edge Case 驗過嗎?錯誤處理路徑確認過嗎?有寫測試嗎?Migration 能 rollback 嗎?新環境變數有文件化嗎?

這不是 QA 的前哨站嗎?沒錯,就是。QA 不該是第一道品質關卡,開發者自己才是。

這篇的重點回顧

Release 不等於 Deployment——前者是產品決策,後者是技術動作。Release 有八個階段,從規劃到上線後監控形成閉環。Feature Planning 用 MoSCoW 分級定義範圍,搭配 Time-boxed 模式。開發階段要持續整合、開發者自測。

下一篇看 Code Freeze 和 QA 驗證。

系列文章:

延伸閱讀:

「Release 應該像坐公車——固定時間發車,沒趕上的等下一班,不會為了等一個人而誤了所有乘客。」