為什么程序員預(yù)估的時間都不靠譜
一個我曾經(jīng)共事過的很有經(jīng)驗的項目經(jīng)理曾宣稱說,他會拿程序員估計出的時間乘以π值,然后再提高一個數(shù)量級,這樣得出的才是正確的開發(fā)所需要的時間。1天時間經(jīng)過變換后是3.14周。他經(jīng)過慘痛的教訓(xùn)才認識到程序員預(yù)估的時間都是不靠譜的。為了能更精確的對程序員估計的時間進行換算,我創(chuàng)建了一個時間換算表,重點說明究竟是什么地方出了問題。
估計時間 | 程序員的思考 | 程序員忽略的事情 | 真正所 需時間 |
---|---|---|---|
30秒 | 只需要對代碼進行很小的改動就搞定了。我清楚的知道程序應(yīng)該在哪里做修改、怎么修改。只需要30秒時間。 | 啟動電腦的時間,啟動開發(fā)環(huán)境的時間,獲取源代碼的時間。編譯、測試、提交代碼和文檔修改的時間。 | 1小時 |
5分鐘 | 一個小問題,我只需要上谷歌上查查它正確的語法就能搞定。 | 你不可能***次就能精確的查找到正確的信息,就算是找到了,在使用它之前你也需要對它做一些調(diào)整。還有編譯、測試的時間等。 | 2小時 |
1小時 | 我知道該怎么做,但是這需要寫一些代碼,所以要花一些時間。 | 1小時時間太緊張,沒有給任何未預(yù)料到的事情留下余地。總有一些你預(yù)料不到的事情。 | 2小時 |
4小時 | 這需要寫一些代碼,但我基本知道該怎么做。我知道我們的標準框架里的Wizzabanga模塊能做這個事情,但我需要去查查文檔看如何正確的調(diào)用它。 | 這可能是唯一一個符合現(xiàn)實的估計。在任務(wù)不是很大、能夠處理的情況下,它給未預(yù)料到的問題留下了足夠的時間。 | 4小時 |
8小時 | 我首先要重構(gòu)Balunga類,把它拆分成兩個,然后在Wizzabanga模塊里加入調(diào)用代碼,***在界面上添加一個新的表單域。 | 系統(tǒng)的很多地方都對Balunga類有依賴關(guān)系。大概有40多個文件需要調(diào)整。界面上新添加的屬性的同時數(shù)據(jù)庫里也要新增字段。8小時是十分理想的狀況的時間。程序員在估計時間時總忽略了還有很多其它事情要做。 | 12-16小時 |
2天 | 這需要寫很多的代碼。我需要在數(shù)據(jù)庫中添加一些新表,用一個界面來顯示它們,然后還要寫存取它們的邏輯代碼。 | 對大多數(shù)程序員來說,2天時間能完成多少東西都是很難說的。肯定會有一些東西被遺忘。并不是指一些小的東西,一些主要功能上的重要東西也有可能在你估計時被遺漏。 | 5天 |
1周 | 哇塞…這可是個大任務(wù)。我還不知道如何實現(xiàn)它,我不是告訴你我不知道如何做。一周時間應(yīng)該足夠了,但愿,希望能夠,但我不會要求更多的時間,不然的話他們會說我能力不行。 | 這樣一個任務(wù)對于大多數(shù)程序員來說都很難理解消化。這個任務(wù)應(yīng)該發(fā)回給架構(gòu)師,讓他把任務(wù)拆分成更小的模塊,對各模塊應(yīng)該如何執(zhí)行給出一些指導(dǎo)。架構(gòu)師應(yīng)該能找到實現(xiàn)它的一些簡單的方法——或者認識到這個任務(wù)的工作量比他預(yù)期的要多。 | 2-20天 |
預(yù)估時間本身就很難。每個程序員的估計都會跟真正需要的時間有些差距。估計時間短了說明有些事情被忽略了(編譯,測試,提交代碼)。估計時間超了說明任務(wù)太大,難以理解。
對于資歷較淺的程序員,這種估計誤差是混亂的,他們經(jīng)常會輕視一些任務(wù),同時又對一些稍微有難度的任務(wù)過分高估。我認為,對一個有經(jīng)驗的程序員,一個任務(wù)的時間應(yīng)該在半小時到24小時之間,超出24小時的任務(wù)都需要拆分。程序員在腦中想一想可能會認為要60小時,但實際上即使是很有經(jīng)驗的程序員也需要將任務(wù)分成可控的模塊再來分析做決定。
還有一個很重要的需要認識到的一點是,編程上的經(jīng)驗并不等同于時間估計上的經(jīng)驗。一個從沒有做過工期估計的程序員不會擅長估計時間。如果不去拿真正需要的時間和估計出的時間進行比較,你不可能從其它反饋信息之得到正確估計時間的經(jīng)驗。
每個程序員都會用到評估技巧。為了提高你的這項技能,你可以在你從事的每個任務(wù)上進行鍛煉。在任務(wù)開始時先預(yù)估開發(fā)所需時間,拿它跟你最終真正用掉的時間進行對比。這樣,你不僅在對任務(wù)細節(jié)的理解上有提高,同時也提高了你對時間預(yù)估的技能。
英文原文:Programmer Time Translation Cheatsheet -or- Why Programmers Are Bad at Estimating Times
本文鏈接:http://www.aqee.net/why-programmers-are-bad-at-estimating-times/