在顧問(wèn)們經(jīng)歷的很多敏捷咨詢過(guò)程中,經(jīng)常遇到那些將Scrum實(shí)施成小瀑布的團(tuán)隊(duì),這些項(xiàng)目的結(jié)局,往往比大瀑布還差。軟件開發(fā)是一個(gè)復(fù)雜系統(tǒng),沒(méi)有什么“最佳實(shí)踐”組成的銀彈,因此也沒(méi)有一種方法可以把敏捷套用到每一個(gè)團(tuán)隊(duì)中。但一些共同的精神和價(jià)值觀構(gòu)成了我們常說(shuō)的敏捷思維,這些是具有共通性的,它是踐行敏捷實(shí)踐的前提。
理解市場(chǎng)和需求會(huì)不斷變化
我們和最終用戶交談,辛苦做完用戶調(diào)研和需求分析,但上線后他們卻認(rèn)為這不是他們自己想要的?這是軟件工程中老生常談的話題,工程師常常抱怨“這不是上次訪談中確認(rèn)的需求嗎?為什么又要改了?”然而一個(gè)真正有敏捷精神的專業(yè)工作者,應(yīng)該反過(guò)來(lái)理解“需求”是會(huì)不斷地變動(dòng)的,因?yàn)榧夹g(shù)、競(jìng)爭(zhēng)對(duì)手、市場(chǎng)一直都在變化(我們所處的VUCA時(shí)代就是變幻莫測(cè)的時(shí)代:VUCA是Volatility(易變性)、Uncertainty(不確定性)、Complexity(復(fù)雜性)、Ambiguity(模糊性)的縮寫。),因此我們?cè)撟龅氖窃诳勺儎?dòng)的范圍內(nèi)保留一定的彈性,縮短交付進(jìn)度。
對(duì)應(yīng)到敏捷軟件開發(fā)中,有三種方式來(lái)縮短交付進(jìn)度:首先,在短暫的迭代時(shí)間范圍內(nèi)不斷關(guān)注產(chǎn)品功能及其優(yōu)先次序;第二,理順開發(fā)流程,將重點(diǎn)集中在增值(有價(jià)值)的活動(dòng)上;第三,將精力放在選擇和培養(yǎng)項(xiàng)目所需的團(tuán)隊(duì)技能上。

減少浪費(fèi)
按照精益原則,任何不能為客戶增加價(jià)值的行為即是浪費(fèi)。在軟件開發(fā)中,“沒(méi)有必要的功能或需求”是很明顯的浪費(fèi)。我們也許碰到過(guò)這樣的案例:團(tuán)隊(duì)覺得這個(gè)功能很酷,用戶一定想要這個(gè)功能,但這些需求真的都是必要的嗎?如果我們不能列出需求的優(yōu)先級(jí),很容易陷入這樣的處境。因此我們要很清楚用戶的行為(我們常用設(shè)計(jì)思維來(lái)理解用戶旅程),什么功能(需求)對(duì)他們是最有價(jià)值的,并設(shè)定正確的優(yōu)先級(jí)。精益思想認(rèn)為軟件業(yè)有七大浪費(fèi),分別是:庫(kù)存(半成品、WIP),額外過(guò)程(比如文檔工作中不會(huì)產(chǎn)生增值的部分),多余功能(任何一段不需要的程序代碼都是一種浪費(fèi)),任務(wù)調(diào)換(軟件開發(fā)人員每次在轉(zhuǎn)化工作時(shí)都會(huì)浪費(fèi)調(diào)換時(shí)間),等待(比如在軟件開發(fā)過(guò)程中一方等待另一方的響應(yīng)),移動(dòng)(比如當(dāng)開發(fā)人員遇到無(wú)法立刻處理的問(wèn)題而需要他人協(xié)助時(shí),他需要移動(dòng)多少“距離”才能找到問(wèn)題的答案?),缺陷(缺陷需要越早找到越好,因此借助頻繁集成及發(fā)布是一種很好的實(shí)踐)。
無(wú)論一個(gè)人、一個(gè)團(tuán)隊(duì)或者一家公司有多么強(qiáng)的預(yù)見能力,未來(lái)總是為我們帶來(lái)預(yù)料不到的東西。一些產(chǎn)品每周、乃至每天都在發(fā)生市場(chǎng)、技術(shù)等方面的變化,行之有效的辦法是減少浪費(fèi)、努力提高產(chǎn)品的適應(yīng)能力——這是開發(fā)流程的一個(gè)關(guān)鍵設(shè)計(jì)標(biāo)準(zhǔn)。事實(shí)上,在敏捷項(xiàng)目中,卓越技術(shù)通過(guò)兩方面評(píng)判:一是提供客戶價(jià)值,二是創(chuàng)造適應(yīng)能力強(qiáng)的產(chǎn)品。
使用者參與并盡早取得反饋
想象我們?cè)赥WI培訓(xùn)中做過(guò)的樂(lè)高游戲(用于理解精益創(chuàng)業(yè)),其中的痛點(diǎn)是研發(fā)團(tuán)隊(duì)常常容易忽略的:研發(fā)團(tuán)隊(duì)關(guān)在辦公室中“想想”使用者的需求,并以此開始研發(fā)工作。顯然這并不是好的做法,我們應(yīng)該早期產(chǎn)出軟件,讓用戶盡早驗(yàn)證這些功能是否滿足需求,讓用戶(或是數(shù)據(jù))反饋哪些是重要的功能、哪些功能不好,或是從中觀察使用者的操作經(jīng)驗(yàn),使軟件能夠在下一個(gè)周期持續(xù)改善。

這是一個(gè)探索的過(guò)程。設(shè)計(jì)生產(chǎn)流程是為了重復(fù)使用,不斷地產(chǎn)生同樣的結(jié)果,好的生產(chǎn)流程是在規(guī)定的時(shí)間、用標(biāo)準(zhǔn)的成本產(chǎn)生預(yù)期的結(jié)果,它們是可預(yù)測(cè)的。探索流程則不同,因?yàn)閲@著用戶需求和新技術(shù),存在著不確定性,所以探索項(xiàng)目不可能產(chǎn)生已知的、完全預(yù)先規(guī)定的結(jié)果,但它們可以產(chǎn)生有價(jià)值的結(jié)果,即滿足已知的客戶和商業(yè)需求。
后記
數(shù)字化時(shí)代,“敏捷”起到何種作用?Martin Fowler(敏捷軟件開發(fā)宣言的作者之一,極限編程的早期倡導(dǎo)者)是這樣回答這個(gè)問(wèn)題的:時(shí)至今日,敏捷思想在行業(yè)內(nèi)廣受尊重,客戶也常常期望我們助其變得敏捷,“數(shù)字變革”是這一變化的重要推動(dòng)力。人們意識(shí)到軟件和數(shù)字通信日漸成為商業(yè)活動(dòng)的重要部分,不應(yīng)只作為成本削減的工具。業(yè)務(wù)與科技之間的整體關(guān)系將被重新定向,而敏捷思想是業(yè)務(wù)數(shù)字重定向的核心,在未來(lái)發(fā)展中將起到重要作用。