摘要:
估算、計劃、計劃跟蹤是項目管理的主要工作,難度之高超乎你想象!光靠學(xué)習(xí)項目管理理論難以管好項目,而往往真能管好項目的都是那些在具體項目中打滾出來的實干人士。本文將會讓你全面學(xué)習(xí)項目估算、計劃、計劃跟蹤的知識,體驗實際項目管理的難度,學(xué)到提高項目管理水平的一些方法。本文有點長,麻煩你慢慢閱讀了!
作者:
張傳波
軟件知識大學(xué)
大綱:
1.從建筑工程說起
2.估算要估啥?
3.估算如何做出來?
4.計劃有什么內(nèi)容?
5.計劃是如何做出來的?
6.如何跟蹤計劃?
7.優(yōu)秀項目經(jīng)理是怎樣煉成的?
正文:
從建筑工程說起
大家都喜歡用建筑工程與軟件工程做比較,但我們常常所說的建筑工程只是指建筑施工部分,而不是一個完整的建設(shè)項目。我們常常將施工項目管理與軟件項目管理進(jìn)行比較,這是不合適的。
一個完整的建設(shè)項目,由甲方提出需求,設(shè)計院根據(jù)需求設(shè)計出圖紙,再由造價公司進(jìn)行估價,然后公開招標(biāo),最后由建筑公司承擔(dān)建設(shè)。相對于軟件項目,建筑工程有以下特點:
1.從需求到竣工,經(jīng)歷需求、設(shè)計、估價、建設(shè)等環(huán)節(jié),每個環(huán)節(jié)由不同專業(yè)的公司或人員完成。
2.每個環(huán)節(jié)簽署不同的合同,每個環(huán)節(jié)對應(yīng)不同的乙方。而軟件項目從需求到開發(fā)完成,基本上是簽署一個合同,只有一個乙方。
3.整個過程可以認(rèn)為是瀑布型的,需求和設(shè)計會在前期確定,后期基本上不會變動。而軟件項目就沒有這么理想了,需求和設(shè)計不斷在變。
4.建筑工程只會采用最成熟的技術(shù),可行性和設(shè)計方案要經(jīng)過反復(fù)論證,你看看港珠澳大橋就論證了好多年了。而軟件項目往往要采用不成熟的技術(shù),邊設(shè)計邊嘗試。
5.建筑工程的估算是在需求與設(shè)計都確定的基礎(chǔ)上估算的。而軟件項目不確定的東西太多,估算無法一次成型。
軟件項目管理可能是最復(fù)雜的一種項目管理,因為軟件項目具備這樣的特點:
1.需求、設(shè)計不明確。
2.項目組需要在需求設(shè)計不明確的基礎(chǔ)上,承擔(dān)需求、設(shè)計、編碼、實施等全部工作。
如果你是這樣項目的項目經(jīng)理,對你來說是多么大的挑戰(zhàn)??!
建筑行業(yè)發(fā)展了這么多年,整個建設(shè)工程的各個環(huán)節(jié)已經(jīng)有很多專業(yè)的公司,有很多設(shè)計院、造價公司、建筑公司等。而軟件行業(yè),幾乎很少見到專業(yè)的需求分析公司、軟件設(shè)計公司。這既是軟件行業(yè)的特點決定的,也是甲方習(xí)慣決定的。我們公司在一些項目嘗試和客戶簽署兩份合同,第一份合同只做需求的工作,而第二份合同則完成實現(xiàn)與編碼,但客戶往往不會接受。
軟件項目管理難歸難,但我們還是要去面對的,我們應(yīng)該如何應(yīng)對軟件項目的估算與計劃呢?
估算要估啥?
很多人問如何才能做好估算?這個問題是問如何正確做事情的問題,而實際上要回答好這個問題,先要回答估算要估算什么內(nèi)容的問題,也就是什么是正確的事情問題。
對于估算要區(qū)分以下幾種情況:
1.甲方對項目的估算
甲方想做某個系統(tǒng),會根據(jù)自己對系統(tǒng)的估計以及自己的預(yù)算估計出一個價錢。甲方往往不能準(zhǔn)確對項目進(jìn)行估算,項目的價錢往往是來自預(yù)算,而所有甲方都是想在有限的預(yù)算內(nèi)辦更多的事情。很多項目需要招標(biāo),其實重要目的就是希望找出性價比最高的軟件公司。
2.乙方在投標(biāo)階段對項目的估算
作為軟件公司,要判斷該項目需要多少的成本,然后稍微“放大”成本作為投標(biāo)價,這樣公司才能有利可圖。
然則現(xiàn)實情況很殘酷:
1)需求大多數(shù)是不明確的,甚至甲方對項目的期望都沒有想清楚,這樣軟件公司無從估算。
2)很多招標(biāo)其實甲方都“隱含”一個預(yù)算價,如果軟件公司的報價超出這個價錢,你就別想中標(biāo)了。而這個預(yù)算價往往會小于軟件公司對項目的估算,讓你難以決定這項目做還是不做好!
這個階段的估算是最難做的,除了考慮項目實際工作量,還要考慮項目是否要賺錢、客戶關(guān)系等因素。
在我們公司,對于已經(jīng)產(chǎn)品化的項目,估價比較容易,這其實是一個積累的過程。而對于全新的以前沒有多少經(jīng)驗的項目,估價其實也是很難做得很好的,我們往往是由項目經(jīng)驗與技術(shù)經(jīng)驗都實力雄厚的總經(jīng)理來“拍腦袋”拍出來的。所謂“拍腦袋”,其實不代表亂猜,是以雄厚的經(jīng)驗和強(qiáng)大的知識為前提的。
3.項目組開展項目時對項目的估算
當(dāng)我們要真刀真槍開干時,項目組需要對項目的實際工作量有充分的認(rèn)識,并以此為基礎(chǔ)來做好項目工作。
我們常常所說的項目估算問題,就是指這第三種情況,后文我們將重點講述這種情況。
項目估算到底要估什么呢?
項目的成本包括:人工費、差旅費、業(yè)務(wù)費用、招待費用、采購費用。
人工費:
包括項目組各人的薪金,以及公司運作分?jǐn)偟巾椖拷M各人頭上的運作成本。公司運作成本包括非項目組人員的人工、場地設(shè)備費用、水電通訊費用、人員培訓(xùn)招聘費用、人員閑適成本、研究失敗時的成本、商務(wù)活動的成本等。
一般來說,項目組只需要估算出實際的項目工時就可以了,工時再乘以一個折合的人工成本單價就是項目的人工成本了。
差旅費:項目組成員因項目出差的交通費、住宿費、通訊費、差旅補(bǔ)貼等。
業(yè)務(wù)費用:公司領(lǐng)導(dǎo)、銷售人員與客戶進(jìn)行商務(wù)談判、聯(lián)絡(luò)所花費的費用,例如送禮、回扣等的費用。這筆費用往往還很大呢,不過項目組一般不需要估算這部分費用。
招待費用:項目組成員因工作需要,和客戶相關(guān)人員吃飯、娛樂的相關(guān)費用。例如:需求調(diào)研期間和客戶吃飯;項目實施階段因推動驗收和客戶一起加班,加班后請客戶吃飯。這筆費用一般不會很大,一頓飯一般就是幾十到一百多元,一個項目也不會請很多次吃飯。
采購費用:采購項目所需的軟硬費用,如數(shù)據(jù)庫平臺、服務(wù)器等,如果項目部分內(nèi)容要外包出去,那還要包括外包的費用。有時候這筆費用會比較巨大,但這些費用都很容易估計。
以上費用最難估計的就是人工費,人工費我們以工作量來考慮,下文開始我們重點講解項目工作量的估算。
如何估計項目的工作量呢?
簡單地說,我們需要將項目的所有工作進(jìn)行分解,直到每個分解后的工作都能估計出具體的所需時間來。
那項目的“所有工作”包含什么呢?回答這個問題其實就是回答“估算要估啥?”這個問題了。
一般情況下,項目工作包括以下內(nèi)容:
1.項目前期工作。
包括商務(wù)談判、技術(shù)方案準(zhǔn)備、投標(biāo)準(zhǔn)備、前期需求調(diào)研、前期技術(shù)研究等工作。當(dāng)你接手項目的時候,這些工作往往已經(jīng)做了,你估算項目工作量時,不要忘記這些已經(jīng)花費的工作量。
2.商務(wù)方面的工作。
從客戶開始有意向做這個項目,一直到項目驗收、維護(hù),整個過程中都會貫穿商務(wù)活動。前期的商務(wù)活動有商務(wù)談判、投標(biāo)準(zhǔn)備、合同簽署等,而簽訂合同后的商務(wù)活動有項目請款和催款、促進(jìn)驗收等。某些商務(wù)活動屬于灰色地帶,如請客、送禮等,這些往往是花費巨大的。一般來說我們不需要估算灰色地帶的商務(wù)活動,灰色地帶的商務(wù)活動公司的高層會考慮的了,但我們需要對正常的商務(wù)活動進(jìn)行估算。
3.需求調(diào)研方面的工作。
需求調(diào)研是一個“反復(fù)”的過程,一般來說能在前期確定80%已經(jīng)是很了不起的成績。
需求調(diào)研的工作量一般由三部分組成:前期調(diào)研的工作量,后期需求細(xì)化的工作量,后期需求變更的工作量。
前期調(diào)研的工作包括:項目組內(nèi)部討論、確認(rèn),與客戶討論、確認(rèn)需求,編寫需求規(guī)格說明書及組織評審等工作。
需求細(xì)化是指對之前已確定需求的進(jìn)一步具體化、優(yōu)化或輕微調(diào)整,如:界面細(xì)節(jié)的確認(rèn)、各業(yè)務(wù)概念的具體化等。需求細(xì)化一般是可預(yù)見可估計的。
需求變更是指對之前已確認(rèn)需求的“否定”,變更的原因主要有兩種情況:一是之前需求調(diào)研工作沒有能做好,理解錯客戶的真正意圖或者是遺漏重要的需求;二是客戶業(yè)務(wù)情況發(fā)生變化,與之前情況已經(jīng)不同。第一種情況應(yīng)該盡量避免,而第二種情況一般是難以估計的。需求變更時需重新估算,和客戶簽訂需求變更協(xié)議。
我們一般會充分估計前期需求調(diào)研工作量以及需求細(xì)化工作量,對于需求變更則暫不考慮,因為一旦變更我們會和客戶確認(rèn)需求變更的費用。但有些項目有很特殊,項目報價中預(yù)留了少量的需求變更費用,這時估算中就需要適當(dāng)考慮需求變更了。
4.軟件設(shè)計方面的工作。
不少項目為了“趕”進(jìn)度,設(shè)計文檔很少,然則項目真的很簡單、不需要仔細(xì)考慮設(shè)計的情況是非常少的!
軟件設(shè)計工作包括:
1)系統(tǒng)架構(gòu)設(shè)計。
2)技術(shù)方案選擇。
3)關(guān)鍵模塊設(shè)計。
4)數(shù)據(jù)庫設(shè)計。
5)用戶體驗設(shè)計。
以上內(nèi)容具體項目可以有所取舍,但不可能全部都不用考慮。
另外不要忘記了以下兩方面的工作:
1)各類設(shè)計工作產(chǎn)品的討論、確認(rèn)、評審工作。
2)設(shè)計細(xì)化與優(yōu)化工作。設(shè)計是需要持續(xù)改進(jìn)的,不要忘記這些工作。
5.編碼方面的工作。
要注意不要遺漏代碼返工、代碼評審、代碼調(diào)試、修復(fù)缺陷的工作量。
需求、設(shè)計沒有做好,編碼質(zhì)量不過關(guān),這些會嚴(yán)重增加代碼返工、代碼調(diào)試、修復(fù)缺陷的工作量。代碼首次完成的時間如果是100小時,那么后面代碼調(diào)試、修復(fù)缺陷等所需要的時間可能是200小時以上,往往我們估算時只考慮了前面的100小時。
6.測試方面的工作。
測試工作包括測試計劃、測試用例、測試文檔評審、測試環(huán)境準(zhǔn)備、測試數(shù)據(jù)準(zhǔn)備、執(zhí)行測試、回歸測試等內(nèi)容。
軟件測試一般要經(jīng)歷多輪,我們估算往往只考慮了第一輪,就好象軟件只需要測試一回就不用再測試了。而測試環(huán)境準(zhǔn)備、測試數(shù)據(jù)準(zhǔn)備這些工作也很容易在估算時“忘記”了。
7.實施方面的工作。
實施工作包括實施計劃、實施方案的準(zhǔn)備,編寫管理員手冊、用戶手冊,熟悉系統(tǒng),搭建實施環(huán)境并進(jìn)行演練,在客戶現(xiàn)場安裝、部署、調(diào)試系統(tǒng),培訓(xùn)客戶,協(xié)助系統(tǒng)上線,推動驗收等工作。
我們公司通常的做法是:
1)系統(tǒng)在客戶處部署后,會推動客戶進(jìn)行初步驗收,初驗標(biāo)準(zhǔn)是系統(tǒng)的所有功能跑就可以了。初驗成功,客戶需要支付相應(yīng)的項目款項。
2)初驗后要協(xié)助客戶讓系統(tǒng)正式上線,讓客戶真正用上這套系統(tǒng),推動最終驗收。
影響終驗主要有兩個因素,一個是客戶在使用系統(tǒng)過程中會提出各式各樣的問題,如果在需求范圍內(nèi)應(yīng)該都予以滿足;而另外一個影響因素是客戶會因為各種各樣的原因推遲使用系統(tǒng),或者是使用不充分,讓項目終驗遙遙無期。估算時需要充分考慮這兩個影響因素。
8.維護(hù)方面的工作。
項目終驗后,一般都要提供半年到一年的維護(hù)服務(wù),維護(hù)器后項目還會有最后一筆款項。
維護(hù)期比較長,事情繁雜,一個不小心就很容易估算不足。
維護(hù)的工作一般有:
1)用戶培訓(xùn);
2)協(xié)助客戶錄入資料;
3)修復(fù)被破壞的數(shù)據(jù)以及數(shù)據(jù)庫;
4)修改客戶或內(nèi)部發(fā)現(xiàn)的軟件缺陷;
5)代碼重構(gòu),提高部分程序的性能與可靠性;
6)修改一些界面文字或顯示風(fēng)格;
7)回答客戶反饋的一些安裝與操作疑難問題;
8)提供合同中所要求的其它特殊軟件維護(hù)服務(wù)。
在維護(hù)期,往往還需要發(fā)布數(shù)個小版本來解決客戶的問題。
9.項目管理方面的工作。
項目管理工作主要有編制項目計劃、持續(xù)更新項目計劃、跟蹤計劃執(zhí)行、各種工作協(xié)調(diào)、指導(dǎo)項目組成員完成工作等等。
項目管理工作量一般占整個項目工作量的10-20%,項目不明確的東西越多、項目組成員水平越不足、項目組成員之間工作磨合度越不好,管理工作量就越大。
項目管理在項目進(jìn)行整個過程都需要持續(xù)進(jìn)行,一般來說前期工作量會比較大,版本發(fā)布前后階段工作量也會比較大。項目管理前期工作抓得緊抓得好,會大大減輕后期的工作量。
10.配置管理方面的工作。
什么叫配置管理?簡單說就是對工作產(chǎn)品的管理,包括對各類文檔、各種記錄、代碼、數(shù)據(jù)庫、腳本、安裝程序、組件等等的管理。
軟件生產(chǎn)過程的工作產(chǎn)品可分為兩類:中間產(chǎn)物和最終產(chǎn)物。
中間產(chǎn)物有:
1)工程類:需求文檔、設(shè)計文檔、測試方案、代碼、數(shù)據(jù)庫腳本、數(shù)據(jù)庫、測試腳本等。
2)管理類:開發(fā)計劃、測試計劃、培訓(xùn)計劃、采購計劃、實施計劃等。
3)記錄類:會議記錄、郵件、缺陷等。
最終產(chǎn)物是指最終會交付給客戶的東西,一般有:組件、安裝程序、數(shù)據(jù)庫、用戶手冊、管理員手冊等。
針對不同的工作產(chǎn)品應(yīng)采取不同的針對性管理辦法,很多公司會制定單獨的配置管理計劃。
11.質(zhì)量保證方面的工作。
嚴(yán)格來說,質(zhì)量保證是靠項目組全體來保證的,這里所說的質(zhì)量保證是“狹義”的質(zhì)量保證,是指:要確保項目組按照既定的規(guī)定、過程、標(biāo)準(zhǔn)來工作,需按照既定的格式要求產(chǎn)出相應(yīng)工作產(chǎn)品。
對于以上十一點,實際項目估算中往往出現(xiàn)這樣的問題:
1.忘記包含項目前期工作的工作量。
2.沒有考慮商務(wù)、維護(hù)、配置管理、質(zhì)量保證方面的工作。
3.需求調(diào)研、軟件設(shè)計、編碼、測試、實施方面的工作估計過少。
4.項目管理方面的工作量估計不足。
估算如何做出來?
這里開始所說的估算,全部都是指項目組對項目的估算,這個估算的目的是用來指導(dǎo)項目的具體工作。
有很多種估算辦法,大致可以分為兩類:
1.先得到軟件規(guī)模,然后根據(jù)公司實際的生產(chǎn)率由軟件規(guī)模導(dǎo)出工作量。
2.直接得到工作量。
第一類的常見方法有:功能點法、代碼行法,第二類的常見方法有Delphi估算法、微軟的由底而上估算法。
什么是軟件規(guī)模?我們先看看一個搬磚頭的估算。
假設(shè)有1000塊磚頭,它們的大小和重量一樣,每名工人每天能搬100塊磚頭,于是我們可以估算到需要10人日來搬完。10人日的意思是1名工人需要10天完成,而10名工人只需要1天就搞定了。
這個1000塊代表了工作的規(guī)模,而生產(chǎn)率就是100塊/日,這樣就可以推算出工作量為10人日。建筑工程可以得到土石方量、混凝土量、鋼筋量等代表工作規(guī)模的數(shù)據(jù),這樣就比較容易推算出完成這些工作需要的工作量。
而軟件工程估算也希望能做到類似的效果,但用什么來代表軟件項目的工作規(guī)模呢?功能點和代碼行是常見的兩種軟件規(guī)模表示方式。
軟件規(guī)模是與軟件具體生產(chǎn)技術(shù)、項目管理辦法、項目組人員水平等無關(guān)的東西,軟件規(guī)模只和軟件項目本身的性質(zhì)相關(guān),如果我們能找到合適的統(tǒng)一的標(biāo)準(zhǔn)來度量每個項目的規(guī)模,這樣每個軟件項目之間就可以進(jìn)行橫向比較了。功能點法和代碼行法都希望能達(dá)致這樣的效果。
功能點法的基本思路是將復(fù)雜的軟件分解為一個一個獨立的粒度一致的功能點,附加一些調(diào)整系數(shù),得到軟件規(guī)模。
我們的項目大部分是數(shù)據(jù)庫四輪馬車的操作(查詢、增加、修改、刪除),功能點法從比較高的層次對這些工作進(jìn)行抽象,有一套嚴(yán)密的規(guī)則可以讓你將需求分解成一個一個的功能點。代碼行法思路也類似,不過分解的結(jié)果是代碼行而已。但一般來說代碼行與軟件的實現(xiàn)技術(shù)相關(guān)度太大,大家會更加偏愛功能點法。
功能點法和代碼行法有比較長的歷史,也有很多詳細(xì)資料,大家可以去查閱一下。這方法理論上很理想,但實踐效果很差,我還沒有見到一家能成熟應(yīng)用并且取得比較好效果的公司。功能點法和代碼行法有這樣的一些難以解決的問題:
1.只適用于數(shù)據(jù)庫四輪馬車的操作的項目,高技術(shù)含量、創(chuàng)造性高的軟件不適用,如游戲軟件、計算機(jī)負(fù)責(zé)計算與決策軟件等。
2.我們絕大部分項目是需求不明確、設(shè)計不明確,并且工期很趕的,這兩個方法都無法適應(yīng)這樣的現(xiàn)實條件。需求不明確基本上無法得到軟件規(guī)模,建筑工程為什么能做到,是因為需求和設(shè)計都十分明確了。
3.兩個方法的規(guī)則都很詳細(xì),要花大量時間學(xué)習(xí)和實戰(zhàn)才能掌握。
4.由工作規(guī)模導(dǎo)出工作量這樣的思考方式,難以適用于軟件項目。項目組還是習(xí)慣列出具體的任務(wù),逐條任務(wù)估計時間,而且只有這樣的工作方式才能讓項目組感覺更加踏實。
Dephi估算法是比較符合大家實際工作習(xí)慣,也是比較容易掌握的估算辦法。
Delphi法的大致方法如下:
1.找?guī)酌Y深專家,一起對項目進(jìn)行WBS,把項目的工作分解為十幾條最多二三十條的工作項。
2.全部專家各自估計每條工作項的工作量,并向其他專家闡述自己的理由。
3.第一次各專家估出來的結(jié)果可能差異比較大,每位專家聽取別人的意見后,重新估算。
4.按照上述辦法,各專家反復(fù)估算幾次,一般次數(shù)就是2-4次,各專家估計的工作量會越來越趨近,這個時候取全部專家的平均值。
普遍認(rèn)為各專家的經(jīng)驗與知識水平會嚴(yán)重影響結(jié)果的準(zhǔn)確性,而我的實踐經(jīng)驗是:應(yīng)該讓項目組每個人自己來估算,也就是讓大家來當(dāng)專家,在這個基礎(chǔ)上可以再增加一兩名來自項目組外部的專家。
有時候覺得估算這個問題搞得太復(fù)雜了,各式各樣的方法是不是太夸張了?其實最簡單的方法就是讓負(fù)責(zé)該項工作的人自己來估計工作量,微軟的由底而上的估算方法就是這樣做的,可謂返璞歸真??!
微軟由底而上的估算方法大致是這樣的:對項目各項工作進(jìn)行分解后(即俗稱的wbs:work breakdown structure,工作分解結(jié)構(gòu)),每個任務(wù)落實負(fù)責(zé)人,由負(fù)責(zé)人對自己的任務(wù)進(jìn)行估計。這個辦法有以下好處:
1. 最終該任務(wù)是由這個人來完成的,他估計多少時間才能做完,這個時間才是最接近實際的。
2. 負(fù)責(zé)該任務(wù)的人進(jìn)行估算的時候,肯定需要認(rèn)真思考這個任務(wù)的風(fēng)險,需要做哪些具體的工作,這樣更容易在未開始工作之前就發(fā)現(xiàn)更多的潛在問題。相反如果由項目經(jīng)理來分配時間,這個人就可能不會去思考這個任務(wù)了。
3. 做這個任務(wù)的人會有被重視和尊重的感覺,他會很重視自己承諾的完成時間,并且想法設(shè)法按時間完成。這樣會減少很多項目管理時間,因為每個任務(wù)負(fù)責(zé)人都會主動地跟蹤好自己的工作。
其實微軟這個方法根本就沒有什么特別,所有正常人都可以想到這個方法,但仍然有很多人去追求那些不太靠譜的估算方法。
這個方法還是有這樣的一些問題的:
1.有人會估算偏小,比方他說需要5天,但往往10天還完不成。
2.有人估算過于保守。
3.項目的進(jìn)度要求就是很緊,基本上你必須在指定時間內(nèi)完成,估算顯得毫無價值。
第一個問題是比較常見的,但我們要這樣想:估不準(zhǔn)也比不估算好,估算偏差哪怕超過100%,也比不估算好,至少有個譜。
大家是會進(jìn)步的,估不準(zhǔn)往往是對任務(wù)和自己能力認(rèn)識不到位,要讓大家不害怕估算,只要敢于估算,問題才會暴露出來,才能持續(xù)進(jìn)步。
第二個問題分兩種情況,有些人是確實是過分保守的對自己信心不太足,項目經(jīng)理可以多多來指導(dǎo)他的工作,看看他具體的進(jìn)展,讓他更加充分地了解任務(wù),更加充分了解自己的能力,增強(qiáng)他的信心,這樣他就能持續(xù)進(jìn)步了。而另外一種情況就比較惡劣,少數(shù)人會故意增大時間,這樣他平時工作不必全力以赴,可以比較悠閑,甚至可以利用工作時間干私事。如果發(fā)現(xiàn)這樣的情況,就應(yīng)該嚴(yán)肅處理了,不要做爛好人,這樣的人在團(tuán)隊中存在是對團(tuán)隊的極大傷害。
第三個問題往往是各項目經(jīng)理心中的痛楚,他們會覺得:實在無奈?。∽鲰椖烤褪窃谟邢迺r間有限資源內(nèi)做不可能完成的任務(wù),在這樣的情況下,你就不要跟我扯估算了!
我們的項目大部分情況都是非常大壓力的,應(yīng)對這樣大的壓力越需要冷靜。實際上大部分項目盡管是有壓力,但只要發(fā)揮團(tuán)隊的聰明才智,還是可以高效地做好工作的,不需要加班或者少加班。本文稍后會介紹這個問題的應(yīng)對辦法。
介紹了這么多種估算方法,每種都有很多問題,那到底怎樣才能做好項目估算呢?
軟件項目的特點就是項目簽訂時,價錢是死的,工期是死的,而需求和設(shè)計是不明確的。
我的經(jīng)驗告訴我,功能點法、代碼行法這些方法基本上是不靠譜的,我在實際項目中會綜合使用Dephi法和由底而上的估算方法,并予以改良,下面介紹一下我的一些心得體會。
1.項目估算與其說是估出來,還不如說是做出來的。
假設(shè)某項目是這樣的情況:
1)合同簽署的金額是100萬,工期是3個月。
2)需求只是大致寫了,并不明確。
3)老板要賺50萬,給你的預(yù)算只有50萬。
我們很多項目都是這樣的情況,不是等你估算出比較靠譜的數(shù)字,然后才去報價簽合同的,我們經(jīng)常要在老板指定的預(yù)算下完成項目。
你現(xiàn)在要負(fù)責(zé)這個項目,你會如何做估算呢?
你需要做好兩個事情,才能保證項目實際成本控制在預(yù)算內(nèi)。
第一個事情,控制好需求。需求不明確,這既是不利因素也是有利因素,應(yīng)盡量往有利的方向控制。不明確的好處就是你有控制需求的空間,抓住客戶的關(guān)鍵需求,簡化不必要的花銷的需求,能極大地降低項目工作量。
第二個事情:想盡辦法降低開發(fā)工作量。不要因為進(jìn)度緊就不認(rèn)真思考軟件的設(shè)計,應(yīng)盡量采用簡單的成熟的設(shè)計方案,簡化工作。
2.估算應(yīng)該持續(xù)進(jìn)行,持續(xù)細(xì)化。
項目初期很難對項目做完整估算,但能估計的部分應(yīng)先估計出來,并且針對不明確的部分安排計劃去搞清楚。
3.估算是項目各種工作估算的總和。
估算并不是只是得到一個項目估算的總體數(shù)字,項目的估算總數(shù)其實是由項目各種工作的估算組成的。
前文介紹了項目的各種工作,每一種工作都需要認(rèn)真估算。如果估算發(fā)生偏差,要能定位到具體是哪部分的估算出問題了,否則估算沒有指導(dǎo)項目工作的價值。功能點法、代碼行法的估算辦法,只能得到一個項目估算的總數(shù),而不能定位到具體的哪一部分工作,這樣得到的估算結(jié)果難以用來指導(dǎo)項目工作。
4.估算依賴項目組的整體實力。
如果你沒有軟件開發(fā)相關(guān)經(jīng)驗,只懂理論上的估算,你是不可能做好估算工作的。
項目組由項目管理、軟件設(shè)計、編碼、測試、實施等各類專業(yè)人才組成,每個人在自己方面都是專家,每個人都是整個項目組中最有資格對自己專業(yè)方面的工作進(jìn)行估算。前文列出了的項目各方面的工作,應(yīng)該由相應(yīng)的項目成員為主進(jìn)行估算。
5.項目組應(yīng)該不斷學(xué)習(xí)、總結(jié)、進(jìn)步,提高整體水平。
需求不明確、設(shè)計不確定這是項目的特點,我們需要不斷地學(xué)習(xí)來提高水平,將這些不明確的因素逐步明確。
沒有什么妙方能解決這些不明確的因素,靠的還是我們的知識和能力。項目組每個人都應(yīng)該通過持續(xù)估算來發(fā)現(xiàn)自己的不足并提高水平。
6.公司應(yīng)該定期組織項目資深人士制定估算指南并持續(xù)更新。
我們公司有一份估算模板,里面匯集了以前的估算經(jīng)驗,列出了所有需要考慮的估算內(nèi)容以及詳細(xì)的說明。
我們以前沒有估算模板時,估算偏差會達(dá)到50%以上,總結(jié)經(jīng)驗發(fā)現(xiàn)偏差的主要原因是估漏!使用估算模板會幫助我們發(fā)現(xiàn)遺漏,后來我們的估算偏差基本可以控制在20%以內(nèi)。
前文的“估算要估啥”小節(jié),我列出了項目通常要考慮的各種工作,也列出了容易估漏和估計不足的地方,大家可在此基礎(chǔ)上根據(jù)自己公司實際情況,修改和擴(kuò)充這些內(nèi)容,寫出自己公司的估算模板或估算指南。
先得到項目規(guī)模,再由規(guī)模導(dǎo)出工作量,這是一個很美好的想法,問題就是和我們的實際情況相去甚遠(yuǎn)了。
將工作分解,直到分解到可以估計工作量的程度,這個可能是最土最有效的方法了。但你可能會問,這樣的估算方法,項目之間就無法橫向比較了?
項目估算第一目標(biāo)是用來指導(dǎo)項目工作,如果這個目標(biāo)都達(dá)不到,那么就不需要考慮項目之間的橫向比較了。
另外我要反問:為什么非要用這樣的方式來作項目之間的橫向比較?有什么好處?國外優(yōu)秀的軟件開發(fā)工作室就不會做這樣無聊的事情,軟件開發(fā)可能是人類最厲害的智力活動,你覺得一定能量化度量嗎?
要從本質(zhì)上提升估算水平,你不太可能用幾天時間去突擊學(xué)習(xí)某種估算辦法就能勝任項目實際的估算工作。
提高估算能力靠你長期的積累,你的實力、你的項目團(tuán)隊的綜合實力,還有你們公司的綜合實力,決定了估算的水平!
估算是為項目服務(wù)的,后文你會看到如何利用估算來管理項目,又如何因應(yīng)項目實際情況來更新估算。
下面開始,我們將講述估算與計劃的關(guān)系、計劃及計劃跟蹤。
計劃有什么內(nèi)容?
關(guān)于項目計劃,我們要先討論什么是正確的事情,然后再討論如何做正確的事情,我們先來看看項目計劃應(yīng)該有什么內(nèi)容?
讓大家做項目計劃,很多人以為用Project做一份開發(fā)進(jìn)度計劃就完事了。而項目的開發(fā)工作只是占了項目工作的其中一部分而已,跟項目所有相關(guān)的工作,我們都需要計劃。諸如開發(fā)計劃、測試計劃、培訓(xùn)計劃、溝通計劃、采購計劃等等,這些計劃的集合,我們稱之為項目計劃。
項目計劃應(yīng)該包含以下內(nèi)容:
1.項目背景、目標(biāo)、概述等。
2.項目需要提交的工作產(chǎn)品,包括內(nèi)部工作產(chǎn)品和最終工作產(chǎn)品。
3.風(fēng)險分析及應(yīng)對措施。
4.項目估算。
5.項目在成本、進(jìn)度、質(zhì)量方面的管理目標(biāo)。
6.項目人員職責(zé)。
7.對項目各項工作的安排,包括但不限于前文介紹的11種工作,如下:
1)項目前期工作
2)商務(wù)方面的工作
3)需求調(diào)研方面的工作
4)軟件設(shè)計方面的工作
5)編碼方面的工作
6)測試方面的工作
7)實施方面的工作
8)維護(hù)方面的工作
9)項目管理方面的工作
10)配置管理方面的工作
11)質(zhì)量保證方面的工作
8.需客戶或第三方協(xié)調(diào)的工作計劃。
9.采購計劃。
10.項目所需的各種硬件資源,包括開發(fā)環(huán)境、運行環(huán)境、測試環(huán)境等。
一般來說項目計劃有一個主計劃,多個子計劃。主計劃總體描述項目的背景、管理目標(biāo)、任務(wù)概述等總體信息,而子計劃則有測試計劃、實施計劃、培訓(xùn)計劃、配置管理計劃等。
下圖是主計劃目錄示例:
下面是進(jìn)度計劃示例:
如果您覺得本文對您有幫助,麻煩點擊一下“推薦”,十分感謝您的支持!
作者:
張傳波
軟件知識大學(xué)
聯(lián)系客服