項目管理作為一門獨(dú)立的學(xué)科,已經(jīng)發(fā)展了很多年,并為實踐提供了豐富的理論依據(jù)。而軟件開發(fā)的項目管理,雖然也屬于傳統(tǒng)項目管理的范疇,但是由于軟件工業(yè)本身的特點(diǎn),很多在傳統(tǒng)項目管理理論中被證明行之有效的理論和方法,拿到軟件開發(fā)的項目實踐中卻常常達(dá)不到預(yù)期的效果。軟件開發(fā)的項目管理與傳統(tǒng)項目管理的這種差異究竟在哪里呢?這個問題已經(jīng)有很多人在研究并成果豐富,一致的結(jié)論性的原因就是:軟件開發(fā)中的項目管理本質(zhì)是人的管理。
人作為項目管理的主要素主導(dǎo)著整個項目的成功和失敗,所以對于軟件項目開發(fā)管理者來說,需要引起足夠重視的一點(diǎn)就是要重視人——在軟件開發(fā)中,這將主導(dǎo)技術(shù)、效率、質(zhì)量。
本文內(nèi)容上沒有闡述敏捷項目管理與普通項目管理的區(qū)別,也沒有完全按照計劃——分工——執(zhí)行三個環(huán)節(jié)來論述,更多的是作者隨想隨寫的一些經(jīng)驗之談。軟件的項目管理也是整個軟件工業(yè)沒有“銀彈”的一個重要方面,很多時候,經(jīng)驗比理論占據(jù)更重要的地位。文中的很多內(nèi)容對于有實際項目管理經(jīng)驗的同行來說,可能能夠產(chǎn)生一些共鳴,如果這樣,本文就起到總結(jié)經(jīng)驗的作用。對于那些尚未有取得這些經(jīng)驗的同行來講,本文中的實際案例和場景可以幫助增進(jìn)這些讀者的感性認(rèn)識。
第2部分 讓人的資源多起來
軟件項目開發(fā)的核心資源就是人,在一定的項目規(guī)模和資本規(guī)模下,人的資源是受限的。項目中考慮人的資源常常以人數(shù)來計,但是實際中我們都清楚,工作量是以任務(wù)來分解和總和的。這就說明人和任務(wù)之間存在一個關(guān)系,這個關(guān)系就是角色。
1.1. 角色(Role)
角色是對工作任務(wù)的職責(zé)抽象,與具體的職位有著區(qū)別。一般情況下,角色和職位是多對一的關(guān)系。敏捷風(fēng)格的項目管理認(rèn)為在產(chǎn)品(軟件)開發(fā)過程中,成員所承擔(dān)的角色雖然有其固定的一面,但是可以賦予它更多變化來改變工作的分配模式。舉例來說,A的職位是項目經(jīng)理,但是同時也是優(yōu)秀的設(shè)計師,那么,可以認(rèn)為A承擔(dān)了項目經(jīng)理和設(shè)計師兩個角色。
在軟件開發(fā)管理中,角色其實非常豐富。常見的角色如:項目經(jīng)理、需求分析師、系統(tǒng)設(shè)計師、開發(fā)工程師、測試工程師。對于大型項目,比如基于J2EE的項目,根據(jù)實際項目中的技能需求,需要各種類似專家的角色,比如人機(jī)界面工程師,部署工程師,配置管理員,DBA等。
敏捷的項目管理中要求角色不是固定的,一人可以擔(dān)任多個角色,這樣才可以充分利用已有的資源。如同電網(wǎng)的電力資源一樣,資源的存在和分布有時是難以改變的,但是其是否充分利用依賴如何調(diào)度。
角色是項目中任務(wù)的具體承擔(dān)對象,從角色角度而不是職位角度考慮資源的分配,有利于合理分工,保持資源的平衡。對于存在多個項目并行工作的情況,這一點(diǎn)非常有意義。我們知道,一個公司的DBA不會太多,多個項目并行工作的時候,可能各個項目都需要DBA的協(xié)助,但是從人員編制上,DBA可能僅隸屬于某個具體的項目組。這個時候如何解決資源的分配呢?同樣,優(yōu)秀的架構(gòu)師對于整個公司來說也會是稀缺資源,我們?nèi)绾巫屵@些稀缺資源發(fā)揮更大的作用呢?當(dāng)然,可以考慮從人力資源編制上解決這個問題,比如成立獨(dú)立于跨項目組的專門的架構(gòu)師組,總體設(shè)計組等。但是,實際情況往往是人力資源制度的改革步伐永遠(yuǎn)會遠(yuǎn)遠(yuǎn)落后于實際需要。況且,從資源模型本身來看,資源本質(zhì)上是與角色捆綁的而不是與職位捆綁的。
從管理的角度,我們希望資源可以最佳利用。繞過人力資源編制,實際上可以采取特殊的運(yùn)作模式來達(dá)到這一目的。方法就是,賦于比職位多得多的角色,讓人具備多個可分配的單位。在這一點(diǎn)可以用CPU的多線程來比喻。
案例:
2001年的時候,公司有Milkyway和Apollo兩個項目在同時運(yùn)行,兩個項目都是電子政務(wù)項目,采用J2EE技術(shù)實現(xiàn)。當(dāng)時公司是首次接手電子政務(wù)項目,對于Web頁面所需要的大量美工雖有考慮,但是最終只招聘到一個合適人選。在Milkyway項目組中,大家都知道開發(fā)人員Alen喜好攝影,其實是一個圖形制作愛好者,Photoshop高手。當(dāng)美工資源已經(jīng)成為事實上的開發(fā)瓶頸時,我給領(lǐng)導(dǎo)提出了一個建議:是否可以讓Alen也充當(dāng)美工角色呢?可以在開發(fā)任務(wù)上為Alen消減一半,讓他有另一半的時間去讓我們的工作產(chǎn)品漂亮起來。后來跟Alen商量讓他兼美工這一角色,他愉快地答應(yīng)了。我想,對于一個圖形制作愛好者來說,還有什么工作比干自己喜歡的事情更愉快呢!
1.2. 虛擬團(tuán)隊(Virtual Team)
虛擬是相對現(xiàn)實而言。虛擬團(tuán)隊一經(jīng)發(fā)明,已經(jīng)在互聯(lián)網(wǎng)上廣泛流傳。所謂虛擬團(tuán)隊,是指沒有實際的組織形態(tài),但是有具體的任務(wù)目標(biāo);團(tuán)隊成員雖然來自各方,但是為著共同的任務(wù)目標(biāo)而進(jìn)行工作。
虛擬團(tuán)隊和實際團(tuán)隊比較,優(yōu)勢在于:組建靈活,反應(yīng)快捷。
實際的團(tuán)隊往往根據(jù)長遠(yuǎn)的任務(wù)目標(biāo)而設(shè)立,一經(jīng)設(shè)立,成員即往往有了固定的身份。比如,項目組往往根據(jù)產(chǎn)品模塊的任務(wù)目標(biāo)而設(shè)立,一般來說在項目的生命周期中會一直存在下去。但是實際的項目工作開展過程中,一方面存在很多跨項目組的工作要做,另一方面存在很多短期的任務(wù)需要調(diào)度資源完成,這個時候固定的團(tuán)隊就難以勝任工作任務(wù)的分配。
虛擬團(tuán)隊本質(zhì)上是根據(jù)任務(wù)對資源的臨時性組建。前面我們已經(jīng)通過角色把資源獨(dú)立化了,現(xiàn)在通過虛擬團(tuán)隊,我們可以把獨(dú)立的資源再通過任務(wù)目標(biāo)而集中起來。
案例:
在上面談到的Milkyway和Apollo兩個項目案例中,當(dāng)Milkyway項目推進(jìn)到開發(fā)完成60%的時候,系統(tǒng)的基礎(chǔ)框架已經(jīng)基本可以在瀏覽器中看到。這個時候,架構(gòu)師發(fā)現(xiàn)系統(tǒng)的響應(yīng)很不理想,這個發(fā)現(xiàn)其實并不出乎意外。盡管公司是首次接手基于Web的項目,根據(jù)多年的經(jīng)驗還是預(yù)測到了可能存在的性能瓶頸。目前的任務(wù)就是需要立即組織部分專家來診斷性能瓶頸的準(zhǔn)確所在,并敦促項目組成員調(diào)整代碼。可是面臨的問題是公司的測試工程師并不熟悉基于Web項目的性能測試,如何尋著額外的資源呢?另外,還有一個問題,性能問題來源于架構(gòu)和代碼,需要對系統(tǒng)結(jié)構(gòu)和代碼最熟悉的系統(tǒng)設(shè)計師和開發(fā)人員參與才行。這個時候Apollo項目正進(jìn)入詳細(xì)編碼開始階段,根據(jù)任務(wù)分配情況,管理層覺得部分設(shè)計師可以抽調(diào)部分時間來參與Milkyway項目的性能優(yōu)化。為此,成立了Milkyway項目性能優(yōu)化虛擬團(tuán)隊。
Milkyway性能優(yōu)化虛擬團(tuán)隊
組成成員:
1.所有Milkyway項目的開發(fā)成員和設(shè)計師
2.Apollo項目組的Wiki和Polo(兩位經(jīng)驗豐富的設(shè)計師)
負(fù)責(zé)人:
Wiki擔(dān)任負(fù)責(zé)人和組織者。
目標(biāo):
全方位優(yōu)化Milkyway的性能,達(dá)到客戶認(rèn)可的各項系統(tǒng)響應(yīng)時間指標(biāo)
任務(wù):
1.一周內(nèi)給出Milkyway項目的性能測試報告和性能優(yōu)化具體指標(biāo)
2.三周內(nèi)給出一期優(yōu)化分析報告
3.持續(xù)跟蹤性能,從第四周起,每兩周給出性能測試報告
執(zhí)行:
1.Milkyway的所有成員需要配合Wiki的組織工作,并接受安排的合理任務(wù)
2.Milkyway項目經(jīng)理Cobo協(xié)助Wiki安排工作
3.測試部經(jīng)理Anny,配合Wiki安排測試設(shè)備和數(shù)據(jù)準(zhǔn)備。