本文介紹了管理一個(gè)軟件產(chǎn)品與管理一部電影作品的若干對(duì)比,然后討論了從成功項(xiàng)目中獲得的四種軟件管理方法。
使用傳統(tǒng)的工程管理原則管理軟件項(xiàng)目是很難取得成功的。把軟件管理的挑戰(zhàn)與制作一部動(dòng)作大片進(jìn)行比較,我們會(huì)發(fā)現(xiàn)很多有趣的觀點(diǎn)。兩者的管理問題都集中在在受經(jīng)濟(jì)因素制約的環(huán)境下進(jìn)行復(fù)雜的集成知識(shí)產(chǎn)權(quán)的開發(fā)。本文介紹了管理一個(gè)軟件產(chǎn)品與管理一部電影作品的一些對(duì)比,然后詳細(xì)介紹了從成功項(xiàng)目中獲得的軟件管理的四種方法。主要的推薦做法是使用指導(dǎo)性的領(lǐng)導(dǎo)方式,而不是傳統(tǒng)理念上的事無巨細(xì)的計(jì)劃-軌跡領(lǐng)導(dǎo)方式。
在我的職業(yè)生涯中,我有機(jī)會(huì)觀察并評(píng)估了上百個(gè)軟件項(xiàng)目,它們廣泛覆蓋了各種工業(yè)和應(yīng)用。一個(gè)顯著的成敗決定因素是在項(xiàng)目從初始到被用戶接受的過程中所采用的項(xiàng)目管理方式。
根據(jù)我的經(jīng)驗(yàn),如果軟件項(xiàng)目管理者使用更像是管理一部電影作品的方式,而不是管理一個(gè)工程產(chǎn)品的方式,那么他們似乎更容易成功。“胡說!”有人可能反對(duì)。“軟件項(xiàng)目需要更多嚴(yán)格的工程管理,而不是更少!”在你發(fā)表你的言論,向權(quán)威發(fā)出挑戰(zhàn)以前,請(qǐng)考慮以下觀察資料:
大多數(shù)軟件權(quán)威不需要物理定律或者物質(zhì)屬性來制約他們的問題及其解決方案。他們只是受到人類想象力、經(jīng)濟(jì)因素的制約,以及當(dāng)他們獲得一些可執(zhí)行程序時(shí),他們受到運(yùn)行平臺(tái)性能的制約。一些嵌入式軟件的開發(fā)者顯然是例外者。
在一個(gè)軟件項(xiàng)目中,你幾乎可以在任何時(shí)間改變?nèi)魏螙|西:計(jì)劃、人、預(yù)算里程碑、需求、設(shè)計(jì)、測(cè)試等等。需求——可能是我們的工業(yè)中被嚴(yán)重誤用的詞——很少能描述出真正需要的任何事情。一切幾乎都是可以協(xié)商的。
軟件產(chǎn)品的評(píng)估和衡量沒有原子單元。經(jīng)濟(jì)性能(在服務(wù)行業(yè)中更為典型,評(píng)價(jià)為性價(jià)比)被證明是好的成功的度量手段。質(zhì)量的大多數(shù)方面都是很主觀的,比如可維護(hù)性、可靠性以及可用性。
這些觀察結(jié)果對(duì)電影制片人同樣適用,他們是有規(guī)律地創(chuàng)作獨(dú)特的、復(fù)雜的、只受視角和人類創(chuàng)造性制約的知識(shí)產(chǎn)權(quán)作品。我假設(shè)電影作品的經(jīng)濟(jì)性能與軟件項(xiàng)目的經(jīng)濟(jì)性能是相似的:從2000年起,只有三分之一作品的發(fā)行帶有時(shí)間或經(jīng)濟(jì)上的可預(yù)言性。1我知道這些觀察在使用工程理念來制造飛機(jī)、橋梁、心臟移植管、核反應(yīng)堆、摩天大樓以及衛(wèi)星的項(xiàng)目管理者看來是不入流的(除非這些工程項(xiàng)目包括重要的軟件內(nèi)容或是空前的,的系統(tǒng))。
好的,有人可能會(huì)說,軟件只是一個(gè)未成熟的工程分支,在我的職業(yè)生涯中,大約每五年軟件項(xiàng)目的底層技術(shù)要翻新一次。這些翻新包括語言、結(jié)構(gòu)模式、應(yīng)用、用戶界面、計(jì)算平臺(tái)、網(wǎng)絡(luò)、環(huán)境、過程以及工具。這種快速持續(xù)的進(jìn)化將要放慢了嗎?目前還看不出這種跡象。人類想象力和市場(chǎng)作用仍是非常強(qiáng)大的。
像電影工業(yè),我們需要有資格的建筑師(導(dǎo)演)、分析家(編劇、設(shè)計(jì)師)、軟件工程師(產(chǎn)品工作人員、編輯、特技制造者、演員替身)以及項(xiàng)目管理者(制片人)。還是和電影工業(yè)一樣,我們必須使軟件成為可執(zhí)行形式(弄到膠片上)來切實(shí)進(jìn)行進(jìn)度和質(zhì)量的評(píng)估。在我們發(fā)現(xiàn)什么可用什么不可用的過程中會(huì)產(chǎn)生大量的碎片和重復(fù)工作,然后我們把很多人的貢獻(xiàn)集成為一個(gè)緊密集成的知識(shí)產(chǎn)權(quán)作品。
我所認(rèn)識(shí)到的是,軟件管理應(yīng)被更精確地描述為軟件經(jīng)濟(jì)的一個(gè)分支,而不是軟件工程。軟件管理者每天的決定(正如電影制作人每天的決定),主要是由價(jià)值判斷、成本權(quán)衡、人為因素、宏觀經(jīng)濟(jì)趨勢(shì)、技術(shù)趨勢(shì)、市場(chǎng)強(qiáng)度以及時(shí)機(jī)控制的。軟件項(xiàng)目很少注重于精確的數(shù)學(xué)、物質(zhì)屬性、物理定律或是其他已經(jīng)建立的成熟的工程原則。
我希望這一對(duì)軟件-電影的對(duì)比刺激了你的神經(jīng),使你想繼續(xù)讀下去。如果想了解更詳細(xì)的對(duì)比請(qǐng)參考 Paul Graham 的論文。2下文著重介紹的是一些從軟件項(xiàng)目中獲得的斷言,這些項(xiàng)目包括了我在25年多的時(shí)間里在軟件項(xiàng)目管理領(lǐng)域跟從、領(lǐng)導(dǎo)、實(shí)踐、指導(dǎo)的少數(shù)成功軟件項(xiàng)目和大量不成功軟件項(xiàng)目。
迭代的方法
造成軟件集中型項(xiàng)目的低成功率的原因之一是傳統(tǒng)的項(xiàng)目管理方法不鼓勵(lì)進(jìn)行指導(dǎo)和調(diào)整以緩解以下問題的不確定性:
問題域(用戶究竟想要或者需要什么)
解決域(何種結(jié)構(gòu)和技術(shù)的組合是適用的)
計(jì)劃域(成本和時(shí)間制約、團(tuán)隊(duì)組成和生產(chǎn)力、涉眾交流、遞增結(jié)果序列等等)
我們需要一種更為動(dòng)態(tài)和具有適應(yīng)性的方法來思考軟件進(jìn)程和質(zhì)量管理的問題,這種方法應(yīng)當(dāng)適應(yīng)成功項(xiàng)目的模式。當(dāng)今的現(xiàn)代軟件管理方法3-5 通常被稱為迭代 開發(fā)方法。在現(xiàn)今充滿不確定性的軟件應(yīng)用程序、產(chǎn)品和服務(wù)開發(fā)的雷區(qū)中,迭代方法指導(dǎo)了軟件項(xiàng)目,而不是遵循一個(gè)精確的、長(zhǎng)期的計(jì)劃。按時(shí)間和預(yù)算計(jì)劃成功發(fā)布軟件產(chǎn)品需要一種發(fā)現(xiàn)、生產(chǎn)、評(píng)估和指導(dǎo)性領(lǐng)導(dǎo)方式的進(jìn)步的混合。“指導(dǎo)”一詞意味著積極的管理參與,經(jīng)常的過程矯正以產(chǎn)生更好的結(jié)果。所有涉眾應(yīng)該通力合作,集中實(shí)現(xiàn)不斷前進(jìn)的目標(biāo)。
作為一個(gè)被廣泛接受的現(xiàn)代迭代開發(fā)過程,IBM Rational Unified Process,6 為一個(gè)更為平衡的發(fā)展提供了一個(gè)框架,這一發(fā)展是鼓勵(lì)對(duì)不確定性和風(fēng)險(xiǎn)進(jìn)行管理的。它的生命周期包括四個(gè)階段,每個(gè)階段都有可演示的結(jié)果:
1.起始:遠(yuǎn)景和商業(yè)案例的定義和原型設(shè)計(jì)
2.細(xì)化:對(duì)架構(gòu)基線進(jìn)行集成、論證和評(píng)估
3.構(gòu)建:對(duì)有用的增量進(jìn)行開發(fā)、論證和評(píng)估
4.產(chǎn)品化:可用性評(píng)估、終產(chǎn)品以及發(fā)行
階段的名稱表現(xiàn)了項(xiàng)目的狀態(tài),而不是從需求到設(shè)計(jì)到編碼到測(cè)試到發(fā)行的基于順序性活動(dòng)的項(xiàng)目進(jìn)展。
我們把這一迭代管理方式稱為基于結(jié)果的,而不是基于活動(dòng)的。在軟件世界中,真正的結(jié)果是可執(zhí)行程序。其他的任何東西(需求文檔、用例模型、設(shè)計(jì)模型、測(cè)試用例、計(jì)劃、過程、文檔、檢查)都是次要的,而且只是實(shí)現(xiàn)目標(biāo)——一個(gè)可執(zhí)行的軟件程序——的手段的一部分;叵肽阕龀绦騿T的日子:當(dāng)你在建立一個(gè)模型、畫流程圖草圖、推理一個(gè)狀態(tài)機(jī)的邏輯或是寫源代碼的時(shí)候,你知道你只是在思考和集成一個(gè)抽象方案。只有當(dāng)你編譯、鏈接和執(zhí)行時(shí)方案才變得切實(shí)可行。項(xiàng)目管理者應(yīng)該有同樣的感覺。當(dāng)你評(píng)估一個(gè)計(jì)劃、模型、文檔或一些其他不可執(zhí)行的表現(xiàn)物的美好和出色之處時(shí),你只是在推測(cè)項(xiàng)目質(zhì)量和進(jìn)度。電影制作人對(duì)劇本、情節(jié)串連板、背景設(shè)置以及服裝設(shè)計(jì)的感覺也是如此。他們著力于影片的每一個(gè)鏡頭,使得電影成為可以判斷總體集成效果的實(shí)體。
精確度與準(zhǔn)確度
在一個(gè)成功的軟件項(xiàng)目中,每一個(gè)開發(fā)階段都加深了對(duì)發(fā)展計(jì)劃、規(guī)格說明和完整解決方案的理解,因?yàn)槊恳粋(gè)階段都延伸了可執(zhí)行序列和團(tuán)隊(duì)對(duì)競(jìng)爭(zhēng)目標(biāo)的認(rèn)識(shí)。在生命周期中的任意一點(diǎn),次要工件的精確性應(yīng)與這種理解相平衡,在詳細(xì)程度上保持一致,相互之間保持一定程度的可追蹤性。
精確度與準(zhǔn)確度之間的區(qū)別(在軟件管理的上下文中)并不是它們看起來那樣小。軟件管理充滿灰色的區(qū)域、情景依賴性以及不明確的折衷。對(duì)的軟件管理者來說,理解精確性與準(zhǔn)確性之間的區(qū)別是一種基本技能,因?yàn)樗麄儽仨殰?zhǔn)確地對(duì)投資、風(fēng)險(xiǎn)以及變化帶來的影響進(jìn)行預(yù)測(cè)。未被證實(shí)的精確度——在需求或是計(jì)劃內(nèi)的——實(shí)際上是造成阻礙成功的潛在而微妙的因素。大多數(shù)時(shí)候,早期的精確性是不誠實(shí)的,造成了有比實(shí)際上更多的進(jìn)展和更高的質(zhì)量的假象。不幸的是,很多項(xiàng)目發(fā)起者和涉眾要求這種早期精確性和詳細(xì)性,因?yàn)檫@給了他們對(duì)已經(jīng)取得的進(jìn)展的(虛假的)安慰。
我在軟件工業(yè)中所見的常見的失敗模式之一是開發(fā)有五位數(shù)精度的規(guī)格說明,而涉眾其實(shí)對(duì)問題、方案或者計(jì)劃只有一位數(shù)精度的理解。延長(zhǎng)建立一個(gè)精確的需求理解或詳細(xì)的計(jì)劃的時(shí)間實(shí)際上耽誤了對(duì)架構(gòu)上更重要的問題的理解。你曾經(jīng)做過、修改過、痛苦地回顧過多少厚度嚇人的需求文檔或是詳細(xì)的管理計(jì)劃呢?而幾個(gè)月后當(dāng)項(xiàng)目取得了有實(shí)際意義的可演示的進(jìn)展,加快了涉眾對(duì)實(shí)際的權(quán)衡的理解時(shí),你又要全部重新檢查這些文檔和計(jì)劃了。這種普遍現(xiàn)象在我們的行業(yè)里被稱為刨光廢物。