Giovanni Asproni

為什麼需要學會估算#

身為程式設計師,你需要能夠向管理者、同事和使用者提供估算(estimates),讓他們對時間、成本、技術和其他資源有合理準確的概念,以達成目標。

要做好估算,首先必須學習估算技術。但更根本的是,你必須了解估算是什麼、應該用在什麼地方——令人驚訝的是,許多開發者和管理者其實並不真正清楚這一點。

一個典型的對話#

以下是專案經理與程式設計師之間常見的交流:

  • 專案經理:你能估算一下開發功能 xyz 需要多長時間嗎?
  • 程式設計師:一個月。
  • 專案經理:太長了!我們只有一週。
  • 程式設計師:我至少需要三週。
  • 專案經理:最多給你兩週。
  • 程式設計師:成交!

程式設計師最終給出了一個符合管理者期望的「估算」。但由於這被視為程式設計師的估算,管理者會要求他為此負責。

三個關鍵定義#

要理解上述對話的問題,需要釐清三個定義:

  • 估算(Estimate):對數值、數量或範圍的近似計算或判斷。估算意味著它是基於硬數據和過去經驗的事實性衡量——不能摻入希望和願望。由於是近似值,估算不可能精確,例如不能估算一個開發任務「恰好要 234.14 天」
  • 目標(Target):對理想業務目標的陳述,例如「系統必須支援至少 400 個並發使用者」
  • 承諾(Commitment):在特定日期或事件前,以特定品質水準交付指定功能的承諾。例如「搜尋功能將在下一版發布中提供」

估算、目標與承諾的關係#

估算、目標和承諾彼此獨立,但目標和承諾應該建立在健全的估算之上。

正如 Steve McConnell 所說:「軟體估算的主要目的不是預測專案結果,而是判斷專案目標是否足夠務實,以便控制專案來達成它們。」因此,估算的目的是讓正確的專案管理和規劃成為可能,使利害關係人能夠基於務實的目標做出承諾。

實務建議#

上述對話中,管理者真正要求程式設計師做的是基於一個未說出的目標做出承諾,而不是提供估算。

下次當你被要求提供估算時,確保所有相關人員都清楚知道他們在談論什麼——是估算、目標還是承諾。這樣你的專案會有更高的成功機會。接下來,就該學習一些估算技術了。