軟件開發(fā)項(xiàng)目從頭到尾都會(huì)是一個(gè)挑戰(zhàn)。在一開始,我們不喜歡花時(shí)間去好好地進(jìn)行計(jì)劃,而且我們假定已經(jīng)了解了客戶的需要,因而匆匆地去制定商業(yè)需求。初我們覺得設(shè)計(jì)工作很有意思,但后來我們發(fā)現(xiàn)技術(shù)環(huán)境比我們想象的要更加復(fù)雜,并因此而感到頭疼。編碼工作之后,我們還要做測(cè)試工作,時(shí)間長了會(huì)變得很無聊。后,我們只想著要做完這個(gè)可恨的項(xiàng)目,但是這里還有一個(gè)任務(wù)—實(shí)現(xiàn)。
實(shí)現(xiàn)經(jīng)常又被稱作部署,對(duì)于這個(gè)專欄來講,兩個(gè)詞匯的意思是一樣的。要實(shí)現(xiàn)一個(gè)應(yīng)用軟件沒有一個(gè)單一的途徑,它取決于你的項(xiàng)目和解決方案的特性。一些實(shí)現(xiàn)工作像在說“我們現(xiàn)在活著”一樣的容易。當(dāng)解決方案是全新的而你正在對(duì)即將成型的生產(chǎn)環(huán)境進(jìn)行開發(fā)和測(cè)試時(shí),這種類型的實(shí)現(xiàn)可以起作用。這種情況下,實(shí)現(xiàn)工作處于這樣的狀態(tài):頭解決方案還處于開發(fā)狀態(tài),而第二天它應(yīng)用于生產(chǎn)。
另一個(gè)極端是項(xiàng)目本身是實(shí)現(xiàn)工作。例如,你也許有一個(gè)應(yīng)用軟件需要在全世界范圍內(nèi)你的分公司中進(jìn)行部署,這會(huì)花上數(shù)月的時(shí)間來完成并要求包括有計(jì)劃,分析,設(shè)計(jì)等的一個(gè)完整的生存周期。
當(dāng)你考慮到要進(jìn)行實(shí)現(xiàn)時(shí),你總是應(yīng)該首先了解其中所涉及的復(fù)雜性。如果實(shí)現(xiàn)工作相對(duì)的簡(jiǎn)單,那沒有必要制定詳細(xì)的實(shí)現(xiàn)過程。因此在這個(gè)專欄中,我將關(guān)注于當(dāng)你面對(duì)復(fù)雜的實(shí)現(xiàn)要求時(shí)要考慮的策略。
早作計(jì)劃
項(xiàng)目管理之中的很多的例子都與早期計(jì)劃有關(guān)系。事實(shí)上,如果你的開發(fā)人員對(duì)花上這么多時(shí)間進(jìn)行計(jì)劃的需要提出疑問,你可以指出計(jì)劃的目的之一是確定實(shí)現(xiàn)工作的復(fù)雜性。如果實(shí)現(xiàn)工作非常龐大,你在開始要在分析階段中創(chuàng)建一個(gè)實(shí)現(xiàn)策略。這個(gè)文件將描述實(shí)現(xiàn)工作的整體方法途徑,范圍,假定和風(fēng)險(xiǎn)等等。你可以在這里做出一些關(guān)于實(shí)現(xiàn)工作如何進(jìn)行的基本決策。例如,你可以決定在實(shí)現(xiàn)過程中是否要進(jìn)行平行測(cè)試,或是在一個(gè)特定的階段中系統(tǒng)是否要關(guān)閉。
下一次你要考慮到實(shí)現(xiàn)工作是在設(shè)計(jì)階段。這里你將創(chuàng)建一個(gè)較低級(jí)別的實(shí)現(xiàn)計(jì)劃。如果你創(chuàng)建一個(gè)初始策略文件,實(shí)現(xiàn)計(jì)劃將會(huì)加入很多詳細(xì)內(nèi)容。如果你沒有創(chuàng)建策略文件,你需要從更高的層次上理解你想要完成什么,但然后你很快地跳入了計(jì)劃細(xì)節(jié)之中了。實(shí)現(xiàn)計(jì)劃用來設(shè)置實(shí)現(xiàn)工作的整體時(shí)間進(jìn)度,確定誰將進(jìn)行這方面的工作,列出所涉及的公司組織,估計(jì)工作量和持續(xù)時(shí)間等的參數(shù)。如果實(shí)現(xiàn)工作涉及到新的處理過程,你需要解決如何對(duì)用戶進(jìn)行培訓(xùn)和誰來進(jìn)行培訓(xùn)的問題。如果實(shí)現(xiàn)工作需要發(fā)生在多個(gè)位置之上,你需要對(duì)整體的順序給出描述。要注意實(shí)現(xiàn)計(jì)劃提供了可以與你的出資人和項(xiàng)目團(tuán)隊(duì)共享的詳細(xì)信息,這一點(diǎn)是很重要的。然而,它還沒有到達(dá)實(shí)際工作計(jì)劃的級(jí)別。
建構(gòu)實(shí)現(xiàn)工作計(jì)劃
到目前為止,我們已經(jīng)完成了實(shí)現(xiàn)策略(在分析階段)和實(shí)現(xiàn)計(jì)劃(在設(shè)計(jì)階段)。然而,我們?nèi)砸獮椴渴鸸ぷ鲗?shí)際地去建構(gòu)工作計(jì)劃行動(dòng)。這應(yīng)當(dāng)在建構(gòu)階段完成。在這一點(diǎn)上,你已經(jīng)經(jīng)歷了從高到底的級(jí)別,因此你剩下的工作是去實(shí)際地定義行動(dòng),從屬,時(shí)間和負(fù)責(zé)人員等等。
當(dāng)你確實(shí)到達(dá)了實(shí)現(xiàn)階段的時(shí)候,你已經(jīng)準(zhǔn)備好了一個(gè)工作計(jì)劃,而且你能夠確信它可以完成你的需要,因?yàn)槟阋呀?jīng)有了從高到底的計(jì)劃。
溝通永遠(yuǎn)是關(guān)鍵
在進(jìn)行計(jì)劃之外,實(shí)現(xiàn)工作的另一個(gè)關(guān)鍵元素是溝通(這里,我們談到的還是一個(gè)復(fù)雜的實(shí)現(xiàn)工作,如果不是這樣,你也許只需將解決方案投入生產(chǎn)過程之中并對(duì)你的所做給出解釋可以解決問題和客戶的抱怨)。如果你采取一個(gè)與前面所描述的類似的方法,那么你一直都在進(jìn)行溝通。實(shí)現(xiàn)策略意在從一個(gè)客戶的觀點(diǎn)關(guān)注于處理過程,而且在進(jìn)行之前應(yīng)該得到他們的許可。實(shí)現(xiàn)計(jì)劃應(yīng)該貫徹給所涉及的所有人,你只需要不斷地進(jìn)行信息的溝通并確保每個(gè)人對(duì)實(shí)現(xiàn)工作做好準(zhǔn)備。
如果你沒有準(zhǔn)備實(shí)現(xiàn)策略和計(jì)劃,你仍然需要盡可能早地與人進(jìn)行溝通。舉個(gè)例子,我的經(jīng)驗(yàn)顯示,在開發(fā)人員和基礎(chǔ)架構(gòu)人員之間有著一種天生的摩擦點(diǎn),這是因?yàn)閷?shí)現(xiàn)工作的具體細(xì)節(jié)沒有得到溝通,或是進(jìn)行溝通的時(shí)候已經(jīng)太遲了。有多少次你看到一個(gè)團(tuán)隊(duì)準(zhǔn)備好要實(shí)現(xiàn)一個(gè)客戶機(jī)—服務(wù)器應(yīng)用軟件,但是發(fā)現(xiàn)他們需要讓工作站支持團(tuán)隊(duì)在桌面上安裝這個(gè)應(yīng)用軟件?當(dāng)然,如果由于缺乏溝通導(dǎo)致支持團(tuán)隊(duì)沒有做好準(zhǔn)備,他們是不會(huì)高興的。其它的摩擦點(diǎn)包括當(dāng)部署應(yīng)用軟件或是出現(xiàn)重大改變時(shí)沒有能夠給出事先的警告,因?yàn)樗麄兛赡芤勇牶芏鄟碜杂脩舻碾娫。第三點(diǎn)是開發(fā)團(tuán)隊(duì)在發(fā)現(xiàn)服務(wù)器環(huán)境需要變動(dòng)時(shí)為時(shí)已晚。再一次,如果這個(gè)需要在實(shí)現(xiàn)工作開始之前得到溝通,通常不會(huì)造成麻煩。
計(jì)劃和溝通帶動(dòng)成功的實(shí)現(xiàn)工作
在這個(gè)專欄中,我們從一個(gè)方法論的角度上來看待實(shí)現(xiàn)工作。關(guān)鍵點(diǎn)在于早期計(jì)劃并經(jīng)常溝通,以防意外發(fā)生。即使是復(fù)雜的實(shí)現(xiàn)工作也可以通過從頭到腳的計(jì)劃和良好的溝通得以成功地管理。另一方面,即使是簡(jiǎn)單的實(shí)現(xiàn)工作也可能被糟糕的計(jì)劃和溝通所破壞。在這個(gè)系列的下一篇文章之中,我們將看一看實(shí)現(xiàn)工作的詳細(xì)內(nèi)容和需要考慮并注意的地方。