8 月 2023

[中譯] 軟體開發預估的現實

來源:https://twitter.com/svpino/status/1696187613739208878?s=20

自古至今,軟體開發預估一直都是我們用來欺騙自己的謊言之一。

我們都知道這些預估一定不準,但都假裝這些數字多少有些參考價值。等到情況真的爆炸、一發不可收拾的時候,我們才會因此覺得很生氣。

我在大學生的時候,花了很長的時間專注於研究軟體開發預估的方法。

畢業之後,我寫了很多關於這個主題的文章。

接著,我開始在一家公司上班,花了數年的時間研究如何才能讓軟體開發預估更加準確。公司利用我建立的工具產出的軟體,創造了數百萬美元的營業額。

關於這個主題的必讀書目,我沒有漏讀任何一本。Steve McConnel 的著作《軟體預估 (Software Estimation)》我簡直倒背如流。

而我學到最重要的教訓就是:

我們無法預估軟體開發所需的時間或成本。不管是評估者是誰、或是評估者有沒有經驗,都一樣。

要能預估出值得參考的數字,基本上就是一部科幻小說。

而最精采的就是:

他們會要求你給出預估的數字。他們會說:「我們知道這只是預估,難免和現實有出入啦!」,然後保證到時候不會要你負責。

但他們就是會。沒有例外。

這樣的情況有兩種解決方案。第一個方案,我推薦給那些沒有選擇的人:

  1. 把「快速 (quick)」、「單純 (simple)」、「直覺 (straightforward)」、「簡單 (easy)」,以及所有類似的單字從你的字彙中移除。絕對不要用。不能讓別人用這些字眼形容你的工作內容。

  2. 絕對不要主動提供預估的數字。你所說的一切都會變成用來質疑你的證據。

  3. 如果被逼要預估,只預估你知道今天能完成的工作。數字一定要是一個範圍,例如:「這件事要我需要 2 到 4 小時。」

  4. 如果事情你今天做不完,就要用「天」或「週」當成評估的單位。例如:「我應該可以在本週結束之前完成這個功能。」不要用「小時」當單位去評估未來的工作。

但我們都知道,老闆一定會強迫你給出預估的時程。此時應該這麼做:

  1. 先在心裡預估你覺得完成這個任務要花多少時間。

  2. 把這個數字乘以 3。這就是你的預估範圍的下限。

  3. 把下限乘以 2。這就是預估範圍的上限。

舉例來說:如果你覺得某件事情大約一個工作天可以完成,你就要說「大約需要 3 到 6 天」。

然後有趣的是:

你還是沒有辦法準確地在 3 到 6 天中完成。用這個方法估出來的數字,跟其他方法一樣,都是個屁。

所以,這個問題的真正解決方案就是:

去一家完全不管什麼軟體開發預估的公司上班。