為什麼需要循證式日程規劃#

軟體開發者普遍不喜歡做日程規劃,大多數日程規劃都是馬馬虎虎、形同虛設。但如果你不知道每項任務需要花多少時間,就不可能找出最經濟的工作方式。

循證式日程規劃(Evidence-Based Scheduling, EBS)的核心思想:收集歷史數據,透過 Monte Carlo 模擬,產生一條概率分布曲線,顯示在任一給定日期完成工作的可能性有多大。曲線越陡峭,結果的可靠性(置信區間)就越大。

具體實作方法#

分解時間#

  • 將日程規劃分解為以小時為單位的小任務
  • 任何任務所需時間不應超過 16 小時
  • 這迫使你仔細想清楚要做什麼,避免籠統地估算大型任務

追蹤時間#

  • 保留工時記錄單(time sheet),追蹤每項任務的實際時間
  • 估計用時 / 實際用時計算每位程式設計師的完成速率(velocity)
  • 完美估計者的速率恆為 {1, 1, 1, ...};典型估計者的速率穩定但小於 1.0,如 {0.6, 0.5, 0.6, 0.5, 0.6, 0.7, 0.6}

Monte Carlo 模擬#

  • 對每個任務的估計用時,除以從歷史數據中隨機選取的完成速率
  • 重複 100 次模擬,得到專案在任意日期完成的概率分布
  • 需將小時數據轉換為日曆日期,考慮每位程式設計師的工作日程、休假等

新成員沒有歷史數據時,可假設其估計值最不準確,預設完成速率偏差很大。完成六七件真實任務後,數據就會逐步變得準確。

不要有強迫症#

EBS 的妙處在於:即使你的工作不斷被打斷(老闆閒聊、開會、喝咖啡),只要如實記錄在工時記錄單上,系統就能自動補償這些干擾,產生正確的日程規劃。

無論程式設計師是主動記錄干擾還是拒絕記錄,循證式日程規劃都會生成同樣正確的結果——因為歷史完成速率已經隱含了所有干擾因素。

積極管理你的專案#

  • 將功能劃分不同優先級,輕鬆看出砍掉低優先級功能能讓完成日期提前多少
  • 觀察每位程式設計師的完成日期概率分布,識別估計能力需要改進的人
  • 每天追蹤完成日期的概率分布變化,監控範圍漸變(scope creep)

實踐經驗#

  • 只有第一線程式設計師才能提出完成日期的估計值
  • 發現錯誤立即修正,將時間算入原始任務的用時
  • 防止管理層施壓加快開發速度——實際用時永遠無法少於 4n(n 為寫代碼的估計用時)
  • 日程規劃是一個裝滿木塊的盒子,無法讓木塊變小,只能選擇更大的盒子或拿掉幾個木塊

有效的日程規劃是創造優秀軟體的鑰匙。它強迫你優先完成最重要的功能,做出正確的取捨,讓產品變得更出色。