專案時程的測不準原理:為什麼做出正確估計這麼難?

你有沒有嘗試解開魔術方塊,卻一直失敗的經驗?
評論
Photo credit: Susanna Marsiglia on Unsplash
Photo credit: Susanna Marsiglia on Unsplash
評論

本文為網頁及電腦程式開發者 Christian Maioli M. 投稿,原文《Project delays: why good software estimates are impossible》刊登於作者部落格。INSIDE Mia 獲授權編譯。

你有沒有嘗試解開魔術方塊,卻一直失敗的經驗?我有一次搭長途巴士的時候就試了很多次,還是從未成功,在我開始覺得心煩意亂的時候,接著就想到,世界上有些小孩可以在幾秒內就輕鬆解開。這怎麼可能?

Photo credit: Jerzy Dubovitsky on Unsplash

超乎意料的複雜

身為程式設計師,當你開啟新專案的時候,因為種種原因,你通常不會完全知道要怎麼做。但你畢竟是專業人士,之前也經手過相似的案子,所以你要不然就是自己試出來,要不就是去問懂的人,或者乾脆去 Google。

因此通常在難關近在眼前的時候,你才會發現。以下舉幾個例子:

  • 你得用新的資料庫或架構重新植入一些東西。
  • 你要用的新資料庫和其他你原本在用的資料庫不對盤。
  • 串接的 API 沒有照你所想地發揮作用
  • 你採用的框架不喜歡單元測試,有的都是整合測試。
  • 你以為這個框架的模型跟其他的一樣是單一實例(Singleton),結果不是。

無從估計的複雜情況

「可以幫我估計一下這些新項目嗎?」你的老闆問到。記得你解不開的那顆魔術方塊嗎?你認為再試一次的話,要花多久時間?

「什麼?兩天?」「但是前任開發者只要幾小時就搞定了!你不可能需要這麼久吧。」

其實只要好好摸熟一套演算法,你可以輕易解開「魔術方塊」。不過你當下對此一無所知,你也無從得知自己將會發現這套演算法,也不知道自己不用兩天就能找到方法解決。

累積起來更複雜

你手上有愈多專案,愈容易碰到這種情況,因此除非你大幅高估所需時間,否則很難準時完成。讓我們用簡易的數學是來理解一下。假設你是位有經驗的程式設計師,只有 5% 的機率會遇到無從估計的複雜情況,而且你剛開了一個新專案並把它拆成 10 項任務:

1 -- (1 -- 0.05)^10=0.40

換句話說:你有 40% 的機會搞砸專案的估計。

「為什麼專案老是延遲?」(Why are projects always behind schedule?)這篇文章就記錄了 70000 竄小時的實際專案數據,以及更多的數學分析,如果有興趣的話可以看看。

創意 vs 技術工作

「比起在生產線上組裝汽車或手錶,創造真正全新的軟體,更接近於開發新的物理理論。」- T.Bollinger

這裡的問題在於需要大量思考的任務,以及你已經熟悉的例行任務之間的差別。

Photo credit: Sidney Perry on Unsplash

在「軟體有規模不經濟特性」(Software has diseconomies of scale)一文中,有個有趣的論點談到這樣的不同對生產力其實有所貢獻,對創意類工作來說,你手上有愈多工作,每項工作要花的時間就愈多。而機械式的工作卻有相反效果,他們在某些程度上可以自動完成。

要用合理的準確度來估計這些創意工作看起來完全不可能,專業和經驗在這裡都幫不上忙。 想想看,要愛因斯坦估計他何時會找到一條物理的萬用理論,合理嗎?

你最多就是能做到根據過去的數據來預測,就像預測股市一樣,而就算做出來了,參考價值也不會太高。



精選熱門好工作

Server Developer

PicCollage 拼貼趣
臺北市.台灣

獎勵 NT$15,000

遊戲美術 Game Artist

Orangenose Studio 易銘有限公司
臺北市.台灣

獎勵 NT$15,000

專案經理(PM)

關鍵評論網股份有限公司
臺北市.台灣

獎勵 NT$15,000