這幾天我都在為所負(fù)責(zé)的軟件開發(fā)項目心煩著,因為這個項目的時間表遠(yuǎn)遠(yuǎn)滯后于進(jìn)度規(guī)劃。據(jù)Gartner的一項調(diào)研結(jié)果,在軟件開發(fā)項目中有55%的受訪者認(rèn)為他們的開發(fā)進(jìn)度控制是失敗的,有30%的人則認(rèn)為軟件開發(fā)項目延期是家常便飯的事情。為什么會有這么多的進(jìn)度管理問題呢?
時間管理是軟件開發(fā)管理中的一個關(guān)鍵職能,也稱為進(jìn)度管理。它對于項目控制至關(guān)重要,也是對項目成本有直接影響的因素之一。因為縮短項目的時間不僅僅是能節(jié)約那些與時間相關(guān)的成本,而且還可以避免由于延期導(dǎo)致的損失,如賠付延期交付違約金等。本文從軟件開發(fā)項目的時間管理角度出發(fā),介紹關(guān)鍵路徑法在時間管理中的應(yīng)用,并提出實現(xiàn)關(guān)鍵路徑法的步驟和建議。
時間管理常見的錯誤是什么?
軟件開發(fā)項目延期的原因也許有很多,但肯定有一條的是時間沒有管理好,這被公認(rèn)稱為是項目延期的第一因素。事實上,時間管理究竟是"錯在哪里"呢?這個問題通常比技術(shù)或者業(yè)務(wù)問題更值得花時間來思考。
(1)時間進(jìn)度表基線制定錯誤
一般來說,在軟件開發(fā)中追求的是"如期、如質(zhì)、如預(yù)算"的開發(fā)出適合需求的軟件產(chǎn)品。因此,成功的軟件開發(fā)必須事先制定具有一定的預(yù)見性、前瞻性和切實可行的時間進(jìn)度計劃。項目時間進(jìn)度基線是指一種基線化的開始日期和結(jié)束日期,它代表著項目細(xì)分后的每個任務(wù)的預(yù)期開始日期和預(yù)期完成日期。
一般來說,進(jìn)度表基線是使用經(jīng)過評審的歷時估算和資源估算來構(gòu)建的,該進(jìn)度表也是作為任務(wù)進(jìn)度跟蹤的基線。項目進(jìn)度表可以是總體概覽的,比如項目主進(jìn)度表或者里程碑進(jìn)度表;也可以是明細(xì)的,比如每個里程碑內(nèi)的詳細(xì)任務(wù)進(jìn)度表。因此,當(dāng)進(jìn)度表基線制定有失誤的時候,每個任務(wù)的開始時間和完成時間會產(chǎn)生混亂,嚴(yán)重的時候還會在時間上不能銜接,進(jìn)而會帶來資源增加、成本超支等問題。事實上,實踐經(jīng)驗也證明許多軟件開發(fā)項目的延期,是由于在進(jìn)度表基線的時間規(guī)劃上或多或少的存在著失誤。
(2)錯誤的縮短項目非關(guān)鍵路徑時間
在軟件開發(fā)過程中,人們通常會認(rèn)為如果能縮短項目某些任務(wù)的工期可能會縮短項目的總工期。例如,某個工作結(jié)果需要項目團(tuán)隊花費二個月來完成,但如果能夠在一個月內(nèi)完成任務(wù),可能會大大縮短項目進(jìn)度了。因此,許多項目經(jīng)理及其團(tuán)隊可能會使用工期壓縮技術(shù)來提高某些任務(wù)的進(jìn)度,或通過給這些任務(wù)分配更多的資源來縮短工期。
例如,通過趕工的方式來實現(xiàn)縮短工期。趕工的主要優(yōu)點是可縮短完成項目的時間,但缺點是通常會提高項目的總成本。而實際上,軟件開發(fā)項目通常是一個迭代的過程,它不但需要規(guī)劃好項目每一個任務(wù)的開始和結(jié)束時間,而且還需要做好任務(wù)上下之間、前后順序和關(guān)聯(lián)之間的銜接。因為如果通過趕工只是縮短了非關(guān)鍵路徑上的任務(wù),并不會縮短項目的開發(fā)時間,而只會是提高了開發(fā)成本。
(3)沒有明確的時間管理,極易產(chǎn)生"拖延綜合癥"
所有的項目工作都是通過人來實施的,如果不考慮人的因素,時間管理目標(biāo)通常會失控和很難實現(xiàn)的。也是說,成功的時間管理需要考慮人的一些內(nèi)在因素,包括人的工作習(xí)慣或者天性。因為人的習(xí)慣和天性也是造成項目工期拖延的原因之一。例如,在我們的日常工作中經(jīng)常會碰到這樣一種現(xiàn)象,比如要提交一份報告,通常需要三天時間。但在多數(shù)情況下,員工可能會在第三天才開始寫這份報告。也是說,他把前面兩天時間安排去做其它工作了,從第三天才開始寫。這樣一來,他的報告不可能如期完成,即使靠加班加點如期完成也嚴(yán)重影響了報告質(zhì)量。我們把這種情況稱之為"拖延綜合癥"。
有統(tǒng)計表明,如果沒有明確的開始時間,會在項目和工作中極易形成"拖延綜合癥"。這也稱為帕金森定律(Parkinson's Law),它是指工作總是拖延到它所能夠允許遲完成的那。因此,如果沒有明確的時間觀念或忽視了"拖延綜合癥",后都是會造成項目延期,或者是勉強按期完成任務(wù)。
什么是時間管理的關(guān)鍵路徑法?
時間管理是軟件開發(fā)項目管理一個重要的內(nèi)容,因此必須要使用高效的工具來確保時間受到控制,關(guān)鍵路徑法是其中一種常用的工具。正所謂:向關(guān)鍵路徑要時間,向非關(guān)鍵路徑要資源。
(1)什么是關(guān)鍵路徑法?
關(guān)鍵路徑法(Critical Path Method, CPM)早出現(xiàn)于20世紀(jì)50年代,它是一種基于數(shù)學(xué)計算的時間規(guī)劃管理方法,是網(wǎng)絡(luò)圖計劃方法的一種。它是時間管理中很實用的一種方法,廣泛地用于項目進(jìn)度分析和時間管理。一般來說,在項目管理中關(guān)鍵路徑法是上連著WBS(工作分解結(jié)構(gòu)),下連著執(zhí)行進(jìn)度控制與監(jiān)督。因此,一般是用它來預(yù)測整個項目的工期,和幫助項目主管防止項目進(jìn)度超期。
關(guān)鍵路徑法是將項目分解成多個獨立的活動并確定每個活動的工期,然后用邏輯關(guān)系(結(jié)束-開始、結(jié)束-結(jié)束、開始-開始和開始結(jié)束)按照活動的關(guān)系形成順序的網(wǎng)絡(luò)邏輯圖,從而計算出項目的工期和各個活動的時間特點(早晚時間、時差)等。它是通過確定網(wǎng)絡(luò)圖中的每一條路線的起始時間到結(jié)束時間,從而找出工期長的線路。也是說,整個項目工期的決定是由長的線路來決定的。有一些人認(rèn)為關(guān)鍵路徑包括的都是重要的活動,然而關(guān)鍵路徑關(guān)心的只是項目的時間維,它的名字中包含"關(guān)鍵"并不意味著它包含所有的關(guān)鍵的重要活動。因為對于一個項目而言,在項目中通常有多個任務(wù)同時進(jìn)行,只有項目網(wǎng)絡(luò)中長的或耗時多的活動完成之后,項目才能結(jié)束,這條長的活動路線才叫關(guān)鍵路徑,組成關(guān)鍵路徑的活動才稱為關(guān)鍵活動。
(2)關(guān)鍵路徑?jīng)Q定著項目工期
一般來說,關(guān)鍵路徑上的持續(xù)時間是決定著項目的工期,因為關(guān)鍵路徑上所有活動的持續(xù)時間總和是項目的工期。關(guān)鍵路徑上的任何一個活動都是關(guān)鍵活動,其中任何一個活動的延遲都會導(dǎo)致整個項目完工時間的延遲。關(guān)鍵路徑上的耗時是可以完工的短時間量,若縮短關(guān)鍵路徑的總耗時,則會縮短項目的工期;反之,則會延長整個項目的總工期。但是如果縮短非關(guān)鍵路徑上的各個活動所需要的時間,則不會影響項目的完工時間。
簡單的說,關(guān)鍵路徑上的活動是總時差小的活動,若改變其中某個活動的耗時,則可能使關(guān)鍵路徑發(fā)生變化。所以,關(guān)鍵路徑是相對的,是可以變化的。在采取一定的技術(shù)措施之后,關(guān)鍵路徑有可能變?yōu)榉顷P(guān)鍵路徑,而非關(guān)鍵路徑也有可能變?yōu)殛P(guān)鍵路徑。計算關(guān)鍵路徑可以用正推法計算出每項活動的早開始和早結(jié)束時間,用逆推法計算每項活動的遲開始和遲結(jié)束時間,從而可以確定每一項活動是否具有浮動時間。如果浮動時間不為零,也是說這項工作不是位于關(guān)鍵線路上,它是具有浮動時間的。
綜合來說,關(guān)鍵路徑法的優(yōu)點是能為項目及其主要活動提供了圖形化的顯示,這些量化的信息為識別潛在的項目延遲風(fēng)險提供極其重要的依據(jù)。例如,使用關(guān)鍵路徑分析可使進(jìn)度均衡。因為當(dāng)項目經(jīng)理知道了關(guān)鍵路徑上的一個任務(wù)會落后于預(yù)期進(jìn)度時,他可能會給關(guān)鍵路徑上的其它任務(wù)分配更多資源來彌補時間;或通過跟蹤關(guān)鍵路徑,以判斷是否需要采取積極主動的行動來達(dá)到預(yù)期目標(biāo)。
如何應(yīng)用關(guān)鍵路徑法優(yōu)化時間管理?
關(guān)鍵路徑表示完成項目的短時間。如果關(guān)鍵路徑上的一個或者多個活動比預(yù)期計劃要長,除非采取修正行動否則項目進(jìn)度將會延后。因此,在軟件開發(fā)時間管理中,控制進(jìn)度表的基本思想是在一個龐大的網(wǎng)絡(luò)圖中找出關(guān)鍵路徑,并對各關(guān)鍵活動優(yōu)先安排資源以盡量壓縮需要的時間。而對非關(guān)鍵路徑的各個活動,只要在不影響完工時間的條件下,抽出適當(dāng)?shù)娜肆、物力和財力等資源,用在關(guān)鍵路徑上以達(dá)到縮短工程工期。
(1)關(guān)鍵任務(wù)的定義和時間估算
為了找出項目的關(guān)鍵路徑,必須首先要設(shè)計好網(wǎng)絡(luò)圖。因此,第一步是在開發(fā)范圍內(nèi)用WBS(工作分解結(jié)構(gòu))把所有工作分解成小任務(wù)。這個過程的輸出是任務(wù)清單和里程碑清單,需要注意的是這些清單不僅僅是要列出有哪些任務(wù)和有哪些里程碑,而是任務(wù)還要有含持續(xù)時間或具體的時間工期等信息。因為關(guān)鍵任務(wù)的另一個屬性是時間屬性,這在時間管理中是非常重要的。一般來說,任務(wù)的持續(xù)時間估算是一個復(fù)雜的估算過程,因為有很多因素都會影響到任務(wù)的持續(xù)時間,如工作效率水平,投入的資源數(shù)量等。
(2)評估任務(wù)的優(yōu)先級
根據(jù)優(yōu)先級為每個任務(wù)建立相對重要性是核心的一步。因為在軟件開發(fā)中事情會是非常多,不可能平均分配時間。如果經(jīng)常出現(xiàn)時間被次要工作過度占用,這會是很糟糕的情況。因此,相應(yīng)的根據(jù)緊急程度把任務(wù)涂成綠色、黃色和紅色,意味著不僅可以很容易的區(qū)分項目內(nèi)和項目間的任務(wù)優(yōu)先權(quán),而且也可以很明確的分配時間資源。另外,評估任務(wù)的優(yōu)先級也會把時間管理觀念推廣到團(tuán)隊的各個層次。不但可以確保工作在合適的時間內(nèi)完成,而且還不需要管理層經(jīng)常性的提醒和干預(yù)。所以,明確任務(wù)的優(yōu)先級是影響非常大的一個步驟,因為它能大大改善在多重任務(wù)中時間資源的分配效率。
(3)關(guān)鍵任務(wù)的排序和路徑計算
關(guān)鍵任務(wù)的排序是根據(jù)任務(wù)的前后和依賴關(guān)系形成網(wǎng)絡(luò)圖。簡單地說,是我們要找出耗時多的活動序列組成的路徑。因為找出了關(guān)鍵路徑后,我們可以預(yù)測項目的工時,終確定項目的工期。這里需要提醒的是,只有在考慮到資源平衡和資源日歷后的任務(wù)網(wǎng)絡(luò)圖才會是一個有價值的進(jìn)度表。因此,在存在可預(yù)見風(fēng)險的路徑點上,事前一定要進(jìn)行資源優(yōu)化,以防止項目超期。
(4)監(jiān)督和檢查進(jìn)度表的實施
一般來說,在網(wǎng)絡(luò)圖上計算關(guān)鍵路徑后會形成進(jìn)度表。然后,我們通過監(jiān)督和檢查進(jìn)度表與實際情況的比較,能很方便的使項目時間受控了。例如,通過趕工或快速跟進(jìn)的方式對滯后的進(jìn)度進(jìn)行壓縮,以使進(jìn)度表受控,從而也使到項目時間得到控制。