《孫子兵法》在敏捷項(xiàng)目管理中的應(yīng)用
簡(jiǎn)介: 《孫子兵法》中的論述雖然是關(guān)于戰(zhàn)爭(zhēng)的,但是其思想在項(xiàng)目管理領(lǐng)域?qū)ξ覀円彩怯薪梃b意義的。本文以筆者的實(shí)際項(xiàng)目管理經(jīng)驗(yàn)為基礎(chǔ),分享了《孫子兵法》在敏捷項(xiàng)目管理中的應(yīng)用。希望能夠?qū)ψx者的實(shí)際項(xiàng)目管理工作有所啟發(fā)。
成為“敏捷”,而不是做“敏捷”
談到“敏捷”首先容易讓人想到的是各種優(yōu)秀實(shí)踐。這些優(yōu)秀實(shí)踐固然有可以借鑒的地方。但是在具體實(shí)施的時(shí)候往往要根據(jù)項(xiàng)目的實(shí)際情況進(jìn)行調(diào)整,而不是生搬硬套。
故兵無(wú)常勢(shì),水無(wú)常形。能因敵變化而取勝者,謂之神。
——《孫子兵法•虛實(shí)》
作戰(zhàn)沒(méi)有固定的方式方法,就像水流沒(méi)有固定的形狀一樣。能夠根據(jù)敵情的發(fā)展變化而采取靈活措施取勝的人,才可以稱得上是用兵如神。
敏捷開(kāi)發(fā)中的各種優(yōu)秀實(shí)踐在具體實(shí)施時(shí)也同樣要根據(jù)項(xiàng)目的實(shí)際情況作適當(dāng)?shù)恼{(diào)整和變通。比如,敏捷開(kāi)發(fā)中優(yōu)秀實(shí)踐“客戶參與”(Customer Involvement)特別強(qiáng)調(diào)了現(xiàn)場(chǎng)客戶(On-site customer)對(duì)于開(kāi)發(fā)團(tuán)隊(duì)的重要性。而筆者所帶的項(xiàng)目組在無(wú)法爭(zhēng)取到這樣的資源的情況下采取了一種變通方式來(lái)實(shí)現(xiàn)“客戶參與”。我們把需求評(píng)審、分析過(guò)程中遇到的疑問(wèn)與問(wèn)題登記到“需求問(wèn)題確認(rèn)列表”。項(xiàng)目組中的每個(gè)人都可以自行往這個(gè)列表中登記問(wèn)題。“需求問(wèn)題確認(rèn)列表”中的疑問(wèn)、問(wèn)題由專人或者問(wèn)題登記人自己通過(guò)電話、電子郵件、即時(shí)通訊工具等方式與客戶方的需求負(fù)責(zé)人進(jìn)行確認(rèn)。確認(rèn)的結(jié)果以及確認(rèn)的原始記錄(如電子郵件內(nèi)容)都會(huì)記錄到“需求問(wèn)題確認(rèn)列表”的“確認(rèn)結(jié)果”一欄中,并由問(wèn)題確認(rèn)人對(duì)確認(rèn)結(jié)果進(jìn)行知會(huì)全組人員。如果有必要的話,項(xiàng)目組的任何一個(gè)人都可以組織全體人員對(duì)問(wèn)題及其確認(rèn)結(jié)果進(jìn)行討論。而“需求問(wèn)題確認(rèn)列表”我們也會(huì)定期發(fā)給客戶方以便再確認(rèn)和備忘之用。這樣一個(gè)過(guò)程,雖然沒(méi)有客戶與開(kāi)發(fā)團(tuán)隊(duì)在一起辦公,但是一定程度上規(guī)避了開(kāi)發(fā)團(tuán)隊(duì)對(duì)需求的理解的偏差問(wèn)題。從而實(shí)現(xiàn)了與“客戶參與”同樣的效果。
因此,實(shí)施敏捷開(kāi)發(fā)的關(guān)鍵是使我們的團(tuán)隊(duì)成為“敏捷”—— 理解并實(shí)現(xiàn)敏捷各個(gè)優(yōu)秀實(shí)踐所要達(dá)到的效果,而不是做“敏捷”—— 對(duì)敏捷開(kāi)發(fā)的優(yōu)秀實(shí)踐全盤照搬,為了“敏捷”而“敏捷”。
迭代開(kāi)發(fā)的精髓 —— 順應(yīng)自然規(guī)律和反饋
夫兵形象水,水之行避高而趨下,兵之形避實(shí)而擊虛。
——《孫子兵法•虛實(shí)》
用兵打仗的規(guī)律就像水,水流動(dòng)的規(guī)律是避開(kāi)高處而往低處流。用兵的規(guī)律則是避開(kāi)敵人的鋒芒而攻擊其薄弱的地方。這是自然界規(guī)律給《孫子兵法》的啟示。同時(shí),也給了我們?cè)谲浖_(kāi)發(fā)方面的啟示 —— 發(fā)現(xiàn)自然規(guī)律并順應(yīng)它。
敏捷開(kāi)發(fā)中往往存在這樣一個(gè)現(xiàn)象:某個(gè)迭代中提出的需求,過(guò)了幾個(gè)迭代甚至于下一個(gè)迭代就被推翻了。這種現(xiàn)象很大程度上是因?yàn)榭蛻糇约阂膊磺宄枨笫鞘裁椿蛘哒f(shuō)他們的業(yè)務(wù)需要(need)是什么。而迭代開(kāi)發(fā)的精髓就在于它考慮到這種現(xiàn)象及其產(chǎn)生的原因,因而采取小批量、頻繁交付的開(kāi)發(fā)模式。這使得我們可以根據(jù)上一個(gè)迭代(或者之前所有的迭代)中獲取的經(jīng)驗(yàn)(包括什么樣的需求才是符合客戶的業(yè)務(wù)需要)對(duì)當(dāng)前迭代的目標(biāo)和活動(dòng)作出調(diào)整。可見(jiàn),迭代開(kāi)發(fā)的精髓在于順應(yīng)自然規(guī)律 —— 人們認(rèn)識(shí)事物需要經(jīng)歷一個(gè)由淺入深、由錯(cuò)到對(duì)的過(guò)程。同時(shí),也在于它利用了反饋的功效 —— 當(dāng)期迭代所掌握的知識(shí)和經(jīng)驗(yàn)會(huì)反饋到下一個(gè)迭代,從而影響其目標(biāo)和活動(dòng)。
同樣,迭代開(kāi)發(fā)過(guò)程中團(tuán)隊(duì)成員對(duì)需求的理解也往往一開(kāi)始不是那么清晰。隨著具體開(kāi)發(fā)、測(cè)試工作的進(jìn)展其對(duì)需求的理解才漸漸明朗。
正如《太公陰符》所說(shuō)“圣人知自然之道不可違,因而制之”。規(guī)律是不可抗拒的,順應(yīng)規(guī)律可以幫助我們?nèi)佟H祟悓?duì)事物的認(rèn)識(shí),往往不可能一下子就洞若觀火,而是要經(jīng)歷一個(gè)逐漸深入的過(guò)程。開(kāi)發(fā)人員也好、測(cè)試人員也好,其對(duì)需求的理解就是一個(gè)例子。不管我們?nèi)绾闻Φ厝ダ斫狻⒎治鲂枨螅浣Y(jié)果往往還是一開(kāi)始理解得不夠全面、透徹,待到具體寫代碼、寫測(cè)試用例的過(guò)程中,思路才慢慢清晰起來(lái),腦子中的疑問(wèn)也越來(lái)越多。隨著這些疑問(wèn)的解決,對(duì)需求的理解也慢慢變得清晰、全面、透徹了。所以知道了這個(gè)規(guī)律,我們就要“因而制之”了 —— 迭代開(kāi)發(fā)過(guò)程中不要只知道往前走,適當(dāng)?shù)臅r(shí)候停下來(lái),甚至往回走,重新去審視下需求,往往會(huì)有新的發(fā)現(xiàn)。此時(shí)再根據(jù)對(duì)需求的新的理解去重新審視代碼和測(cè)試用例,這樣就能發(fā)現(xiàn)迭代初期時(shí)所發(fā)現(xiàn)不了的問(wèn)題,最終使得交付的軟件中隱藏的缺陷數(shù)降低。
#p#
團(tuán)隊(duì)規(guī)模和管理模式
對(duì)于敏捷開(kāi)發(fā)常見(jiàn)的一個(gè)誤解是“敏捷開(kāi)發(fā)只適用于小規(guī)模的團(tuán)隊(duì)”。團(tuán)隊(duì)規(guī)模小的確可以減少溝通的復(fù)雜性、也某種程度上減少管理的成本。然而大型團(tuán)隊(duì)中也有使用敏捷開(kāi)發(fā)的。敏捷開(kāi)發(fā)是否可以用于管理大型團(tuán)隊(duì),問(wèn)題在于我們?nèi)绾螌?shí)施。
凡治眾如治寡,分?jǐn)?shù)是也;斗眾如斗寡,形名是也。
——《孫子兵法•兵勢(shì)》
要治理好人數(shù)多的軍隊(duì)如同治理好人數(shù)少的軍隊(duì)一樣,關(guān)鍵在于組織編制好。
類似的,大型團(tuán)隊(duì)中使用敏捷開(kāi)發(fā),往往可以采用組織多個(gè)相對(duì)小型的敏捷團(tuán)隊(duì),實(shí)行分而治之。
不要忘記項(xiàng)目經(jīng)理的職責(zé)
有些項(xiàng)目經(jīng)理對(duì)團(tuán)隊(duì)成員很友善、也很照顧,而項(xiàng)目的質(zhì)量為何還是那么低下呢?
視卒如愛(ài)子,故可與之俱死。厚而不能使,
愛(ài)而不能令,亂而不能治,譬若驕子,不可用也!
——《孫子兵法•地形》
看待士兵如同看待自己的親生兒子,就可以和他們生死與共。如果這樣也不能夠調(diào)動(dòng)他們、違法亂紀(jì)而不能懲治,士兵就像嬌慣的兒子,是不可以用來(lái)打仗的。
作為項(xiàng)目經(jīng)理,能夠真心實(shí)意地關(guān)心和愛(ài)護(hù)團(tuán)隊(duì)成員是好事,但是不要忘了作為項(xiàng)目經(jīng)理的職責(zé): 保證項(xiàng)目的成功交付才是最重要的。團(tuán)隊(duì)成員要是不能履行自己的責(zé)任,服從主管的安排,具體落實(shí)工作,對(duì)其再如何關(guān)心也是無(wú)益的!
一個(gè)真正和諧的團(tuán)隊(duì)不是大家在一起都是一團(tuán)和氣、沒(méi)有沖突,而是大家都能朝團(tuán)隊(duì)的共同目標(biāo) —— 項(xiàng)目的成功交付去努力,大家各盡其職。因此,對(duì)于阻礙這個(gè)共同目標(biāo)的人和事,項(xiàng)目經(jīng)理要把握不要忘記自己的職責(zé)的原則,該嚴(yán)則嚴(yán),對(duì)于給過(guò)機(jī)會(huì)而仍然不思改正的人該處理就處理。
管理措施的制定要考慮其實(shí)施的前提條件和弊端
任何的管理思想和理論到最后都要體現(xiàn)為具體的管理措施。而管理措施的制定則要考慮其實(shí)施的前提條件及其弊端。
發(fā)火有時(shí),起火有日。時(shí)者,天之燥也。日者,月在箕、壁、翼、軫也。凡此四宿者,風(fēng)起之日也。凡火攻,必因五火之變而應(yīng)之:火發(fā)于內(nèi),則早應(yīng)之于外;火發(fā)而其兵靜者,待而勿攻,極其火力,可從而從之,不可從則上。
——《孫子兵法•火攻》
火攻的優(yōu)勢(shì)在于借助自然界的力量造成強(qiáng)大的打擊力。但是,真正要發(fā)揮火的威力,則要看實(shí)施火攻時(shí)的天氣條件以及火燃燒時(shí)敵人的反應(yīng)情況 —— 一定要借助天氣干燥、風(fēng)力風(fēng)向、敵方混亂這些外部條件,才能夠“趁火打劫”。可見(jiàn),火攻所可能產(chǎn)生的強(qiáng)大殺傷力是措施制定者所期望的收益,而火攻實(shí)施時(shí)的天氣情況、敵人反應(yīng)情況則是其實(shí)施的必備前提條件。
相反,管理措施的期望收益自然容易想到的,但是容易忽略的是實(shí)施這些措施的前提條件。比如,“重構(gòu)”(Refactoring)的目的固然是使代碼的質(zhì)量日趨提高,但是容易忽略的是它的實(shí)施前提:“重構(gòu)”要有自動(dòng)化測(cè)試工具支持。否則,“重構(gòu)”代碼所可能帶來(lái)的對(duì)現(xiàn)有功能的破壞會(huì)使其無(wú)異于自殺。
軟件測(cè)試過(guò)程中,為了避免同一個(gè)測(cè)試人員多次測(cè)試同一個(gè) Story 容易造成思維定勢(shì)而導(dǎo)致漏測(cè),很多項(xiàng)目組采用交叉測(cè)試來(lái)規(guī)避這個(gè)問(wèn)題。但是,交叉測(cè)試能夠達(dá)到預(yù)期收益的一個(gè)重要前提是參與交叉測(cè)試的測(cè)試人員對(duì)當(dāng)前迭代中所有的 Story 及測(cè)試用例都要有所熟悉。這樣才能使一個(gè)測(cè)試人員接手另一個(gè)測(cè)試人員之前測(cè)試過(guò)的 Story 時(shí)能夠?qū)υ?Story 的測(cè)試用例進(jìn)行重新審視,從而發(fā)現(xiàn)被遺漏的、甚至是錯(cuò)誤的測(cè)試用例,而不是僅僅拿一個(gè)新的 Build 在現(xiàn)有的測(cè)試用例下再測(cè)試一遍。基于交叉測(cè)試實(shí)施的這個(gè)前提條件的考慮,筆者要求在迭代開(kāi)發(fā)過(guò)程中每個(gè)測(cè)試人員都能夠講解自己對(duì)任意一個(gè) Story 的理解。
其用戰(zhàn)也,勝久則鈍兵挫銳,攻城則力屈,久暴師則國(guó)用不足。夫鈍兵挫銳,屈力殫貨,則諸侯乘其弊而起,雖有智者不能善其后矣。故兵聞拙速,未睹巧之久也。夫兵久而國(guó)利者,未之有也。故不盡知用兵之害者,則不能盡知用兵之利也。
——《孫子兵法•作戰(zhàn)》
作戰(zhàn)持續(xù)時(shí)間長(zhǎng)了,容易使國(guó)力受損,而敵國(guó)則容易趁虛而入。所以孫子兵法說(shuō)不知道用兵的害處,則不能真正知道用兵的好處。
同樣,很多管理措施都是有其利與弊的一端,不知其弊端,則很難發(fā)揮其利的一端。比如,為了控制缺陷的數(shù)量,在每個(gè) Story 被測(cè)試出一定數(shù)量或者嚴(yán)重程度的 Bug 后,有的項(xiàng)目組會(huì)規(guī)定此時(shí)對(duì)應(yīng)的開(kāi)發(fā)人員要給全組人員買零食或者請(qǐng)吃飯之類懲罰性措施。但是,這樣的措施會(huì)不會(huì)導(dǎo)致開(kāi)發(fā)人員在缺陷被發(fā)現(xiàn)時(shí)出現(xiàn)推諉的現(xiàn)象,試圖不承認(rèn)其是缺陷或是由其引入的呢?這是措施落實(shí)前所要考慮的措施可能存在的弊端。
#p#
項(xiàng)目經(jīng)理的思想境界
是故百戰(zhàn)百勝,非善之善也;不戰(zhàn)而屈人之兵,善之善者也。
——《孫子兵法•謀攻》
每次打仗都取勝不是戰(zhàn)爭(zhēng)的最高境界,戰(zhàn)爭(zhēng)的最高境界是不費(fèi)兵卒而取得勝利。《孫子兵法》的這個(gè)論斷,給了筆者很大的啟發(fā):項(xiàng)目經(jīng)理在解決項(xiàng)目管理過(guò)程中遇到的問(wèn)題時(shí)要選取一個(gè)較高的高度去解決問(wèn)題。
敏捷開(kāi)發(fā)得以流行之后,有人把 CMMI 那套“重型”過(guò)程全盤拋棄了。取而代之卻往往是毫無(wú)章法,而又無(wú)法對(duì)項(xiàng)目的各個(gè)維度進(jìn)行有效控制的開(kāi)發(fā)過(guò)程。筆者曾經(jīng)就接手過(guò)一個(gè)號(hào)稱實(shí)施敏捷的瀕臨危險(xiǎn)狀態(tài)的項(xiàng)目。這個(gè)項(xiàng)目存在很多問(wèn)題,雖然這些問(wèn)題都很常見(jiàn)。諸如嚴(yán)重的返工現(xiàn)象、漏測(cè)試現(xiàn)象、人員組織紀(jì)律性差以及人員技能水平低等等。所有這些問(wèn)題當(dāng)中,筆者當(dāng)時(shí)認(rèn)為最為重要和迫切的是嚴(yán)重的返工現(xiàn)象所帶來(lái)的質(zhì)量問(wèn)題。而對(duì)于質(zhì)量的改進(jìn),筆者當(dāng)時(shí)并不是通過(guò)解決漏測(cè)試問(wèn)題,雖然它也會(huì)導(dǎo)致一些質(zhì)量問(wèn)題。而是從規(guī)范開(kāi)發(fā)流程入手,采取缺陷預(yù)防的相關(guān)措施去控制質(zhì)量。筆者當(dāng)時(shí)所采取的措施是基于這樣的認(rèn)識(shí):通過(guò)各種措施盡可能地發(fā)現(xiàn)缺陷并將其修復(fù)不是質(zhì)量管理的最高境界,質(zhì)量管理的最高境界是通過(guò)缺陷預(yù)防將缺陷扼殺于搖籃之中!
應(yīng)對(duì)困境
昔之善戰(zhàn)者,先為不可勝,以待敵之可勝。
——《孫子兵法•軍形》
從前的那些善戰(zhàn)的人,總是先能做到自己不被敵人戰(zhàn)勝,然后等待時(shí)機(jī)去戰(zhàn)勝敵人。
《孫子兵法》啟發(fā)我們?cè)诿鎸?duì)困境的時(shí)候,首先要做的是不被困境中的各種問(wèn)題擊敗,即要保證項(xiàng)目的成功交付。然后才是等待時(shí)機(jī)去將這些問(wèn)題擊敗。這種情形,尤其適合在團(tuán)隊(duì)中出現(xiàn)某些違背團(tuán)隊(duì)目標(biāo)的人,而一時(shí)間你又無(wú)法對(duì)其進(jìn)行處理的情形。這時(shí)候,作為項(xiàng)目經(jīng)理其實(shí)可以等待時(shí)機(jī)再處理,只要你們保證項(xiàng)目的成功交付。
紛紛紜紜,斗亂而不可亂。
——《孫子兵法•兵勢(shì)》
尤其是在面對(duì)困境的時(shí)候,項(xiàng)目經(jīng)理更要能夠沉住氣,而不能自亂陣腳。這樣,整個(gè)團(tuán)隊(duì)才不會(huì)亂。一如兩軍對(duì)戰(zhàn),主帥一亂勢(shì)必導(dǎo)致其軍自亂。面對(duì)危急情況,項(xiàng)目經(jīng)理的表現(xiàn)得沉著冷靜,也能夠給團(tuán)隊(duì)成員一個(gè)好的榜樣。
原文鏈接:http://www.ibm.com/developerworks/cn/rational/r-cn-sunzibingfainagileprojectmanagement/index.html