為什麼需要循證式日程規劃#
軟體開發者普遍不喜歡做日程規劃,大多數日程規劃都是馬馬虎虎、形同虛設。但如果你不知道每項任務需要花多少時間,就不可能找出最經濟的工作方式。
循證式日程規劃(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 為寫代碼的估計用時)
- 日程規劃是一個裝滿木塊的盒子,無法讓木塊變小,只能選擇更大的盒子或拿掉幾個木塊
有效的日程規劃是創造優秀軟體的鑰匙。它強迫你優先完成最重要的功能,做出正確的取捨,讓產品變得更出色。