敏捷專家的衰落——實施敏捷必須面面俱到?
最近國外敏捷社群頗不寧靜,你方唱罷我登場。
Joel和Jeff的podcast系列,先是惹著了Kent Beck,然後又惹著了Robert Martin。
關於Scrum的是是非非,討論組裡仍是爭論不休,InfoQ這篇新聞:採用敏捷需要面面俱到,歸納了一些討論組裡的動向,在英文站上還有30多個跟帖。
而更熱鬧的是,Jurgen Appelo在部落格裡對Ron Jeffries,Robert Martin,James Shore,Alistair Cockburn以及Martin Fowler點名,以辛辣反諷的語氣,批駁了他們的觀點。
Jurgen在文中說:
現在,那些敏捷專家告訴我,為了實施Scrum,或是XP,或是其他任何形式的敏捷開發,你都必須要做重構。你沒得選。必須這麼幹。他們說每個人都需要單元測試, 還說因為Scrum忽略了一些重要(但是困難)的敏捷工程實踐,讓事情變得更遭,還說如果你不是每天至少有一次構建整合的話你就不是敏捷……這些日子以來,他們甚至聲稱agile就是按照X、Y、Z這樣的實踐做事。搞極限程式設計的人開玩笑說,把XP裡面那些起作用的技術實踐去掉就成了Scrum。
……
我們已經完全實施了Scrum,但是XP實踐還去之甚遠。我們就低人一等麼?敏捷專家們說,離開了XP實踐的Scrum,會帶來很多技術債,使生產力降低,造成專案失敗。每次我看到這種話,我都覺得哪裡有問題。我覺得我該說點什麼,但不知道怎麼說。
直到今天……
今天,我們所有的專案經理都認為,引入Scrum對我們的專案成功起到了很大幫助。我聽做開發的說,(因為有Scrum),他們終於至少有機會遠離技術債了。客戶也說我們現在的專案質量很高……
這些裡面都見不到XP。怎麼弄的?
為什麼每個敏捷專家,還有他們的大叔(譯註,這裡指的是Robert Martin,他被人稱作Uncle Bob),都在警告大家不要單純的實施Scrum而不用XP實踐,但是我們的組織卻正好按照那種做法做的很成功?為了理解所發生的一切,我們得幹一些敏捷 專家們這些年都沒幹過的事情……那就是思考,還有回溯敏捷的根源。
接下來,Jurgen先是用複雜性理論(complexity theory)中的“混沌邊界(The edge of chaos)”來支援他的觀點。
他提到,在從左到右,從“有序”到“混沌”的這樣一條譜系中,當系統位於居中的“複雜”區域內,它的適應性、創造能力等等都是最強的。對於那些一直在用有 序、結構化的方式生產軟體的公司,敏捷會把他們從左邊(即有序)向右推,推向混沌的方向,但不會進入混沌。而如果你沒有用一些恰到好處的實踐——包括技術 實踐——敏捷方法就會把你推的太遠,直至混沌。這可能就是為什麼大多數敏捷專家都在說“Scrum in not enough”。但是,大多陣列織並不是處在有序的位置。對於這種情況,敏捷方法會把他們從右往左推,推向有序的方向。這時,倘若強加一些實踐於其上,就 會跟官僚政治一樣,危害整個系統。所以一切都要依具體環境而定。
緊接著,他又談到了博弈理論中的“進化穩定策略(Evolutionary stable strategy)”。他說:
除了適應性以外,在ESS中沒有任何單個屬性是必須存在的。的確,生物體的眼和腳給他們帶來了好處,但是植物和細菌照樣過得很好。很多公司通過市場和廣告 獲益,但也有些公司根本不考慮這個。很多軟體開發專案用了自動化測試、現場客戶、結對程式設計。但也有很多專案沒用這些東西,也做的很好,我謝謝你們,謝謝你 們八輩祖宗。
……
博弈理論告訴我們,從來不會有一個最佳策略可以適用於一個環境中的所有因素……認為某些敏捷實踐必須得用,這種幼稚(或是自大)就跟認為人類基因是世界上最佳的DNA鏈一樣。
此文一出,我們自然可以料想得到社群中的反應,Ron Jeffies在部落格回帖中說:
重構這裡的關鍵點是邏輯,Jurgen,不是命令。我不會發號施令。我也不在乎你用不用重構。但是,如果你真的要用Scrum,那麼:
- 你必須從第一個Sprint起開始交付軟體;
- 你必須在隨後的每一個Sprint中交付軟體;
- 如果你在第一個Sprint裡交付軟體,那麼當時所作出的設計就會比較脆弱,因為你沒時間把一切都弄好。
- 因為這樣一個設計沒法從頭到尾承載起專案,你就不得不改進設計;
改善既有程式碼的設計,即為重構之名。
你必須做重構——改善設計,不是因為我這樣說你才做,而是因為除了改進程式碼以外你別無他法,要麼就等著專案嗝屁。不過像你這麼強悍,專案還嗝屁不了。
然後Jurgen Appelo又回應說:
重構跟單元測試或其他XP實踐一樣,都是一種投資。人們這樣做,是為了*在將來*獲取收益。當然,隨著時間推移,脆弱的設計會變的不穩定。但最本質的問題在於,投資*何時*能夠得到回報?
舉個例子:如果我做的東西只會用一個月,而構建就要花三週的時間,那我為啥要做重構?……
另一個例子:如果我知道競爭對手在用Scrum的同時做重構,我可能就會打算不用重構。這樣就可以更快把產品做完。沒錯,程式碼設計會比較糟糕,但*我*會得到合同!!他們就得不到!!*有了*新合同以後,等交付完第一期產品,我就有錢再花時間做重構了。
這只是兩個例子,我還能給出更多,隨便什麼都行,不管是重構、單元測試,還是結對程式設計。
你說的是“你必須這樣,你必須那樣”,可你忘了這是個複雜的世界。
沒有什麼是必須的。
在xp yahoogroup中,George Dinwiddie說:
我只是想知道他們是怎麼辦到不用重構而遠離技術債的。
Jonathon Golden說:
有件事情讓我感到很驚訝,他一直在說他們做的有多棒有多棒,但最後他還是說“嘿,我們要用一些XP實踐了”。他肯定有些事情瞞著我們沒說。他們組織裡遇到 了一些問題,如果早點引入XP實踐的話那些問題可能就不會出現了。現在他就不得不說,“怎麼引入這些血淋淋的XP實踐”。我把他這種做法叫做扯淡。
論戰在Jurgen Appelo的部落格上繼續,Jason Gorman說:
你引用了複雜性理論,但是把程式碼中無可逃避的熵卻視而不見。
程式碼會變老。跟人一樣。我們會新陳代謝。我們從外界攝取有用的東西,維持我們的身體所需,但與之同時我們也會攝取進一些無用的東西。寫程式碼跟這個很類似。軟體成長的過程中,有益或是有害的東西都會加進來。程式碼腐爛的速度是很驚人的——尤其是在第一個小發布之前。
Ron的意思是,如果你想保持生產效率——尤其是想在開發幾周以後繼續保持——那就必須與不斷增長的熵作鬥爭。
Jurgen回應說:
Jason,我當然瞭解熵。因為有熵,所以我們需要常常打掃房間。但是Ron的意思是,你*必須*打掃房間,他甚至還制定了一個頻率:每個Sprint!我打賭,不是這樣的。
這要看房子。還有家庭。還有環境。
Ilja Preuß也反對Jurgen的說法,他說道:
Jurgen,有個有責任心的廚子會時時保證廚房整潔的。這不需要看環境,這只是幹好工作的必要條件。
我剛開始學精密製造的時候,學到的最重要的一點就是每天下午清理工作環境。這一點沒得商量,不需要看環境。不然你就沒法幹好工作。
Jurgen繼續回應:
我覺得你的類比有問題。
這也許適用於西歐國家的專業廚師,但在其他國家,其他地方就不一定適用了。你也許從沒看過中國飯館的廚房……
Ron Jeffries稍後針對Jurgen的話又寫了一篇部落格,叫做為什麼必須做重構?在部落格中他說道:
對於成功的迭代專案而言,重構是一條自然法則。下面用Scrum的名詞來解釋一下原因:
在我們學到怎麼改進設計之前,Scrum有可能給我們帶來好處,但是我們肯定發揮不了最大的能力,時間慢慢過去,我們還會面臨速度減緩的危險。
- Scrum 需要在每個Sprint結束的時候交付“完成”的軟體。團隊來決定完成的含義,但基本上都表示著系統可以執行,經過了測試、整合,可以交付給客戶。
- 在傳統的Scrum中,Sprint的長度為一個月,現在一般時間更短。所以團隊就得在專案剛開始的兩週或者一個月內交付完成的軟體。
- 軟體來自於產品負責人的backlog。它必須由特徵組成。要正確的做到Scrum,我們不能叫做基礎架構之類的東西,我們要交付特徵。
- 所以,在開始幾個Sprint中,團隊就沒時間把最終產品所需要的整個穩定的基礎架構做好。我們只能做好一小部分而已。
- 但是,整個產品肯定需要一個大型的,效能強勁的,更加穩定的架構。
- 所以專案中的架構必須要改,不是因為我這樣說你才這樣做,而是因為剛一開始我們沒有,而到最後我們得需要。
- 要修改基礎架構的方法不多。我們可以每個Sprint重寫一次,或者是對它做改進。每次都重寫的話效率太低。所以我們必須做改進。軟體的改進就是重構。這就是重構。
這場論戰牽涉範圍甚眾,這個話題就先報導到這裡,回見。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/14639675/viewspace-594432/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 敏捷專家認為敏捷框架SAFe實際最不敏捷敏捷框架
- 解讀敏捷2 - 敏捷實施的六個陷阱敏捷
- 敏捷專案管理到底怎麼實施?敏捷專案管理
- 用了敏捷實踐就是敏捷專案嗎?敏捷
- CORNERSTONE對話騰訊&華為敏捷專家敏捷
- 開發經理 VS 敏捷專家敏捷
- 敏捷實踐經驗分享,企業如何在敏捷開發中實施DoD敏捷
- 敏捷實施步驟與價值觀敏捷
- 開發經理 VS 敏捷專家(下)敏捷
- 敏捷實施中的估算與實際效果 - Ottinger敏捷
- Kirill Klimov訪談:東歐的敏捷實施現狀敏捷
- 敏捷思維-專案實踐敏捷
- 敏捷的實質敏捷
- 經驗分享:在金融企業中實施領域驅動設計的敏捷實踐 | 敏捷聯盟敏捷
- 為什麼有些公司敏捷實施不成功?敏捷
- 敏捷團隊中,專家能勝過通才麼?敏捷
- 敏捷專案管理?敏捷專案管理
- 敏捷開發一千零一問系列之十五:同時實施CMMI和敏捷哪個為主? 薦敏捷
- 華為敏捷專案管理實踐分享敏捷專案管理
- 失敗的敏捷專案敏捷
- 把握敏捷的實質敏捷
- 華為精益敏捷專家:DevOps轉型中的那些坑敏捷dev
- 敏捷開發|私藏的3個敏捷專案管理工具!敏捷專案管理
- 向敏捷實踐學習,學習敏捷出版敏捷
- 三項執行層的支援,支撐起敏捷實施的天空敏捷
- DevOps實施:從敏捷文化與配置檔案的困惑說起dev敏捷
- [敏捷開發實踐](1) 認識敏捷開發敏捷
- SAFe敏捷框架下的工具,實現規模化敏捷開發敏捷框架
- 敏捷開發流程管理須參考的3個要素敏捷
- 騰訊敏捷之道,實施敏捷開發,看我就夠了敏捷
- Choerodon豬齒魚敏捷管理實踐(三):敏捷會議敏捷
- 瀑布 敏捷與現實敏捷
- SAFe必備——提高團隊敏捷性敏捷
- 中國敏捷十年實踐者分享:敏捷教練的自我修為敏捷
- 敏捷的思考敏捷
- 敏捷的文件敏捷
- 【敏捷0】敏捷專案管理-為什麼從敏捷開始?為什麼從PMI-ACP開始?敏捷專案管理
- 解讀敏捷3 - 解讀敏捷實踐之結對Review敏捷View