我曾經(jīng)做過一個(gè)失敗的項(xiàng)目。那時(shí)我對(duì)項(xiàng)目管理一知半解,對(duì)于風(fēng)險(xiǎn)管理、進(jìn)度管理等更是一無所知,以致最后花費(fèi)了當(dāng)初幾倍的人力來挽救它造成的損失。
項(xiàng)目概況
這個(gè)項(xiàng)目的策劃是在11月開始的,是對(duì)現(xiàn)有的一個(gè)Web應(yīng)用程序進(jìn)行改造??蛻魧懥艘环莺?jiǎn)單的需求說明,希望能在12/25圣誕節(jié)之前投入使用。根據(jù)這份需求說明,我們整理出了一份功能列表,然后估算每個(gè)功能的代碼規(guī)模,發(fā)現(xiàn)規(guī)模大大超出期限,于是跟客戶交涉,刪減了一些功能,并將發(fā)布日期定為1/26。最后結(jié)果為服務(wù)器端3KL,客戶端3KL,按照1KL/人月的保守估計(jì),需要6個(gè)人月,投入兩個(gè)人,正好能在1月底完工。于是項(xiàng)目就開始了。
為檢查項(xiàng)目進(jìn)行狀況,客戶希望在12/25之前發(fā)布beta測(cè)試版。因此主要功能必須在短短的兩個(gè)月之內(nèi)完成。為了趕工期,我們省略了概要設(shè)計(jì)和大部分的詳細(xì)設(shè)計(jì),直接進(jìn)入編碼階段。一部分用戶需求還未確定,只好先進(jìn)行確定部分的編碼工作,將那些遲遲沒有定論的需求放在beta版發(fā)布之后。
我負(fù)責(zé)客戶端的開發(fā),很不幸的是負(fù)責(zé)服務(wù)器端開發(fā)的同事在11月上旬一直在忙于另一個(gè)項(xiàng)目,而到了11月中旬又因病離職,導(dǎo)致11月份服務(wù)器端幾乎沒有任何進(jìn)展。好在服務(wù)器端開發(fā)難度不大,項(xiàng)目組在12月份調(diào)入另一名強(qiáng)人來接班。在我倆的努力下終于在12/24如期發(fā)布了beta版。
到這里似乎一切順利,但接下來的一個(gè)月中,未確定的需求和不斷發(fā)現(xiàn)的bug成了災(zāi)難。項(xiàng)目從原定的1/25推遲到2/8,再推遲到2/16。而這時(shí)開發(fā)團(tuán)隊(duì)也由原來的兩個(gè)人增加到五個(gè)人,增加的三個(gè)人專職測(cè)試。最后終于發(fā)布了,結(jié)果發(fā)布當(dāng)天就因?yàn)橐粋€(gè)小bug導(dǎo)致數(shù)十個(gè)用戶數(shù)據(jù)被誤刪。于是暫停服務(wù)繼續(xù)修改,改為封閉式開發(fā),并且繼續(xù)增加測(cè)試隊(duì)伍到10個(gè)人,這樣整個(gè)團(tuán)隊(duì)就有12個(gè)人在工作。
這樣的狀況一直持續(xù)到二月底,項(xiàng)目總算正常發(fā)布了。
計(jì)算一下結(jié)果
下面是每個(gè)月的開發(fā)者數(shù)目。
計(jì)劃 實(shí)際
11月 2 1.5
12月 2 2
1月 2 5
2月 0 8.5
總計(jì) 6 17
實(shí)際的工時(shí)約為預(yù)計(jì)的3倍。
分析原因
為什么這個(gè)項(xiàng)目會(huì)失???我認(rèn)為原因在以下幾個(gè)方面。
1. 忽視項(xiàng)目風(fēng)險(xiǎn)。這個(gè)項(xiàng)目的風(fēng)險(xiǎn)有以下幾條
風(fēng)險(xiǎn) 影響(人月) 發(fā)生的可能性 實(shí)際影響(人月)
未確定的需求 1 100% 1
原有框架的缺陷造成的實(shí)現(xiàn)困難 0.5 20% 0.1
開發(fā)環(huán)境不完善 0.2 50% 0.1
新的bug管理系統(tǒng)造成的學(xué)習(xí)困難 0.2 50% 0.1
發(fā)布后的bug 1 50% 0.5
總計(jì) 1.7
總計(jì)是1.8人月,也就是說項(xiàng)目應(yīng)當(dāng)在計(jì)劃的6人月上再加上1.8人月,實(shí)際的估算值應(yīng)為7.8人月。但在估算時(shí)并沒有考慮到這些風(fēng)險(xiǎn)(或者說,雖然考慮到了但卻沒有認(rèn)識(shí)到它的嚴(yán)重性),導(dǎo)致1月底計(jì)劃結(jié)束時(shí)風(fēng)險(xiǎn)暴露,不得不增加人力來修補(bǔ)問題。
2. 對(duì)風(fēng)險(xiǎn)未采取相應(yīng)對(duì)策。實(shí)際上,上述風(fēng)險(xiǎn)中甚至存在發(fā)生概率為100%的風(fēng)險(xiǎn),但由于開發(fā)者過于自信(所謂的“自我膨脹”),以致并未采取相關(guān)措施。甚至在12月底,某些問題已浮出水面時(shí)依然未進(jìn)行控制。
當(dāng)初如果能采取一些對(duì)策,或許就不會(huì)這么糟糕。
風(fēng)險(xiǎn) 對(duì)策
未確定的需求 嚴(yán)格控制流程,在詳細(xì)設(shè)計(jì)未完成之前禁止編碼
原有框架的缺陷造成的實(shí)現(xiàn)困難 及早聯(lián)系框架開發(fā)者調(diào)整
開發(fā)環(huán)境不完善 盡早使用較為完善的開發(fā)環(huán)境
發(fā)布后的bug 發(fā)布β版
3. 人月神話?!度嗽律裨挕愤@本經(jīng)典著作中提到,增加開發(fā)者并不能加快開發(fā)進(jìn)程。請(qǐng)注意2月份比1月份多出來的那3.5人月。從事后結(jié)果來看,這3.5人月并未發(fā)現(xiàn)一個(gè)有效的bug。這是因?yàn)?,這3.5人月是從其他項(xiàng)目組臨時(shí)借調(diào)過來的人員,完全不熟悉項(xiàng)目,加上不完善的測(cè)試