忘記敏捷
實踐敏捷的根本不在于敏捷本身,而在于理解敏捷背后擁抱變化的基因。
瓦沙奇山下那段著名的敏捷宣言,至今已近十年。似乎在不經(jīng)意之間,敏捷已經(jīng)被視為 CMM 之后又一次軟件開發(fā)領(lǐng)域的浪潮,不論業(yè)界報道或者坊間傳聞,都不約而同地將敏捷視為一個時代的開始,與之同存的是那些未嘗或淺嘗敏捷者的各種質(zhì)疑和爭論。
當(dāng)敏捷在介于自發(fā)與非自發(fā)中間演變成為一種近乎“革命”的運動,圍繞在它身邊的躁動就不曾停歇,對于細節(jié)的爭執(zhí),對于方法的固執(zhí),讓我們更多地為敏捷的未來憂心忡忡。我們擔(dān)心的是,如果敏捷只被認為是實踐和方法集合,那么必然有一天在它某次失效或者迫于壓力無法延續(xù)的情況下,便會被開發(fā)團隊自然而然地拋棄,他們要做的也只是耐心等待下一次所謂的“革命”。
這時往往被忽略的是第一個要問的問題——為何敏捷。作為從汽車產(chǎn)業(yè)精益制造理念衍生出來的敏捷,到底為何產(chǎn)生?敏捷的萌芽和發(fā)展與精益理念的傳播過程有何共同之處?敏捷將如何發(fā)展?當(dāng)敏捷風(fēng)潮過后留下什么?只有當(dāng)這些問題一一被深刻解答和理解,才能讓敏捷實踐忘記敏捷,真正的敏捷基因才會被持久留存。
精益啟示
在這個充滿隱喻的軟件世界中,各種軟件開發(fā)方法的思潮都來自于其他某個成熟行業(yè)成功經(jīng)驗的映射。理解敏捷的核心,應(yīng)該從精益制造的靈魂開始。精益的萌芽發(fā)展變化在某種程度上契合并預(yù)測著敏捷的今生來世。
敏捷之前工業(yè)制造世界的基礎(chǔ)都建立在“遵循計劃”的模型上——在執(zhí)行之前,需要完成的是計劃,這個被設(shè)計的計劃中規(guī)定了資源分配、詳細工序、時間線、技能要求等,被認為如果按照計劃嚴格地執(zhí)行,便可達到預(yù)期的成功。那么,當(dāng)計劃在一個可預(yù)期的成功之上被設(shè)計時,理所當(dāng)然遵循計劃的結(jié)果便是這個可預(yù)期的成功。
基于這個模型,在 1908~1927 年的 19 年間,福特制造了T型車的神話——在福特設(shè)計的流水線上,生產(chǎn)計劃被嚴格地執(zhí)行,所有的產(chǎn)出物都達到“可預(yù)期的成功”。在這 19 年里,福特認為“無論你需要什么顏色的汽車,福特只有黑色”—— 拒絕任何改變,并堅持把計劃中可預(yù)期的成功作為經(jīng)營成功的唯一標準。因為市場需求的單一,以及價格的低廉,計劃的成功執(zhí)行與市場經(jīng)營成功在某種意義上,畫上了等號。
而福特T型車的迅速衰落正是在于,當(dāng)市場需求最終占據(jù)了主動時、當(dāng)企業(yè)生產(chǎn)和銷售的天平慢慢傾向于銷售一方時,計劃中“可預(yù)期的成功”瞬間變得次要。原因很簡單,企業(yè)的價值不以生產(chǎn)計劃的完成為基礎(chǔ),取而代之的是銷售計劃的完成。換句話說,如果最終目標是“在一定時間線上用合理的成本生產(chǎn)出產(chǎn)品”,作為企業(yè)來說,這樣的目標不足以成為企業(yè)價值的衡量基準,而真正體現(xiàn)企業(yè)價值的是“在一定時間內(nèi)用合理的成本生產(chǎn)出產(chǎn)品,并讓這些產(chǎn)品成功地被用戶使用”。
當(dāng)成功地讓用戶使用產(chǎn)品變得越來越有風(fēng)險(用戶的需求越來越趨于多樣性和變化),使得傳統(tǒng)制造工業(yè)的從業(yè)者無以適從——完成預(yù)測的生產(chǎn)計劃可以通過內(nèi)部的管理手段實現(xiàn),但當(dāng)生產(chǎn)計劃無法完美契合用戶需要時,傳統(tǒng)生產(chǎn)方式的低效和浪費便暴露無遺。也許關(guān)張的不一定都是那些沒有在“在一定時間內(nèi)用合理的成本生產(chǎn)出產(chǎn)品”的企業(yè),但那些沒有“讓這些產(chǎn)品成功地被用戶使用”的企業(yè)一定關(guān)張。
這樣的危機感使得更擁抱變化的精益制造理論得到了迅速發(fā)展——如果那些沒有被用戶使用的產(chǎn)品就是不產(chǎn)生價值的東西,那么更應(yīng)該關(guān)注的不是生產(chǎn)計劃的完成,而是生產(chǎn)線那頭的東西是不是可以被市場買單。
精益的產(chǎn)生和發(fā)展完全契合著汽車消費市場的變革——越來越趨向于關(guān)注用戶多變和多元的需求。換句話說,一個消費需求變化風(fēng)險越大的消費市場,必然產(chǎn)生一種對“降低消費需求變化風(fēng)險”越依賴的生產(chǎn)模式,這個生產(chǎn)模式就是精益。
敏捷非革命
相對汽車行業(yè)近 135 年的歷史,軟件產(chǎn)業(yè)僅僅經(jīng)歷了不到 50 年的時間。在軟件產(chǎn)業(yè)初端將近一半的時間里,就像福特T型車流行的 20 世紀 20 年代,軟件并沒有足夠龐大且多元化的消費市場,世界對于軟件的應(yīng)用多限于工業(yè)控制、數(shù)據(jù)分析、科學(xué)研究等領(lǐng)域,以及那些服務(wù)于并沒有形成足夠成熟消費市場的配套軟件。“遵循計劃”的瀑布式生產(chǎn)模式在很長一段時間里成為軟件工程的準則——“在規(guī)定的時間和規(guī)定的資金投入內(nèi),完成規(guī)定軟件規(guī)格的應(yīng)用”。
接下來,隨著個人電腦以及各種消費類電子和通信產(chǎn)品的普及,人類對于信息的需求上升到前所未有的高度。軟件終究是連接使用者和信息的接口,當(dāng)對于信息的需求不僅限于大型制造商、軍方、科研人員,而突然趨向于成為普通消費者日常生活的必需品,對軟件的需求必然呈現(xiàn)級數(shù)增長。于是,軟件行業(yè)在過去 20 年里的發(fā)展趨勢是“讓更多的人享受到信息服務(wù)”,而曾經(jīng)的高端專業(yè)軟件市場正在慢慢被信息消費類軟件所擠壓。
可以這樣理解,當(dāng)一個市場的消費門檻越來越低時,這個市場越有可能變成買方市場,這個市場的消費者層次就越來越豐富,這個市場可能出現(xiàn)的需求變化就越來越頻繁,預(yù)測這個市場需求變化的難度就越來越高。
這便可以解釋為什么越來越多的軟件從業(yè)者,開始體會到如同汽車普及化運動對汽車行業(yè)的影響類似的困惑——單單“在規(guī)定的時間和規(guī)定的資金投入內(nèi),完成規(guī)定軟件規(guī)格的應(yīng)用”已經(jīng)不夠,必須在后面加上一個“并讓這些產(chǎn)品成功地被用戶使用”。這種市場需求帶來的內(nèi)部驅(qū)動使得人們開始思考一種更加適應(yīng)市場需求變化的生產(chǎn)模式,像大野耐一的天才創(chuàng)新一樣,軟件行業(yè)也開始像汽車行業(yè)一樣開始向追逐最終消費者使用價值的方向發(fā)展,敏捷方法的誕生正是基于此。
一個行業(yè)的成熟,必然經(jīng)歷一個消費市場劇烈分化膨脹的階段——隨著工藝和技術(shù)的提高,以及生產(chǎn)成本的降低帶來了消費門檻的降低和更多多元化需求,這必然使得涉足其中企業(yè)的核心競爭力完成從“按時按量按質(zhì)生產(chǎn)”到“按時按量按質(zhì)適應(yīng)市場生產(chǎn)”的轉(zhuǎn)變。在這個轉(zhuǎn)變的背景之下,必然出現(xiàn)一種生產(chǎn)模式的轉(zhuǎn)變,保證“按時按量按質(zhì)生產(chǎn)”之外還能保證“這些產(chǎn)品成功地被用戶使用”。
汽車消費市場變革發(fā)生在汽車行業(yè)發(fā)展 75 年后的 20 世紀中葉,豐田的精益制造模式成為適應(yīng)汽車消費市場劇烈變革的主角——快速推向市場,迅速對市場變化作出調(diào)整,豐富汽車品種滿足多元化需要的豐田在一段時間內(nèi)成為汽車行業(yè)發(fā)展的標桿。
同樣,在軟件行業(yè)的發(fā)展經(jīng)歷 50 年之后,也開始迎來一次軟件消費市場瘋狂膨脹劇烈變化的階段,這個行業(yè)的參與者,不得不到殫精竭慮于生產(chǎn)的產(chǎn)品是否能夠真正適應(yīng)市場的需求,把成功交付的標準改變成“在規(guī)定的時間和規(guī)定的資金投入內(nèi),完成規(guī)定軟件規(guī)格的應(yīng)用,并讓這些產(chǎn)品成功地被用戶使用”。
而傳統(tǒng)的軟件開發(fā)方法已經(jīng)無法支持對快速變化的市場變化作出快速反應(yīng),換言之,傳統(tǒng)的“計劃+執(zhí)行”的模式在當(dāng)前的市場特質(zhì)中行不通,在這樣存在“巨大需求變化風(fēng)險”的市場中,不可避免地需要一種能夠降低這個風(fēng)險的生產(chǎn)模式,這個生產(chǎn)模式,就是快速響應(yīng)變化的敏捷開發(fā)方法(見圖1)。

圖1 汽車消費市場的變革產(chǎn)生了精益制造;軟件消費市場的變革產(chǎn)生了敏捷開發(fā)
從這個意義上來說,敏捷本身并不是“革命”,真正發(fā)生巨大變革的是市場,敏捷只是被市場選中。實踐敏捷是軟件消費市場變革的結(jié)果,驅(qū)動敏捷背后的力量是市場。如果敏捷是市場變革背景一次必然的風(fēng)潮,那么在風(fēng)潮過后,如果這個市場依然充滿變化且專注每一位消費者的價值,那么能夠被市場所留存的必是這個充滿變革的市場在一開始最需要的東西。
風(fēng)潮過后
對敏捷的經(jīng)典誤讀之一:從“敏捷”的字面出發(fā),認為敏捷是一種快速和高效的開發(fā)方式,通過各種實踐達到交付能力提升,使交付速度變快。事實上,“敏捷”真正的含義里,“靈活”遠大于“高速”,或者說敏捷絕不是提升效率的方法,敏捷是降低變化風(fēng)險的藝術(shù),即是“擁抱變化”的藝術(shù)。換言之,敏捷的精髓在于“擁抱變化”,而正因為這個特質(zhì),才使得敏捷越來越被這個越來越充滿變化風(fēng)險的軟件消費市場所需要。那么,應(yīng)該如何理解敏捷的精髓?
靈活應(yīng)對變化風(fēng)險的實質(zhì)在于當(dāng)需求發(fā)生變化時,應(yīng)對變化的成本最小,而這個成本的組成包括舍棄在這個需求上的已投成本、修改其他關(guān)聯(lián)需求的修改成本和額外投入的新成本。我們不難看出,額外投入的新成本基本由需求本身決定,為固定成本,而舍棄的已投成本和關(guān)聯(lián)的修改成本是可以通過某些手段降低的可變成本。這便是敏捷“擁抱變化”的兩個核心之所在(見圖2)。

圖2 擁抱變化的實質(zhì)
1. 在需求發(fā)生變化前,不在或者盡可能少地在這些發(fā)生變化的需求上投入任何工作量;
2. 當(dāng)需要發(fā)生變化時,不在或者盡可能少地在可能影響的其他功能上產(chǎn)生任何工作量;
而敏捷幾乎所有實踐活動的實質(zhì)都圍繞在這兩個核心上。讓我們從敏捷中幾個經(jīng)典實踐出發(fā)看它們是如何體現(xiàn)這兩個核心的,它們是:用戶故事、迭代交付、重構(gòu)和持續(xù)集成。
1. 用戶故事:將客戶的需求拆分成不同的用戶故事,每一個用戶故事代表一個獨立的業(yè)務(wù)價值,對于未來不確定的潛在特性(變化風(fēng)險最大),用用戶故事的方式占位(Placeholder),當(dāng)需求發(fā)生變化時,盡量只影響其中的一個用戶故事(最好的情況是之前預(yù)估過風(fēng)險還未進入開發(fā)),而不影響其他用戶故事的業(yè)務(wù)價值;
2. 迭代交付:將需求放在不同迭代進行交付,每個迭代都給予客戶對下個迭代需求進行變化的機會,當(dāng)需求變化真正產(chǎn)生變化時,還沒有實質(zhì)的開發(fā)工作量產(chǎn)生;
3. 重構(gòu):鼓勵持續(xù)地對系統(tǒng)架構(gòu)進行優(yōu)化和重構(gòu),降低系統(tǒng)的耦合程度,讓一個需求的變化不會或盡可能少的對現(xiàn)有的其他功能產(chǎn)生額外的工作量;
4. 持續(xù)集成:大量使用自動化測試和構(gòu)建持續(xù)基礎(chǔ)環(huán)境,讓可能產(chǎn)生于每次提交的缺陷(對現(xiàn)有功能的影響)及時暴露,越早發(fā)現(xiàn),越減少可能產(chǎn)生在被影響的其他功能上返工工作量。
市場的變革是敏捷方法風(fēng)潮背后的推手,如果市場真正需要的是一種適應(yīng)消費需求充滿變化的生產(chǎn)模式,那么很有可能,敏捷作為一種方法論,有天也會被某種更新的理念替代。但是能夠肯定的是,軟件消費市場將會在更長的時間內(nèi)趨向于滿足日益多元化的消費群體充滿變化的需求,因為敏捷“擁抱變化”的基因,這場市場的變革選擇了敏捷,如同汽車消費市場選擇了精益,那么當(dāng)風(fēng)潮有天退去時,“擁抱變化”的基因必然被留存,無論冠以敏捷之名或是其他。
同時應(yīng)該指出的是,軟件消費市場仍然存有部分消費需求變動較小的市場,包括穩(wěn)定的工業(yè)自動控制、數(shù)據(jù)分析和科研研究等領(lǐng)域。在這一市場里,對于市場變化的風(fēng)險控制成本較小,以敏捷所包含的“擁抱變化”的基因,并沒有足夠優(yōu)勢完全替代傳統(tǒng)“計劃+執(zhí)行”的開發(fā)方式。因此,在可預(yù)見的未來,敏捷或任何一種可能出現(xiàn)的“擁抱變化”的開發(fā)方法會在一定時期內(nèi)與傳統(tǒng)開發(fā)方法共存。
不可否認,敏捷正在風(fēng)行,絕大部分敏捷實踐者的關(guān)注點自然都在敏捷本身,而我們往往陷于的誤區(qū)是——因為它是敏捷的東西,所以我們要實踐。那么,當(dāng)敏捷風(fēng)潮退去或者對敏捷的效果產(chǎn)生疑問,我們的反應(yīng)往往會變成——敏捷已經(jīng)不流行或者敏捷已經(jīng)證明不適合我們,那么我們沒有理由繼續(xù)實踐敏捷的東西。如果僅僅把敏捷當(dāng)成一種風(fēng)潮之下的流行物,最有可能發(fā)生的事情在于,現(xiàn)在如火如荼實踐的敏捷方法的任何一種,都有可能突然在某天被團隊所拋棄而不能延續(xù)。

圖3 實踐敏捷的根本不在于敏捷本身,而在于理解敏捷背后擁抱變化的基因
當(dāng)我們深刻理解敏捷背后,“擁抱變化”被這個充滿變化的市場所需要的基因,明白我們做的每一件事都是讓我們在面對變化時從容不迫,讓我們制造的產(chǎn)品能夠滿足更多消費者的需求,創(chuàng)造更加多元化的需求。而不是因為,某個深不可測的大師或是高屋建瓴的咨詢師不遺余力地鼓吹敏捷的神奇。只有這樣,我們的實踐才能夠真正為我們的交付產(chǎn)生實效性的價值,并能在更長的時間內(nèi)堅持,哪怕有天沒有人談起敏捷,那個藏在敏捷最里面的基因一直可以留存。實踐敏捷,請忘記敏捷(見圖3)。
原文:http://www.programmer.com.cn/8240/
【編輯推薦】