概述#

Release Planning(發布規劃)是一種長期規劃,幫助我們回答以下問題:

  • 「我們什麼時候能完成?」
  • 「到年底我能得到哪些功能?」
  • 「這會花多少錢?」

Release planning 必須在客戶價值與整體品質之間取得平衡,同時兼顧範疇(scope)、時程(schedule)與預算(budget)的限制。

發布節奏(Release Cadence)#

Figure 18.1: Different release cadences

組織必須決定適合的發布節奏,常見模式有三種:

  • 多個 Sprint 後發布 — 結合數個 Sprint 的成果為一次發布
  • 每個 Sprint 發布 — Sprint 結束即發布該 Sprint 的潛在可交付增量
  • 每個功能即發布(Continuous Deployment) — 功能完成就發布,可能一天數次

無論採用哪種模式,大多數組織都認為某種程度的長期、高層級規劃是有用的。

如果 “release planning” 這個名稱不適合你的情境,可以使用同義詞如 longer-term planning(長期規劃)milestone-driven planning(里程碑驅動規劃)

時機#

Figure 18.2: When release planning happens

Release planning 不是一次性事件,而是每個 Sprint 都會頻繁進行的活動:

  • 初始 release planning 在 envisioning 之後進行,通常持續一兩天
  • 隨著每個 Sprint 獲得已驗證的學習,持續更新 release plan
  • 可在 Sprint Review 中或準備下一個 Sprint 時修訂

參與者#

Release planning 涉及利害關係人與完整 Scrum 團隊的協作,因為需要做出商業與技術的取捨。

流程#

Figure 18.3: Release-planning activity

輸入:

  • 產品願景、高層級 product backlog、產品路線圖(來自 envisioning)
  • 團隊的速率(velocity)

關鍵活動:

活動說明
確認與複審發布限制範疇、日期、預算
Product Backlog 梳理(Grooming)建立、估算、排序更詳細的 backlog items
定義/複審最小可發布功能(MRFs)-
Sprint 對應(Sprint Mapping)將 backlog items 初步對應到各 Sprint

輸出(Release Plan):

  • 何時完成、能得到哪些功能、成本多少
  • 明確的 MRFs 定義
  • Product backlog items 到 Sprint 的初步對應

發布限制(Release Constraints)#

Release planning 的目標是決定什麼構成最有價值的下一次發布,以及期望的品質水準。範疇、日期和預算是影響如何達成目標的重要變數。

專案類型範疇日期預算
Fixed Everything(不建議)固定固定固定
Fixed Scope and Date(不建議)固定固定彈性
Fixed Scope固定彈性固定(其實不太算)
Fixed Date彈性固定固定
flowchart TD
    A{範疇與日期\n都能固定?} -->|是| B["Fixed Everything\n全部固定(不建議)"]
    A -->|否| C{哪個更重要?}
    C -->|日期| D["Fixed Date\n固定日期(最推薦)"]
    C -->|範疇| E["Fixed Scope\n固定範疇"]
    C -->|都重要| F["Fixed Scope + Date\n(不建議,Chicken Game)"]

Fixed Everything — 全部固定(不建議)#

在 Scrum 中,我們不相信能在一開始就把所有事情都搞對,因此至少需要一個變數是彈性的

Fixed Scope and Date — 固定範疇和日期(不建議)#

Figure 18.4: Fixed date and fixed scope playing a game of chicken

此方法的問題:

  • 同時鎖定兩個最難預先定義的變數
  • 實務上,時間快用完時,範疇或日期中必有一個會讓步
  • 「彈性預算」通常意味著加人,但 Brooks 法則告訴我們:「為已延遲的軟體專案加人只會讓它更延遲」
  • 現實中,彈性預算往往只是讓同樣的人加班,違反可持續步調(sustainable pace) 原則

如果過度限制範疇、日期和預算,品質就會變成「彈性的」。這將導致技術債累積或交付無法滿足客戶期望的產品。

Fixed Scope — 固定範疇#

適用於範疇確實比日期更重要的情境。當時間不夠但功能未完成時,延長日期以確保 MRFs 全部交付。注意:日期延長意味著預算也必須跟著增加(人要付薪水)。

如果面臨固定範疇的壓力,通常更好的做法是考慮更小、更頻繁的固定日期發布

Fixed Date — 固定日期(最推薦)#

許多人認為這是最符合 Scrum 原則的方式:

  • 固定日期和預算,但範疇必須彈性
  • 因為 Scrum 總是先做最高優先級的功能,時間到時未完成的應該是較低價值的功能
  • 如果能定義出真正小的 MRFs 集合,就能輕鬆在固定日期前交付
  • 固定日期也與 Scrum 的時間盒(Timeboxing) 精神一致

更新限制#

持續的 release planning 包含用當前知識重新審視限制條件。例如 SR4U 接近截止日但 MRFs 無法完成時,可能的選擇包括:

  • 減少 MRFs 的範圍(例如只過濾餐廳評論、固定來源)
  • 增加人手(改變預算)
  • 放棄在 Social Media Expo 發布(改變日期)

Product Backlog 梳理(Grooming)#

Release planning 的基本活動之一是梳理 product backlog。Envisioning 階段的 epic 層級故事通常太大,需要在 release planning 時細化。

以 SR4U 為例,Roger 的路線圖中 Release 1.0 聚焦「基本學習」和「基本過濾」,對應兩個 epic。在 release planning 時,團隊透過 user-story-writing workshop 將其拆分為更詳細的故事,例如:

  • 身為典型使用者,我希望告訴 SR4U 忽略包含特定關鍵字的評論
  • 身為典型使用者,我希望選擇產品或服務類別以幫助 SR4U 聚焦

精煉最小可發布功能(Refine MRFs)#

MRFs 代表最小的「必備」功能集合。Release planning 的重要工作是持續重新評估和精煉 MRFs:

  • 隨著 Sprint 回饋和已驗證學習不斷調整
  • 常見問題:利害關係人無法就 MRFs 達成共識,這會干擾決策
  • Product Owner 最終負責定義 MRFs,但需與利害關係人和 Scrum 團隊密切合作

為什麼要追求「最小」而非「最大」功能集合?因為最大集合花最多錢、耗最多時間、風險最高。最小集合則相反。這與更小、更頻繁發布的原則一致。MRFs 的定義應結合功能大小的估算資訊,以確認其經濟可行性。


Sprint 對應(Sprint Mapping / PBI Slotting)#

雖然每個 Sprint 要做哪些 PBI 是在 Sprint Planning 時才最終決定,但提前做一些粗略的對應是有幫助的。

Figure 18.5: Mapping product backlog items to sprints

做法是:使用團隊平均速率,將估算過的 PBI 分組,每組的總點數大致等於團隊的平均速率。

單一團隊#

  • 在初始 release planning 時粗略了解各功能何時完成
  • 可能因此重新組織 backlog,讓分組更自然或高效

多團隊#

  • 使用 rolling look-ahead planning — 每個團隊不只考慮下一個 Sprint,還考慮至少兩個未來 Sprint
  • 有助於管理跨團隊依賴(inter-team dependencies)

以 SR4U 三個團隊為例:

  • Team 1:端到端使用者請求處理
  • Team 2:AI 引擎(分析與區分評論的邏輯)
  • Team 3:連接不同網路資料來源

三個團隊透過聯合 release planning 協調依賴關係,例如 Team 1 在 Sprint 2 需要 Team 3 至少完成一個資料來源的連接。

這種早期對應會隨著開發進行而演變。最終決定在每個 Sprint Planning 的「最後負責時刻(last responsible moment)」做出。有些單一團隊認為早期對應的投入不值得其產出,選擇不做或少做。

sequenceDiagram
    participant T1 as Team 1<br/>端到端使用者請求處理
    participant T2 as Team 2<br/>AI 引擎
    participant T3 as Team 3<br/>網路資料來源連接

    Note over T1,T3: Sprint 1
    T3->>T3: 開發第一個資料來源連接器
    T2->>T2: 開發核心 AI 分析演算法

    Note over T1,T3: Sprint 2
    T3-->>T1: 提供至少一個資料來源連接
    T1->>T1: 整合端到端使用者請求處理流程
    T2->>T2: 持續開發 AI 引擎功能

    Note over T1,T3: Sprint 3
    T2-->>T1: 提供 AI 引擎 API
    T1->>T1: 整合 AI 分析功能至端到端流程

Fixed-Date Release Planning(固定日期發布規劃)#

以 SR4U Release 1.0 為例,固定日期為 Social Media Expo(9 月 26 日星期一),需在 9 月 23 日(星期五)前完成。

步驟#

步驟說明
1計算 Sprint 數量 — 7 月第一週開始到 9 月 23 日,兩週一個 Sprint = 6 個 Sprint
2梳理 product backlog — 建立、估算、排序足夠深度的 PBI
3估算團隊速率範圍 — 例如每 Sprint 18-22 點
4較慢速率 x Sprint 數 = will-have 線 — 18 x 6 = 108 點
5較快速率 x Sprint 數 = might-have 線 — 22 x 6 = 132 點

Figure 18.6: Sprint calendar for SR4U Release 1.0

MRFs 比例建議#

在 fixed-date release 中,MRFs 應佔用少於 100% 的時間,建議約 60%-70%,原因有二:

  1. 如果所有功能都是 must-have,時間不夠時沒有功能可以刪減
  2. 如果出現緊急的 must-have 功能,有 nice-to-have 功能可以被替換掉

Figure 18.7: Product backlog ready for release planning

以範圍確定交付範圍#

將速率計算結果疊加到 product backlog 上,可以看到三個區段:

Figure 18.8: Determining the range of features on a fixed-date release

  • Will Have(一定會有) — 108 點以內
  • Might Have(可能會有) — 108-132 點之間
  • Won’t Have(不會有) — 132 點以外

這種範圍式回答既準確又誠實地傳達了不確定性。

疊加 Must-Have 線#

Figure 18.9: Location of must-have features relative to the range of deliverable features

將 must-have 線疊加後可得到三種情況:

情境解讀行動
Good Newsmust-have 線完全在 will-have 區內放心進行
Maybe OKmust-have 線跨越 will-have 和 might-have接受風險並開始,幾個 Sprint 後重新評估
Bad Newsmust-have 線在 might-have 甚至 won’t-have 區考慮不進行、延後日期或增加資源
flowchart TD
    A[疊加 Must-Have 線] --> B{Must-Have 線\n落在哪個區域?}
    B -->|Will-Have 區| C["Good News\n放心進行"]
    B -->|Might-Have 區| D["Maybe OK\n接受風險並持續監控"]
    B -->|Won't-Have 區| E["Bad News\n考慮不進行或調整範疇"]

每個 Sprint 結束後必須重新檢視 release plan,更新速率數據和 backlog 變化。


Fixed-Scope Release Planning(固定範疇發布規劃)#

當範疇確實比日期更重要時使用。

在開始 fixed-scope 規劃之前,先問自己:是否真正將 must-have 功能精簡到了最低限度?很多時候,積極地思考「最小可發布功能」可以將 fixed-scope 轉變為一系列更小的 fixed-date 發布。

步驟#

步驟說明
1梳理 product backlog — 因為是固定範疇,需要知道哪些 PBI 在範疇內
2計算待交付 PBI 的總大小 — 加總所有項目的估算值
3估算團隊速率範圍
4總大小 / 較快速率 = 最少 Sprint 數
5總大小 / 較慢速率 = 最多 Sprint 數

Figure 18.10: Results of fixed-scope planning

以 150 點的功能集合為例:

  • 150 / 22(較快速率)= 7 個 Sprint
  • 150 / 18(較慢速率)= 9 個 Sprint
  • 回答:7 到 9 個 Sprint(14 到 18 週)

同樣是範圍式回答,誠實傳達不確定性。


成本計算(Calculating Cost)#

成本計算在 fixed-date 和 fixed-scope 發布上都很簡單:

步驟說明
1確定團隊成員 — 假設團隊組成基本穩定
2確定 Sprint 長度 — 假設所有 Sprint 長度相同
3計算每個 Sprint 的人事成本
4aFixed-date:Sprint 數 x 每 Sprint 成本 = 固定人事成本
4bFixed-scope:高低 Sprint 數各乘以每 Sprint 成本 = 成本範圍
  • 軟體開發成本的大部分是人事成本,可作為整體成本的良好替代指標
  • Fixed-scope 時,組織通常以較高端做預算
  • 另一種方法:如果知道歷史的每點成本(cost per story point),可直接用 150 x 每點成本來估算

溝通進度(Communicating Progress)#

大多數團隊使用某種形式的 Burndown Chart 和 / 或 Burnup Chart 作為主要的資訊輻射器。

Fixed-Scope Release 的進度溝通#

Burndown Chart(燃盡圖)#

Figure 18.11: Fixed-scope-release burndown chart

  • 縱軸:剩餘未完成工作的大小(story points)
  • 橫軸:Sprint
  • 每個 Sprint 結束後更新,顯示剩餘工作量
  • 可加入預測線(高/低/平均速率)顯示預計何時完成

Burnup Chart(燃起圖)#

Figure 18.12: Fixed-scope-release burnup chart

  • 顯示發布的總工作量作為目標線,以及每個 Sprint 向目標的進展
  • 有些人偏好 burnup 格式,因為它能輕鬆顯示範疇變更

Figure 18.13: Variable-scope-release burnup chart

當發布的範疇增加時,只需在新增範疇的那個 Sprint 將目標線向上移動即可。

Fixed-Date Release 的進度溝通#

Figure 18.14: Fixed-date-release burnup chart (with inverted product backlog)

傳統的 burndown/burnup chart 不適用於 fixed-date planning,因為它們假設已知總範疇量。作者提出一種特殊的 burnup chart:

  • 倒置 Product Backlog — 最高優先級項目放在底部,低優先級在頂部
  • 這消除了需要事先知道發布範疇大小的問題
  • 每個 Sprint 結束後向上燒,顯示完成的功能
  • 可以同時觀察:
    • 向目標功能範圍的進展
    • 是否能完成 must-have 功能
    • will-have / might-have / won’t-have 的分界

小結#

本章擴展了 release planning 的描述,涵蓋了時機、參與者、活動內容,以及 release plan 的要素。核心內容包括:

主題說明
Release 限制的取捨fixed-date(最推薦)vs. fixed-scope,避免 fixed-everything
Product Backlog 梳理從 epic 細化到可規劃的故事,持續精煉 MRFs
Sprint Mapping初步對應 PBI 到 Sprint,尤其在多團隊環境中管理依賴
Fixed-date 規劃用速率範圍計算 will-have / might-have / won’t-have
Fixed-scope 規劃用速率範圍計算所需 Sprint 數的範圍
成本計算基於團隊組成和 Sprint 數量的簡單計算
進度溝通針對不同發布類型選用合適的 burndown/burnup chart