五磅袋

2005 年 10 月 13 日

你不能把十磅的屎塞進五磅的袋子裡

-- 任何嘗試過的人

當肯特和我寫《規劃極限程式設計》時,我們加入了這句異想天開的引言,幫助大家理解規劃的精髓。

軟體開發的一大問題是,人們對於在有限時間內能完成什麼事幾乎沒有概念。我們太常看到許多功能被塞進一個袋子裡,卻不知道它是否裝得下。人類的慾望就是如此,袋子通常都太小了。我真的很喜歡肯特的規劃方法,其中一個原因就是它有一個簡單的機制來處理這個問題。

這個原則非常簡單。你把專案的時間分成幾個迭代。你把需求的功能分成特性(或故事,XP 喜歡這麼稱呼)。你估算每個特性的工作量。你追蹤每個迭代完成的進度,並且不要把超過容量的特性能塞進一個迭代中。XP 的發布規劃就是決定哪些特性要放入哪些迭代中。

這是一個需要人為介入的過程,就像許多事情一樣。在最近一次的會議演講中,我的同事提姆·麥金農描述了讓幾個交易員與開發團隊共處,對幫助他們獲得切合實際的建置概念有很大的幫助。這些交易員仍然全職進行交易,但共處所產生的非正式溝通產生了很大的影響。

人們常常把敏捷方法描述成反規劃的。然而,當我第一次接觸到極限程式設計的雛形時,規劃的品質是其中最令人印象深刻的事情之一。特別是計畫的簡單性質,讓人在不面對後果的情況下,很難將額外的特性塞進專案中。這是敏捷方法適應性規劃的精髓——計畫經常改變,但以受控的方式進行。如果你想要新增一個特性,你必須隨時詢問「我該拿掉什麼來騰出空間?」因此,如果你看到敏捷專案中新增了特性,卻沒有這樣的思考,也沒有為它們騰出空間;你可以放心地得出結論,規劃做得不好。