為什么軟件開發(fā)工期預估都不靠譜
有些人認為做一個大型軟件項目跟建一座大橋一樣。你可以根據(jù)以往的項目,使用那些歷史數(shù)據(jù)來評估所需要的時間和資源。這種觀點數(shù)十年前就已經(jīng)被證實為偽觀點;這種類比出的結論在上世紀九十年代,我在卡內(nèi)基·梅隆攻讀軟件工程學位時,是我一直向往的結果。
現(xiàn)實生活中,大多數(shù)值得一做的工程都不會是之前的項目的重復。不要以為當需要一座橋時,你可以“gem install bridge”或擴展bridge4j。一個新的軟件項目更像是這樣:
— 你是一個發(fā)明家。你已經(jīng)發(fā)明了一種太陽能微波爐,一種以死蟲子為能量的發(fā)動機,一種能殺死蚊子的激光武器。那好,有人找到你對你說:
“嗨,發(fā)明家,我需要一種無人機,它能夠抓取老鼠(不能是別的動物),定位我的前女友,把老鼠投擲到她頭上。給出一個資金預算和工期估計吧。”
很顯然,你會不知道如何入手。你需要理解需求。這種東西以前從來沒有制造過,但這完全不是什么新技術。無人機已經(jīng)有了,定技術也有??墒侨绾文軠蚀_的找到老鼠呢?有多少東西是真的需要你去發(fā)明的?你可以買一個DIY 無人機,稍加改動是否可以滿足需求?你的客戶是否能夠偷偷的把一個跟蹤設備放到他前女友的手袋里?
做軟件不是一種重復性動作,而是一種發(fā)明性動作。在Twitter上瘋傳的Quora上的這個奇思妙想的貼子實際上跑題了。拿從舊金山走到洛杉磯的步行者做類比是不合適的。徒步旅行這項活動已經(jīng)被人類實踐了幾千年了,所有你需要的知識只要在谷歌上搜索一下都能找到。一個苦行僧只要走過一次就能了解所有的行程。當你問他從紐約步行到芝加哥的路程,他很可能相當準確的說出來。經(jīng)過數(shù)次的城際間的旅行后,他有足夠的知識來進行相當準確的估算。但如果我讓你告訴我從洛杉磯駕車到舊金山要多少時間,依賴于交通堵塞的狀況,你的估算很可能會相差數(shù)小時。
而另一方面,如果一個有經(jīng)驗的軟件工程師被要求去開發(fā)一個能自主駕駛從舊金山到洛杉磯的汽車的控制系統(tǒng)時,他面對的上一種完全不同的情況。真正的軟件開發(fā)實際是指那些你以前從未做過的東西。這就是為什么所有的這些拿日常真實生活里的東西來做的類比都不靠譜的原因。
英文原文:Why Software Development Estimations Are Regularly Off
原文鏈接:http://www.aqee.net/why-software-development-estimations-are-regularly-off/
【編輯推薦】