現(xiàn)在“敏捷開(kāi)發(fā)”已經(jīng)成為了一個(gè)非程杷“時(shí)髦”的詞匯怕午,很多的團(tuán)隊(duì)和公司都聲稱(chēng)自己正在“做敏捷”,但是作為一個(gè)跑過(guò)很多公司淹魄,見(jiàn)過(guò)很多項(xiàng)目和團(tuán)隊(duì)的敏捷教練來(lái)講郁惜,我卻很悲哀地發(fā)現(xiàn),很多團(tuán)隊(duì)的做法卻沒(méi)有真正理解敏捷開(kāi)發(fā)背后的意義揭北,甚至早已和敏捷宣言所倡導(dǎo)的價(jià)值觀背道而馳了扳炬。
重讀敏捷宣言
“2001年2月11日至13日,在美國(guó)猶他州瓦薩奇山雪鳥(niǎo)滑雪勝地搔体,17個(gè)人聚到一起,交談半醉、滑雪疚俱、休閑,當(dāng)然還有聚餐缩多。他們?cè)噲D找到共識(shí)呆奕,最終的成果就是《敏捷軟件開(kāi)發(fā)宣言》(Manifesto for Agile Software Development)。參會(huì)者們包括來(lái)自于極限編程衬吆、Scrum梁钾、DSDM、自適應(yīng)軟件開(kāi)發(fā)逊抡、水晶系列姆泻、特征驅(qū)動(dòng)開(kāi)發(fā)、實(shí)效編程的代表們冒嫡,還包括了希望找到文檔驅(qū)動(dòng)拇勃、重型軟件開(kāi)發(fā)過(guò)程的替代品的一些推動(dòng)者⌒⒘瑁”——history of agile manifesto
我想不用太多我個(gè)人的贅述方咆,在敏捷宣言的官網(wǎng)上就已經(jīng)有了非常明確的描寫(xiě),只是似乎人們都不太擅長(zhǎng)學(xué)習(xí)蟀架,對(duì)于敏捷開(kāi)發(fā)的誤解很多也就來(lái)源于此瓣赂。
什么是敏捷榆骚?
敏捷是快嗎?似乎是煌集,也似乎不是寨躁。如果敏捷是快的話(huà),為什么當(dāng)年他們把這種開(kāi)發(fā)方法叫做“Agile”牙勘,而不是“Fast”或者“Rapid”呢职恳?
我們看一下這兩種動(dòng)物:大象和猴子,如果說(shuō)“快”的話(huà)方面,猴子的奔跑速度怎么也不會(huì)比大象更快放钦,但很顯然,相比于大象恭金,猴子是更加“敏捷”的操禀。
敏捷不敏捷,取決于一個(gè)動(dòng)物或者一個(gè)系統(tǒng)是否能夠察覺(jué)到周邊環(huán)境細(xì)微的變化横腿,但是光察覺(jué)到還不夠颓屑,主要還得看是否能夠作出應(yīng)對(duì)。你說(shuō):“其實(shí)我早就知道了耿焊,就是沒(méi)有做到揪惦。”那也是不夠敏捷罗侯。
所以所謂的敏捷器腋,涉及兩個(gè)方面:敏銳的感覺(jué)和矯健的身手。
為什么要敏捷钩杰?
在過(guò)去的幾十年間纫塌,人類(lèi)商業(yè)環(huán)境的變化和科技水平的發(fā)展正以指數(shù)級(jí)的趨勢(shì)在增長(zhǎng),于是商業(yè)組織和個(gè)人是否能夠在這樣劇烈的變化中生存下來(lái)讲弄,就變得非常重要措左,正是因?yàn)槿绱耍艚蓍_(kāi)發(fā)所倡導(dǎo)的“響應(yīng)變化”的價(jià)值觀才應(yīng)運(yùn)而生避除,也在過(guò)去的15年間得以發(fā)揚(yáng)光大怎披。
關(guān)于人類(lèi)科技水平的變化,雷·庫(kù)茲韋爾提出了一個(gè)很有意思的定律驹饺,叫做“加速回報(bào)法則”钳枕,網(wǎng)絡(luò)上有一個(gè)更加通俗易懂的翻譯是“嚇尿單位”,下文轉(zhuǎn)自《人工智能革命:人類(lèi)將永生或者滅絕》赏壹。
想象一下坐時(shí)間機(jī)器回到1750年的地球鱼炒,那個(gè)時(shí)代沒(méi)有電,暢通通訊基本靠吼蝌借,交通主要靠動(dòng)物拉著跑昔瞧。你在那個(gè)時(shí)代邀請(qǐng)了一個(gè)叫老王的人到2015年來(lái)玩指蚁,順便看看他對(duì)“未來(lái)”有什么感受。我們可能沒(méi)有辦法了解1750年的老王內(nèi)心的感受——金屬鐵殼在寬敞的公路上飛馳自晰,和太平洋另一頭的人聊天凝化,看幾千公里外正在發(fā)生進(jìn)行的體育比賽,觀看一場(chǎng)發(fā)生于半個(gè)世紀(jì)前的演唱會(huì)酬荞,從口袋里掏出一個(gè)黑色長(zhǎng)方形工具把眼前發(fā)生的事情記錄下來(lái)搓劫,生成一個(gè)地圖然后地圖上有個(gè)藍(lán)點(diǎn)告訴你現(xiàn)在的位置,一邊看著地球另一邊的人的臉一邊聊天混巧,以及其它各種各樣的黑科技枪向。別忘了,你還沒(méi)跟他解釋互聯(lián)網(wǎng)咧党、國(guó)際空間站秘蛔、大型強(qiáng)子對(duì)撞機(jī)、核武器以及相對(duì)論傍衡。
這時(shí)候的老王會(huì)是什么體驗(yàn)深员?驚訝、震驚蛙埂、腦洞大開(kāi)這些詞都太溫順了倦畅,我覺(jué)得老王很可能直接被嚇尿了。
但是箱残,如果老王回到了1750年滔迈,然后覺(jué)得被嚇尿是個(gè)很?chē)宓捏w驗(yàn),于是他也想把別人嚇尿來(lái)滿(mǎn)足一下自己被辑,那會(huì)發(fā)生什么?于是老王也回到了250年前的1500年敬惦,邀請(qǐng)生活在1500年的小李去1750年玩一下盼理。小李可能會(huì)被250年后的很多東西震驚,但是至少他不會(huì)被嚇尿俄删。同樣是250來(lái)年的時(shí)間宏怔,1750和2015年的差別,比1500年和1750年的差別畴椰,要大得多了臊诊。1500年的小李可能能學(xué)到很多神奇的物理知識(shí),可能會(huì)驚訝于歐洲的帝國(guó)主義旅程斜脂,甚至對(duì)于世界地圖的認(rèn)知也會(huì)大大的改變抓艳,但是1500年的小李,看到1750年的交通帚戳、通訊等等玷或,并不會(huì)被嚇尿儡首。
所以說(shuō),對(duì)于1750年的老王來(lái)說(shuō)偏友,要把人嚇尿蔬胯,他需要回到更古老的過(guò)去——比如回到公元前12000年,第一次農(nóng)業(yè)革命之前位他。那個(gè)時(shí)候還沒(méi)有城市氛濒,也還沒(méi)有文明。一個(gè)來(lái)自狩獵采集時(shí)代的人類(lèi)鹅髓,只是當(dāng)時(shí)眾多物種中的一個(gè)罷了舞竿,來(lái)自那個(gè)時(shí)代的小趙看到1750年龐大的人類(lèi)帝國(guó),可以航行于海洋上的巨艦迈勋,居住在“室內(nèi)”炬灭,無(wú)數(shù)的收藏品,神奇的知識(shí)和發(fā)現(xiàn)——他很有可能被嚇尿靡菇。
小趙被嚇尿后如果也想做同樣的事情呢重归?如果他會(huì)到公元前24000年,找到那個(gè)時(shí)代的小錢(qián)厦凤,然后給他展示公元前12000年的生活會(huì)怎樣呢鼻吮。小錢(qián)大概會(huì)覺(jué)得小趙是吃飽了沒(méi)事干——“這不跟我的生活差不多么,呵呵”较鼓。小趙如果要把人嚇尿椎木,可能要回到十萬(wàn)年前或者更久,然后用人類(lèi)對(duì)火和語(yǔ)言的掌控來(lái)把對(duì)方嚇尿博烂。
所以香椎,一個(gè)人去到未來(lái),并且被嚇尿禽篱,他們需要滿(mǎn)足一個(gè)“嚇尿單位”畜伐。滿(mǎn)足嚇尿單位所需的年代間隔是不一樣的。在狩獵采集時(shí)代滿(mǎn)足一個(gè)嚇尿單位需要超過(guò)十萬(wàn)年躺率,而工業(yè)革命后一個(gè)嚇尿單位只要兩百多年就能滿(mǎn)足玛界。
現(xiàn)在所有人對(duì)于人工智能的警覺(jué)也來(lái)源于此,因?yàn)橐苍S我們下一個(gè)面對(duì)的“嚇尿單位”只有幾十年或者幾年了悼吱。
明確了敏捷開(kāi)發(fā)價(jià)值觀的本意是“靈活應(yīng)對(duì)變化”慎框,以及敏捷開(kāi)發(fā)的本質(zhì)是追求“對(duì)變化敏銳的感覺(jué)”和“能夠跟上變化的矯健身手”之后,我們?cè)賮?lái)看看對(duì)敏捷開(kāi)發(fā)常見(jiàn)的一些誤解后添。
誤解一:我們現(xiàn)在工期很緊笨枯,是不是可以嘗試一下敏捷開(kāi)發(fā)?
在上文中我們提到,敏捷并不是“快”猎醇,目的也并非是“提升效率”窥突。敏捷的目的是能夠做到“快速響應(yīng)變化”。
如果說(shuō)采用了敏捷方法之后硫嘶,提升了效率和質(zhì)量阻问,那也只是我們做到“快速響應(yīng)變化”之后的一個(gè)副產(chǎn)品罷了。
誤解二:敏捷開(kāi)發(fā)就是沒(méi)有計(jì)劃沦疾,指哪兒打哪兒称近。
事實(shí)上,在之前階段式開(kāi)發(fā)占據(jù)主流的年代哮塞,即使是最出色的技術(shù)人員刨秆,面對(duì)一個(gè)長(zhǎng)達(dá)半年或一年的項(xiàng)目,讓他去估算忆畅,也很難做到準(zhǔn)確無(wú)誤衡未。甚至有數(shù)據(jù)表明,在一個(gè)三個(gè)月周期的開(kāi)始階段家凯,做出的估算上下誤差高達(dá)400%缓醋。
這么看來(lái),在那個(gè)年代绊诲,我們估算并做出來(lái)的工作計(jì)劃只不過(guò)是自欺欺人罷了送粱。
敏捷開(kāi)發(fā)也并非采用了什么新的估算和計(jì)劃方法,只不過(guò)更加面對(duì)現(xiàn)實(shí)罷了掂之,事實(shí)上抗俄,在敏捷宣言的網(wǎng)頁(yè)上有這樣一段話(huà):
敏捷運(yùn)動(dòng)并不是反方法論的,事實(shí)上世舰,我們中的大多數(shù)人正在試圖恢復(fù)方法論的名聲动雹。我們希望能重歸平衡。我們樂(lè)于建模跟压,但目的不是給無(wú)人問(wèn)津的企業(yè)資源庫(kù)增加幾篇圖表存檔洽胶。我們要寫(xiě)文檔,但那些從不維護(hù)裆馒、并很少用到的長(zhǎng)篇大論不算在內(nèi)。我們得做計(jì)劃丐怯,但同時(shí)也要認(rèn)識(shí)到在劇烈變化的環(huán)境中計(jì)劃的局限喷好。
不論是Scrum框架也好,Kanban方法也好读跷,都不是沒(méi)有計(jì)劃梗搅。Scrum作為一個(gè)極度輕量級(jí)的開(kāi)發(fā)框架,也把迭代計(jì)劃會(huì)作為保留下來(lái)的4個(gè)會(huì)議之一。Kanban方法背后的精益開(kāi)發(fā)更是把計(jì)劃放到了每一次卡片拉動(dòng)的過(guò)程中无切。
所以在敏捷開(kāi)發(fā)中荡短,并非是不做計(jì)劃,而是將過(guò)去的“長(zhǎng)計(jì)劃”轉(zhuǎn)變?yōu)榱恕俺S?jì)劃”哆键,面對(duì)現(xiàn)實(shí)掘托,不去做自欺欺人的長(zhǎng)期計(jì)劃,而是經(jīng)常性地籍嘹、頻繁地調(diào)整計(jì)劃并做出預(yù)測(cè)闪盔。
誤解三:我們非常想嘗試敏捷開(kāi)發(fā),但不要改變?nèi)魏维F(xiàn)狀辱士,也沒(méi)有時(shí)間投入到改進(jìn)工作
在軟件工程的名著《人月神話(huà)》中泪掀,布魯克斯就已經(jīng)下了一個(gè)斷言:軟件開(kāi)發(fā)沒(méi)有銀彈。不存在什么放之四海而皆準(zhǔn)的方法論和工具颂碘,應(yīng)用之后就可以瞬間強(qiáng)身健體吃嘛嘛香异赫,每一次改進(jìn)和前進(jìn)都是需要團(tuán)隊(duì)和個(gè)人付出汗水和努力的。
如果什么也不做头岔,那么什么也不會(huì)發(fā)生塔拳。
事實(shí)上,在敏捷轉(zhuǎn)型的過(guò)程之中切油,我們希望得到的更多是遠(yuǎn)期的一些收益蝙斜,短期之內(nèi)開(kāi)發(fā)效率、表現(xiàn)反而還會(huì)出現(xiàn)一些下降澎胡。其實(shí)這并不難理解:團(tuán)隊(duì)需要時(shí)間去進(jìn)行學(xué)習(xí)孕荠、適應(yīng)新的工作方式和流程,當(dāng)一切磨合好了之后攻谁,我們才會(huì)逐漸收回投資稚伍,我們把這種效應(yīng)叫做“J-curve”,如下圖所示戚宦,橫軸是時(shí)間軸个曙,縱軸是進(jìn)行改進(jìn)過(guò)程中團(tuán)隊(duì)的效率和績(jī)效。
誤解四:我們現(xiàn)在有了迭代和站會(huì)受楼,所以我們現(xiàn)在是敏捷的了垦搬。
上文中提到了敏捷開(kāi)發(fā)被提出來(lái)的時(shí)候的目標(biāo)是為了“更快地響應(yīng)變化”。所以我們做了什么其實(shí)并不重要艳汽,重要的是我們做的這些事情有沒(méi)有使我們能夠敏銳地感覺(jué)到外界的變化猴贰,有沒(méi)有使我們能夠更快更可靠地對(duì)這些變化做出應(yīng)對(duì)和反應(yīng)。如果有的話(huà)河狐,那你就踏上了“變敏捷”的道路米绕,如果沒(méi)有瑟捣,那我勸你要么調(diào)整姿勢(shì),看看如何能夠得到這些收益栅干,要么干脆就別折騰了迈套。
畢竟,不看廣告碱鳞,得看療效啊桑李。
有的團(tuán)隊(duì)在每個(gè)迭代的計(jì)劃會(huì)上,一不看上迭代結(jié)束之后干系人提出的反饋劫笙,二不看自己團(tuán)隊(duì)上迭代完成的故事點(diǎn)數(shù)芙扎,直接蒙著眼睛做下迭代的計(jì)劃。
最終的結(jié)果是:每個(gè)迭代的計(jì)劃達(dá)成率都很低填大,而且也沒(méi)有及時(shí)將干系人的反饋意見(jiàn)調(diào)整到交付計(jì)劃中戒洼。
如果沒(méi)有收集到有效反饋,那么迭代演示會(huì)就是沒(méi)有效果的允华。
如果沒(méi)有根據(jù)上迭代的速率進(jìn)行新迭代的計(jì)劃圈浇,那么計(jì)劃會(huì)就是失敗的。
誤解五:敏捷是好的靴寂,PMBOK/CMMI是壞的磷蜀。
很多次我在給團(tuán)隊(duì)一些改進(jìn)意見(jiàn)的方案的時(shí)候,會(huì)聽(tīng)到聲音說(shuō):“這也不是什么新鮮東西嘛百炬『致。”“這不是PMBOK里的東西嗎?”
舉個(gè)例子:我見(jiàn)過(guò)有一個(gè)幾百人的產(chǎn)品開(kāi)發(fā)團(tuán)隊(duì)剖踊,這個(gè)項(xiàng)目在前期風(fēng)險(xiǎn)管理做得非常不好庶弃。風(fēng)險(xiǎn)要么沒(méi)有識(shí)別出來(lái),要么識(shí)別出的風(fēng)險(xiǎn)缺乏跟蹤德澈,到項(xiàng)目執(zhí)行中仍然會(huì)像放炮仗一樣一個(gè)接一個(gè)的爆炸歇攻。其實(shí)風(fēng)險(xiǎn)管理作為PMBOK九大知識(shí)領(lǐng)域之一,管理和應(yīng)對(duì)手段都很成熟了梆造。
應(yīng)對(duì)的思路就有“轉(zhuǎn)移缴守、接受、緩解镇辉、消除”四種屡穗,而我看到的情況通常都以“接受”為應(yīng)對(duì)手段,賭這個(gè)風(fēng)險(xiǎn)不會(huì)發(fā)生忽肛,或者等一個(gè)Risk變成了Issue再去想應(yīng)對(duì)方案鸡捐。
風(fēng)險(xiǎn)識(shí)別不論是在需求優(yōu)先級(jí)排序還是在架構(gòu)設(shè)計(jì)上都是非常重要的一環(huán),我們之所以把高價(jià)值麻裁、高風(fēng)險(xiǎn)的需求視作第一優(yōu)先級(jí),是因?yàn)槲覀兿MM早釋放風(fēng)險(xiǎn),盡早緩解風(fēng)險(xiǎn)煎源。我們提的“簡(jiǎn)單設(shè)計(jì)”簡(jiǎn)單到什么程度色迂,也是由是否能夠涵蓋最重大的風(fēng)險(xiǎn)作為邊界的。
對(duì)于這種事情手销,我只能說(shuō)歇僧,解決這類(lèi)問(wèn)題還沒(méi)到需要敏捷轉(zhuǎn)型才能解決的份兒上……
最后:在這篇文章里,我沒(méi)有寫(xiě)到如何才能做到敏捷锋拖,只是希望看這篇文章的團(tuán)隊(duì)和個(gè)人能夠真正理解敏捷所倡導(dǎo)的價(jià)值觀和我們做敏捷轉(zhuǎn)型所期望達(dá)到的效果诈悍,如果理解了這些,我相信每個(gè)人都能夠做出判斷:自己正在做的究竟是不是敏捷兽埃。