87% by Thursday:Monte Carlo 勝過 Gantt 幻想

Agile 改變了你計劃和承諾的方式;它並沒有廢除計劃或承諾。對於仍在脫離瀑布模式的銀行和保險公司,解決方案是優先排序的待辦清單、緊密的產品回饋,以及來自團隊交付數據的預測確定性,以 Monte Carlo 表達為概率,而不是在 Gantt 圖表上假裝精準。 _Source: Electric Fox operator article · slug `87-percent-by-thursday-monte-carlo-beats-the-gantt-fantasy` · readingTime 10 min_

「我們是 Agile」已成為一種體面的拒絕日期方式。計劃委員會仍需要知道在下一個監管窗口、產品推出或資本承諾之前,哪些會交付、哪些不會。轉型贊助人仍會被要求以高管能理解的語言作出承諾。誠實的做法不是憑空捏造一個單一交付日期並默默加入緩衝,而是用明確的可能性來交換虛假的確定性:在日期 Y 前完成功能 X 的信心大約 87%,這是基於團隊實際完成工作的數據。

受瀑布模式訓練的組織常把 Agile 理解為允許停止承諾。這種解讀既方便又錯誤。Agile 改變了計劃單位、回饋循環的長度和預測的誠實度。它並沒有刪除對優先排序結果清單或對「何時」提供可辯護答案的需求。

Agile 實際改變了什麼(以及沒有改變什麼)

改變的是承諾的形式。你不再凍結一份長達十二個月的作業分解結構,假裝不確定性已被消除。你開始處理一個排序的待辦清單。你經常交付增量,讓產品和業務能夠調整方向。你隨著交付數據的到來更新預測。

沒有改變的是問責制。仍然有人對結果負責。當達到日期的概率下降時,仍然有人決定範圍的取捨。監管機構、董事會和交易對手仍然依賴日曆。把計劃稱為 Agile 並不會讓這些日曆變成可選。

銀行和保險公司的失敗模式是可以預測的。領導層採用儀式名稱,保留瀑布治理日曆,然後把任何要求日期的請求視為反 Agile。交付團隊用「這要看情況」來保護自己。贊助人則用 Gantt 劇場填補真空:一個菱形里程碑、一條綠色長條,以及一份沒人相信的風險登記冊。沒有人在戲劇意義上說謊。每個人都在使用一種無法表達不確定性而不顯得無能的計劃語言。

最低作業系統

有三件事是非談不可的。

第一,一份優先排序的結果清單以及實現這些結果的工作。如果一切都是 P1,就等於什麼都不是。優先順序是產品和業務的決定,而不是各小組之間關於誰的票更響亮的談判。

第二,每個衝刺(或同等短週期)都有產品和業務回饋。沒有調整的預測仍然是劇場。如果能削減範圍或改變驗收標準的人只在 PI 邊界出現,你就會在錯誤的工作上浪費衝刺,然後責怪預測。

第三,以日期表達可能性。「我們會盡力而為」不是預測。「根據目前範圍和歷史吞吐量,在星期四前完成的可能性約 87%」才是一個可供管理的預測。降低信心水平,你通常可以把日期提前或擴大範圍。提高信心水平,你通常需要更多時間、更少範圍或更多容量。這是管理對話,而不是宗教。

從計劃到可執行工作

大型計劃仍需要粗略的計劃視野。PI planning 或大房間計劃在產生大約未來三個月的排序結果集時很有用,T-shirt sizing 足以分配容量並凸顯依賴關係。當它凍結一份披著 Agile 外衣的偽瀑布計劃時,就沒有用了。

在粗略拉取之後,團隊將近期工作梳理成故事,應用故事點(或另一種一致的相對大小),並在衝刺中執行。預測與實際的比較隨後成為預測的原始材料。在這個模型中,故事點的目的不是神秘的精準度。它是一個穩定的相對尺度,讓「我們上個衝刺完成了 34 點」與前一個衝刺具有可比性,前提是衛生條件維持。

從優先排序的結果,經過 PI planning、衝刺分解、預測與實際數據,到 Monte Carlo 預測的五步流程
從優先排序的結果到概率,而不是戲劇性的里程碑。

保持粗略計劃和細部計劃的連接。在 PI 中勝出的結果必須成為有負責人的待辦項目。在會議室中指出的依賴關係必須成為被追蹤的約束,而不是投影片。當預測與實際出現分歧時,首先調整範圍或順序。不要悄悄改寫歷史,讓 Gantt 看起來仍然是綠色的。

組建團隊與預測團隊

Tuckman 不是品牌練習。正在形成和衝突的團隊還沒有穩定的交付訊號。規範中的團隊開始有了。表現中的團隊,擁有幾個月乾淨的吞吐量(或每個衝刺完成的點數),才能為概率陳述提供辯護。

不要在第一個月就推銷貝葉斯劇場。一個成員輪換、Definition of Done 不明確、待辦清單仍在發明的全新小組,將產生看起來科學但意義不大的數字。首先建立作業系統:優先順序、回饋和一致的完成會計。然後再預測。

已建立的團隊則是另一回事。一旦你擁有一系列在類似約束下完成的類似大小工作,歷史吞吐量就是合理的先驗。從該歷史進行 Monte Carlo 抽樣,比單一速度平均值更好地回答「何時」和「多少」。可選的貝葉斯更新可以在新衝刺到來時收緊圖像,但前提是基礎數據是誠實的。在此之前,將早期預測視為方向性並明確說明。

新團隊經過形成、衝突、規範和表現階段,預測訊號不可靠;已建立團隊則將吞吐量輸入 Monte Carlo 錐形範圍
新團隊還沒有交付訊號;已建立團隊可以為概率提供辯護。

將數據帶入團隊

記錄什麼完成了、何時完成,以及大小(如果你使用點數)。如果你關心流程,就記錄週期的開始和完成日期。如果跨團隊摩擦才是真正問題,就記錄阻礙時間和依賴等待。衛生勝過工具。一份有誠實完成日期的試算表,勝過一個充滿在衝刺最後一天才移到 Done 以保護速度外觀的 Jira 系統。

同意「完成」的定義,不要移動終點線來美化圖表。保持工作項目大小大致可比,或拆分異常值。避免操縱點數。工具是次要的:一旦歷史存在,ActionableAgile 風格的分析、原生 Jira 圖表或簡短的 Python 筆記本都能運作。在你將預測視為董事會等級之前,大約需要一到兩個月乾淨執行的預算。這不是為了拖延而拖延。這是讓樣本不再是噪音的最低要求。

數據驅動預測:Monte Carlo(和貝葉斯)不帶神秘色彩

Monte Carlo 預測,以 Daniel Vacanti 和 Actionable Agile 傳統等從業人員在 Agile 交付中普及的形式,並非神秘主義。你取歷史吞吐量(每天或每個衝刺完成的項目或點數),從該歷史抽樣數千次,然後詢問剩餘工作在目標日期前完成的頻率。輸出是一個分佈,而不是預言。

一個簡短的直觀草圖:

# remaining = work still to finish (items or points)
# history   = list of past throughputs per period (sprint/day)
# target    = number of periods until the date you care about
trials_done = 0
for trial in 1..N:          # e.g. N = 10_000
    remaining_sim = remaining
    for period in 1..target:
        remaining_sim -= sample(history)   # draw one past throughput
        if remaining_sim <= 0:
            trials_done += 1
            break
P(done by date) ≈ trials_done / N

如果 10,000 次試驗中約有 8,700 次在星期四或之前完成剩餘範圍,你就可以說:在星期四前完成功能 X 的信心約 87%。這是董事會可以使用的句子。當數字是 40% 時,這也是迫使進行範圍對話的句子。

累積視圖是用一行表達的相同概念。令 \(T\) 為在歷史吞吐量重抽樣下的模擬完成時間。則:

P(T \le t_{\text{Thursday}}) \approx \frac{1}{N}\sum_{i=1}^{N}\mathbf{1}[T_i \le t_{\text{Thursday}}]

可選的貝葉斯更新將最新衝刺視為新證據,改變你對吞吐量的信念。在序列穩定後很有用;在這之前則是裝飾。盡可能優先使用吞吐量計數:它們比點數漂移更少,並乾淨地連接到 Little's Law 風格的流程思維。如果團隊尺度一致且你拒絕膨脹,點數仍然有效。無論哪種方式,歷史中的單位必須與剩餘工作的單位匹配。

許多衝刺期間累積工作的細樣本路徑,帶有目標日期線,且約 87% 的模擬已完成
一千個未來;日期是足夠多未來完成的地方。

公開工具說明(ActionableAgile 文件和相關從業人員部落格)通常會呈現計劃百分位,如 p50、p85 和 p95:擲硬幣、承諾和安心睡覺。約 87% 的例子接近許多團隊視為董事會安全的承諾區間。將供應商截圖和百分位預設視為業界慣例,而不是受監管的標準。

為什麼這勝過瀑布計劃劇場

瀑布計劃劇場出售一個單一日期,並將緩衝、加班和悄悄範圍削減隱藏起來。當日期滑動時,信任蒸發,因為計劃從未承認不確定性。概率 Agile 以一個區間出售相同的日曆問題:50% 看起來像這樣,約 87% 看起來像這樣,你必須削減或增加什麼才能在它們之間移動。

瀑布劇場與單一交付日期菱形的分割比較,相對於概率 Agile 帶有標記為 87% by Thursday 的信心區間
相同的日曆問題;對不確定性的誠實程度不同。

第二種模型在會議室裡難五分鐘,但在六個月裡容易得多。贊助人可以選擇風險。產品可以以範圍交換日期。工程可以顯示哪些依賴關係會移動百分位。稽核和風險得到一個軌跡:預測、數據窗口、假設和決定。這才是成人的治理。一個本來就會滑動的 Gantt 不是。

注意事項

垃圾點數產生垃圾概率。如果故事點在每次計劃會議後膨脹,你的 Monte Carlo 將自信地預測無意義的結果。修復尺度或改用項目計數。

跨團隊依賴關係會打破天真的預測。一個按時完成自己故事的團隊,如果平台小組、變更窗口或供應商處於關鍵路徑上,仍然會滑動。明確建模依賴關係,或在你做到之前加寬信心區間。

投資組合彙總不是「加總信心」。三個團隊各自在依賴切片上達到 87%,並不會產生 87% 的計劃。相關性和依賴結構很重要。用投資組合模擬或明確的關鍵路徑誠實來彙總,而不是用算術樂觀。

沒有優先順序的儀式仍然會失敗。在未排序的待辦清單上的完美吞吐量圖表,將以令人印象深刻的精準度預測錯誤的工作。優先順序和回饋仍是作業系統;Monte Carlo 是儀器。

三個團隊的 Monte Carlo 錐形範圍,帶有指向投資組合節點的虛線依賴箭頭,警告不要加總信心
不要只是加總信心:投資組合彙總需要依賴結構。

受監管組織的務實推出

選擇一個已建立的產品團隊,帶有日曆上的真實結果,而不是全新的轉型小組。用同意的 Done 標準為四到八個衝刺記錄完成。保留 PI 或季度計劃用於粗略結果和 T-shirt 容量;停止將其用作假的詳細時間表。教導贊助人要求百分位承諾(「約 85–90% 的日期是什麼?」),而不是單一的沉默日期。

將預測置於現有治理旁邊,而不是發明一個平行的教派。風險和變更委員會仍然需要日期;給他們帶有日期的概率以及下面的範圍假設。記錄數據窗口、抽樣方法以及當信心下降時誰可以改變範圍。對於新團隊,只發布方向性範圍,並說明董事會等級預測何時開始。避免工具擴散:一條分析路徑、一個 Done 定義、一個預測衛生負責人。

銀行和保險公司已經知道如何在信貸、精算和營運風險中談論概率。交付預測是將相同智力動作應用到吞吐量上。文化障礙不是數學。而是習慣於將 Gantt 菱形視為比誠實區間更安全的做法。

三種高管選擇:拒絕日期、在 Gantt 上假裝精準,或以 87% 信心承諾範圍 X 於日期 Y
拒絕日期、假裝 Gantt,或承諾概率。只有第三種是成人的治理。

立即下一步

為未來約 90 天命名優先排序的結果,並消除重複的 P1。

選擇一個已建立的團隊;凍結 Done 標準;在接下來兩個月捕捉吞吐量或完成的點數,而不操縱。

用百分位承諾替換下一個董事會日期要求:範圍 X 於日期 Y 約 87%(或顯示達到那裡所需的削減)。

凸顯前三大會使樣本失效的跨團隊依賴關係,並指派負責人。

只有在那之後才選擇工具;先用試算表也可以。

拒絕日期,你就會訓練組織在沒有你的情況下發明一個。假裝精準,你就會訓練它在長條變紅時忽略你。概率承諾是成人的中間道路:Agile 改變了你計劃和承諾的方式;它並沒有廢除其中任何一個。