空泛的估算
編程人員有時(shí)和廚師一樣,某項(xiàng)任務(wù)的計(jì)劃進(jìn)度,受限制與客戶要求的緊迫程度,然而緊迫程度并不能控制實(shí)際完成的情況。
例如,約定兩分鐘內(nèi)煎完一個(gè)雞蛋,看上去簡單,但實(shí)際上它無法在兩分鐘內(nèi)完成,顧客只能選擇等待或者吃生雞蛋。廚師的另一個(gè)選擇是把火開大,不過結(jié)果常常是得到一個(gè)更糟糕的煎蛋。
為了滿足顧客期望而造成的不合理進(jìn)度安排,在軟件領(lǐng)域中非常普遍。不科學(xué)的估算方法,少的可憐的數(shù)據(jù)支持,完全憑借產(chǎn)品經(jīng)理直覺的判斷,這樣的方式很難得出有力、可靠、低風(fēng)險(xiǎn)的評估。
顯然,我們有兩種解決方案:
- 采用科學(xué)的方法,例如生產(chǎn)率圖表、缺陷率圖表、估算規(guī)則等
- 項(xiàng)目經(jīng)理挺直腰桿,堅(jiān)持他們的估計(jì),確信自己的經(jīng)驗(yàn)比客戶期望進(jìn)度要強(qiáng)得多
可是,我們對自己的估計(jì)不確定,因此在管理和客戶的壓力下,我們常常缺乏堅(jiān)持的勇氣。
重復(fù)產(chǎn)生的進(jìn)度災(zāi)難
當(dāng)一個(gè)周期4個(gè)月的項(xiàng)目,在第2個(gè)月的節(jié)點(diǎn)上進(jìn)度沒有達(dá)到要求,此時(shí)項(xiàng)目經(jīng)理可以做些什么呢:
- 假設(shè)任務(wù)必須按時(shí)完成,整體進(jìn)度估算合理,那么就指派更多的人手
- 假設(shè)任務(wù)必須按時(shí)完成,整理進(jìn)度估算偏少,那么指派更多更多的人手
- 不削減任務(wù),確保工作能徹底完成,重新安排進(jìn)度
- 削減任務(wù),仔細(xì)認(rèn)真的調(diào)整項(xiàng)目,重新安排進(jìn)度
前兩種情況是災(zāi)難性的,因?yàn)樵黾尤耸謴娜矫嬖黾恿隧?xiàng)目必要的總體工作量:
- 任務(wù)重新分配本身和所造成的工作中斷
- 培訓(xùn)新人員
- 額外的相互溝通
而且毫無疑問的是,增加人手所開發(fā)出的產(chǎn)品,比沒有增加人手而是重新安排進(jìn)度所生產(chǎn)出的產(chǎn)品更差。向進(jìn)度落后的項(xiàng)目中增加人手,只會(huì)使得項(xiàng)目更加落后。
以上內(nèi)容就是《人月神話》第二章——人月神話,后兩節(jié)所講述的內(nèi)容
作者反復(fù)論證了軟件項(xiàng)目延期最主要的原因——缺乏合理的進(jìn)度安排。讀者不忍發(fā)問了“沒有按時(shí)完成任務(wù)是因?yàn)闀r(shí)間太短”這難道不是詭辯嗎?
其實(shí),作者想要提醒的是那些制定項(xiàng)目進(jìn)度的人。進(jìn)度估算作為軟件工程中十分重要的一環(huán),常常得不到應(yīng)有的重視,不全面的、不科學(xué)的、不負(fù)責(zé)任的進(jìn)度安排時(shí)常發(fā)生。項(xiàng)目經(jīng)理總會(huì)有意無意的犯下各種錯(cuò)誤,例如忽略測試階段、盲目自信、缺少方法、缺乏勇氣等等。這么說來,軟件項(xiàng)目延期的主要責(zé)任人也就是制定項(xiàng)目進(jìn)度的人。
放到現(xiàn)實(shí)中來說,作者的觀點(diǎn)其實(shí)是有前提假設(shè)的,那就是所有的程序員都拒絕加班,所有項(xiàng)目都會(huì)指派一名項(xiàng)目經(jīng)理,所有客戶都知道自己要什么。說不定國外的環(huán)境確實(shí)是這樣的,但是這三點(diǎn)假設(shè)在我們身邊都是不成立的。
首先,程序員無條件的加班讓項(xiàng)目經(jīng)理更加盲目自信,為了能夠接收到項(xiàng)目,不斷地妥協(xié)于進(jìn)度緊張的客戶。其次,人員安排的混亂和欠缺,大多數(shù)項(xiàng)目是不存在項(xiàng)目經(jīng)理的,甚至是由商務(wù)人員直接規(guī)劃進(jìn)度。最后,也是最可怕的事情,客戶不清楚自己需要的是什么。
這些問題都發(fā)生在進(jìn)度估算階段之前,但由于不是本書重點(diǎn)所以不再贅述,以后會(huì)在其他書籍的導(dǎo)讀中再來討論這幾個(gè)問題。
總之,《人月神話》第二章作者通過嚴(yán)謹(jǐn)詳實(shí)的論證,得出了這樣的結(jié)論,多少有點(diǎn)偏袒程序員的意思,難道項(xiàng)目延期的問題只在于安排進(jìn)度的人嗎?