圖 3. 狀態(tài)墻
消除浪費(fèi)
時(shí)間是軟件開發(fā)過程中為稀缺并不可替代的資源。其浪費(fèi)將直接影響項(xiàng)目的進(jìn)度。而軟件開發(fā)過程中存在各種各樣的浪費(fèi)。因此,消除浪費(fèi)是加快進(jìn)度的一種重要途徑。
返工則是軟件開發(fā)過程中常見的一種浪費(fèi)。避免返工不僅有利于加快進(jìn)度,同時(shí)也能夠提升軟件的質(zhì)量。敏捷開發(fā)中的一些實(shí)踐,如"定義完成的標(biāo)準(zhǔn)"、"結(jié)對編程"、"測試驅(qū)動開發(fā)"(TDD)等都有助于避免返工
定義完成的標(biāo)準(zhǔn)"通過定義質(zhì)量要求和產(chǎn)出物避免返工。"結(jié)對編程"通過及時(shí)的 code review 避免缺陷在后期才被發(fā)現(xiàn)而造成返工。"測試驅(qū)動開發(fā)"則是通過明確需求,避免因需求理解錯(cuò)誤引入缺陷而造成的返工。
過度設(shè)計(jì)也是一種常見的浪費(fèi)。所謂"過度設(shè)計(jì)",指在設(shè)計(jì)階段為未來可能發(fā)生的變化做過多的預(yù)測,并針對這些預(yù)測在設(shè)計(jì)上做過多預(yù)防。正如俗話所說"計(jì)劃不如變化快",過早地為這些可能根本不會出現(xiàn)的變化做處理成了一種浪費(fèi)。因此,敏捷開發(fā)中提倡的是"簡單設(shè)計(jì)"(Simple Design)。所謂簡單設(shè)計(jì)并不是沒有設(shè)計(jì),而是采用盡可能簡單的設(shè)計(jì)方案。事實(shí)上,真正能夠以"不變應(yīng)萬變"的設(shè)計(jì)方案是不存在的。如果它存在,它必然是一種簡單的方案,因?yàn)槠浜唵,它可以被輕易得推倒重來,這才是適應(yīng)"萬變"的方法。
迭代速率(Velocity)與期望值管理
迭代速率反映了一個(gè)團(tuán)隊(duì)在固定的時(shí)間(一個(gè)迭代周期)內(nèi)所能交付的 Story 個(gè)數(shù)。它反映了團(tuán)隊(duì)的生產(chǎn)能力。前文我們討論的是如何從進(jìn)度的角度提升這個(gè)生產(chǎn)能力――加快以及如何保證迭代進(jìn)度。另外值得注意的是,有時(shí)候我們有必要適當(dāng)?shù)梅怕M(jìn)度,進(jìn)而"減低"團(tuán)隊(duì)生產(chǎn)力。所謂"得寸進(jìn)尺",這反映了項(xiàng)目管理中很重要的一面――期望值管理。"得寸進(jìn)尺"式的期望值提升告訴我們當(dāng)團(tuán)隊(duì)生產(chǎn)能力越大,組織上層和客戶對團(tuán)隊(duì)的期望值也越大。但是,作為團(tuán)隊(duì)的管理者要適當(dāng)控制他們的期望值的提升,因?yàn)閳F(tuán)隊(duì)的生產(chǎn)能力應(yīng)該有它的上限,而期望值的提升取可能遠(yuǎn)比團(tuán)隊(duì)的生產(chǎn)力的提升要來得快,但這無論對于組織和客戶還是團(tuán)隊(duì)來說都不是好事。因此,在進(jìn)度管理中使得控制迭代進(jìn)度,不要使其讓人感覺過快,也是進(jìn)度管理中很重要的一方面。
計(jì)劃偏差分析與控制
布魯克斯法則 ( Brook's Law ) 告訴我們往一個(gè)已經(jīng)滯后的項(xiàng)目增加人力會使這個(gè)項(xiàng)目更加滯后。不幸的是,當(dāng)一個(gè)項(xiàng)目滯后的時(shí)候,往往管理層首先想到的是增加人力,因?yàn)檫@樣他們會安心些。值得注意的是,此時(shí)增加的人是否反而使項(xiàng)目更加滯后,某種程度上說取決于我們?nèi)绾问褂眯略龅娜肆。雖然新增的人力由于對本項(xiàng)目并不熟悉、而本項(xiàng)目原有人力也不可能抽出時(shí)間給這些"新人"培訓(xùn)。但是,我們卻可以以揚(yáng)長避短的方式去發(fā)揮新增人力的作用――把一些不需要項(xiàng)目背景知識的工作交由這些人做,從而使原有的開發(fā)人員能夠集中精力做他們值得做的事情。比如,可以把開發(fā)過程需要使用的與項(xiàng)目背景沒有直接聯(lián)系的函數(shù)交給"新人"開發(fā)。也可以將一些非項(xiàng)目開發(fā)相關(guān)的而平時(shí)大家又不得不做的一些例行任務(wù)(即通常所謂"項(xiàng)目干擾")交由這些人做。
從長期的角度看,對計(jì)劃偏差進(jìn)行分析和控制要求我們做以下幾件事情:
精確記錄任務(wù)消耗的實(shí)際時(shí)間
愛因斯坦曾經(jīng)幽默地解釋什么是相對論:坐在美女旁邊一小時(shí)像是一分鐘,坐在火爐旁一分鐘則像一小時(shí)?梢,人對時(shí)間的感知在缺乏時(shí)間衡量的情況下是多么不可靠。所以,要計(jì)算計(jì)劃偏差(通常是偏慢了),必須要有精確的實(shí)際消耗時(shí)間。一些軟件比如 JIRA 可以幫助我們輕松得記錄每個(gè)任務(wù)的實(shí)際消耗時(shí)間。
量化任務(wù)的計(jì)劃偏差
度量計(jì)劃偏差通常有持續(xù)時(shí)間偏差和進(jìn)度偏差,其計(jì)算公式如下:
持續(xù)時(shí)間偏差 (%) =(( 實(shí)際持續(xù)時(shí)間 - 計(jì)劃持續(xù)時(shí)間 )/ 計(jì)劃持續(xù)時(shí)間 )*100[持續(xù)時(shí)間不包含非工作日]
進(jìn)度偏差 (%)=(( 實(shí)際結(jié)束時(shí)間 - 計(jì)劃結(jié)束時(shí)間 )/ 計(jì)劃持續(xù)時(shí)間 )*100
持續(xù)時(shí)間偏差反映了任務(wù)實(shí)際消耗工作時(shí)間與任務(wù)計(jì)劃持續(xù)工作時(shí)間的偏移程度,而進(jìn)度偏差則反映了任務(wù)實(shí)際結(jié)束時(shí)間與計(jì)劃結(jié)束時(shí)間的偏移程度。對于項(xiàng)目中的關(guān)鍵任務(wù),進(jìn)度偏差反映了項(xiàng)目總體進(jìn)度的偏差。
將任務(wù)的計(jì)劃偏差進(jìn)行量化可以讓人清晰、準(zhǔn)確認(rèn)識到偏差的程度。通常,筆者會讓導(dǎo)致計(jì)劃偏差的人員自己去計(jì)算這兩個(gè)指標(biāo)的值,而不是由"專職人員"來計(jì)算。因?yàn)橹挥凶寙栴}的引入者自己清晰得地意識到問題,這個(gè)問題才能從根本上解決。
對計(jì)劃偏差進(jìn)行根因分析(Root Cause Analysis)
有了計(jì)劃偏差度量值后,固然要對這些度量值進(jìn)行根因分析,以便找到規(guī)避和改進(jìn)的措施。
但是,這些規(guī)避和改進(jìn)措施,通過由專人(比如,項(xiàng)目經(jīng)理自己)給出然后交由開發(fā)、測試人員去執(zhí)行其效果不見得落實(shí)到位,因?yàn)檫@些措施對于其執(zhí)行者來說,它們都是"別人"的,不是執(zhí)行者"自己"的東西。
筆者則將根因分析的方法教給團(tuán)隊(duì)成員,然后由團(tuán)隊(duì)成員自行對偏差進(jìn)行分析,并給出他們自己的規(guī)避和改進(jìn)措施。筆者在組織全體成員對這些分析和改進(jìn)措施進(jìn)行討論,然后幫助團(tuán)隊(duì)成員跟蹤和落實(shí)這些改進(jìn)措施。
結(jié)論
本文分享了縮短項(xiàng)目工期的實(shí)踐以及進(jìn)度信息的獲取、展現(xiàn)與核實(shí)。并討論項(xiàng)目進(jìn)度管理與項(xiàng)目風(fēng)險(xiǎn)管理以及期望值管理間的關(guān)聯(lián)。