為什么程序員不擅長評估開發(fā)時(shí)間? |
發(fā)布時(shí)間: 2012/9/15 19:50:26 |
一個(gè)曾經(jīng)與我一起工作過的經(jīng)驗(yàn)豐富的項(xiàng)目經(jīng)理聲稱,他拿到程序員的時(shí)間估算以后,先將它乘以π,然后轉(zhuǎn)化下一個(gè)時(shí)間數(shù)量級后,才能得到真正的值。1天轉(zhuǎn)化成3.14周。他過去因?yàn)槌绦騿T不擅長估算時(shí)間而吃盡了苦頭。我創(chuàng)建了一個(gè)用來翻譯程序員時(shí)間估算的表格,來盡量縮小估算錯(cuò)誤。 估算時(shí)間程序員所想象的程序員所忘記的實(shí)際時(shí)間 30秒只需要做一個(gè)很小的代碼改動(dòng)。我準(zhǔn)確地知道怎么改,在哪里改。花費(fèi)30秒敲鍵盤即可。啟動(dòng)計(jì)算機(jī),開發(fā)環(huán)境和獲取正確源碼的時(shí)間。用于構(gòu)件,測試,檢查和文檔修復(fù)的時(shí)間。 1小時(shí) 5分鐘小事一樁,我只要上谷歌查一下語法就可以修復(fù)它了。很少有一次就能找到完全正確的信息。即使找到,在它能工作前,也需要做一些調(diào)整。外加構(gòu)件,測試等等時(shí)間。 2小時(shí) 1 小時(shí)我知道怎么做,但是寫這些代碼需要花費(fèi)一些時(shí)間。面對未來可能發(fā)生的問題,1小時(shí)稍縱即逝。有些東西總是會(huì)出錯(cuò)。 2小時(shí) 4小時(shí)需要寫一些代碼,但是我粗略地知道步驟。我知道標(biāo)準(zhǔn)框架中的Wizzabanga模塊可以做到,不過我得查看文檔,了解它的準(zhǔn)確地調(diào)用方式。這個(gè)大概是唯一現(xiàn)實(shí)的估算。它為意外的錯(cuò)誤留下了足夠大的余地,而這個(gè)任務(wù)也小到足以把握。 4小時(shí) 8 小時(shí)我先要把Balunga類重構(gòu)成2個(gè),然后為Wizzabanga模塊加一個(gè)調(diào)用,最后為GUI加一些字段?倳(huì)有許多系統(tǒng)的不同部分依賴著Balunga類。大概有40個(gè)不同的文件需要修改。為GUI新加的字段,同樣也需要加到數(shù)據(jù)庫中。8小時(shí)太長,無法完全把握?倳(huì)有比程序員估算時(shí)更多的步驟出現(xiàn)。 12-16小時(shí) 2 天真的有一大堆代碼要寫。我需要往數(shù)據(jù)庫里加一些新table,顯示table的GUI,還有讀寫table的代碼邏輯。對于大多數(shù)開發(fā)者來說,兩天的工作量已經(jīng)大到難以估算了?隙〞(huì)有什么東西被遺漏掉。不僅僅是一些小事情,而是整個(gè)一大塊主要功能會(huì)被遺忘在估算中。 5 天 1 周哎喲,這真是一項(xiàng)艱巨的任務(wù)。雖然我還沒有思路,但我不能說我不知道。一周應(yīng)該夠了,我希望,我真心希望,但是我不能要求更多了,否則他們會(huì)認(rèn)為我不夠稱職。這個(gè)任務(wù)已經(jīng)大到超過大多數(shù)程序員的理解了。它應(yīng)該被發(fā)回給架構(gòu)師,幫忙將它劃分成更小的部分,然后提供一些解決問題的方向。架構(gòu)師可能會(huì)發(fā)現(xiàn)一種更簡單的方法來完成它,或者發(fā)現(xiàn)其實(shí)有更多超乎想象的工作。。。 2-20 天 時(shí)間估算時(shí)困難的。每一個(gè)程序員都有一個(gè)現(xiàn)實(shí)的估計(jì)區(qū)間。低于這個(gè)區(qū)間的估計(jì)意味著(構(gòu)件,測試,檢查代碼的)時(shí)間開銷被低估了。超過這個(gè)區(qū)間的估計(jì)意味著這個(gè)任務(wù)太大而很難預(yù)估。 對于初級開發(fā)者來說,這個(gè)區(qū)間甚至都不存在。他們忽略(構(gòu)件,測試,檢查代碼的)時(shí)間開銷,同時(shí)困難的任務(wù)他們卻又無法預(yù)估。我想說一個(gè)有經(jīng)驗(yàn)的開發(fā)者應(yīng)該在0.5至24小時(shí)將事情做完。超過24小時(shí),就需要細(xì)分。這項(xiàng)工作應(yīng)該在開發(fā)者的頭腦中完成,然后總和到60小時(shí)。但是即使是有一些有經(jīng)驗(yàn)的開發(fā)者也需要有利用管理時(shí)間塊來思考。 同樣重要的是明白:編程經(jīng)驗(yàn)不等同于估算經(jīng)驗(yàn)。一個(gè)不被包含在估算流程中的開發(fā)者將不會(huì)擅長估算。同樣,如果實(shí)際的時(shí)間花費(fèi)不被測量和用于與估算比較,那么將沒有反饋來學(xué)習(xí)。 最后,每個(gè)程序員都應(yīng)該具備估算的技能。為磨練這個(gè)技能,接手每個(gè)任務(wù)時(shí),先決定你要做什么。然后在開始之前估算任務(wù)所需時(shí)間。最后測量實(shí)際花費(fèi)時(shí)間,并與估算相比較。同樣比較你實(shí)際完成的與計(jì)劃完成的。這樣你將會(huì)既提高你對一個(gè)任務(wù)包含細(xì)節(jié)的理解,同樣也提高了你的估算技能。 本文出自:億恩科技【1tcdy.com】 服務(wù)器租用/服務(wù)器托管中國五強(qiáng)!虛擬主機(jī)域名注冊頂級提供商!15年品質(zhì)保障!--億恩科技[ENKJ.COM] |