周末參加了成都第十屆敏捷之旅的活動,收獲很多,對敏捷有了不一樣的認識,也有了一些思考。
熊節(jié)的《敏捷中國史》從歷史的角度講述了中國軟件行業(yè)的發(fā)展歷程,敏捷實踐對軟件工程的影響,他作為第一批布道敏捷的人,不僅有很多偶然因素,也有很多歷史的必然性。我接觸敏捷的時間比較早,大約是在2005-2006年的時候,當(dāng)時還在上大學(xué),從圖書館里借閱了《程序員》雜志,再后來讀了《代碼大全》、《重構(gòu)》等書,了解了極限編程,混跡于JavaEye等論壇。比爾蓋茨、李納斯變成了偶像,從各種社區(qū)看大牛撕逼汲取營養(yǎng),自學(xué)了SSH框架,畢業(yè)之后走上了程序員這條不歸路。

回顧自己十多年來的經(jīng)歷,走的路線基本上就是《敏捷中國史》的脈絡(luò)。隨著2000年左右網(wǎng)吧的流行,互聯(lián)網(wǎng)在中國開始普及,2001年敏捷宣言發(fā)布,2002年個人門戶興起,那個時候我在讀高三,使用Yahoo創(chuàng)建了自己的個人主頁,學(xué)會了使用QQ,雅虎郵箱,到2003年第一次體驗了電子商務(wù)帶來的便利,從卓越網(wǎng)購買書籍和光碟。2003年中國軟件外包行業(yè)飛速發(fā)展,微軟亞洲工程院當(dāng)年設(shè)立,IDC發(fā)布的數(shù)據(jù)2004中國軟件外包行業(yè)增長率49.9%,2004年3月spring framework1.0 final發(fā)布,2005年jQuery出現(xiàn),至此Java WEB軟件開發(fā)的基礎(chǔ)已經(jīng)成型。再往后是2007年移動互聯(lián)網(wǎng)元年,Android橫空出世,改變了整個行業(yè)。
這些歷史事件和敏捷的關(guān)系是什么?
我個人覺得,敏捷是起到了促進作用,敏捷開發(fā)所提倡的測試方法,實際上是一種自動化,很大程度上提高了軟件開發(fā)的開發(fā)效率和質(zhì)量,是快速的迭代基礎(chǔ),而用戶故事和快速迭代,則打破了傳統(tǒng)的長周期的全量交付方式,敏捷催生出來的各種開發(fā)框架和工具,又是對生產(chǎn)力的極大提升。
我本文說的敏捷不是指Scrum,而是通用意義上的敏捷Aglie。在我經(jīng)歷的多家公司,都在力行敏捷實踐,從平安科技、諾基亞西門子到ThoughtWorks,都是行業(yè)里敏捷的開路者。然而對于傳統(tǒng)的企業(yè),特別是中國本土的企業(yè)而言,敏捷雖然改變了公司的軟件開發(fā)模式,但作為一個一直在一線的開發(fā)者,深知這些公司敏捷實踐做的并不好,缺少單元測試是常態(tài),更不用說自動化測試,以及大量難以重構(gòu)的復(fù)雜遺留系統(tǒng)。我曾經(jīng)參與并編寫了一個有著超過300個業(yè)務(wù)規(guī)則,超過1萬行代碼的JSP頁面,沒有人敢去重構(gòu),一旦出現(xiàn)問題就涉及KPI,而且沒有單元測試和自動化測試來保證,開發(fā)全靠經(jīng)驗,測試基本全靠人。
什么是敏捷?
在敏捷宣言中,提出了敏捷價值觀和原則,充分強調(diào)人和可交付的軟件,敏捷宣言是敏捷的靈魂。
道生一,一生二,二生三,三生萬物。
敏捷宣言的價值觀是敏捷的道,現(xiàn)在各種流行的敏捷方法論和工具,如Scrum、Csystal、Lean、Kanban等,無一不是圍繞道而展開,演變而來的萬物,我認為更多的是一種術(shù),一種具體的敏捷形式,用于解決敏捷實踐中的特定問題。
當(dāng)然也有敏捷解決不了的問題,諸如產(chǎn)品交付后的運維、產(chǎn)品的規(guī)劃和設(shè)計,因此才有了DevOps,精益畫布等概念和工具?,F(xiàn)在有多少團隊在實踐Scrum過程中是嚴(yán)格按照Scrum的方法在執(zhí)行,效果是否真的很理想?一定需要Kanban嗎?答案是否定的,用Excel一樣可以把需求和任務(wù)管理起來。
又比如,需要做一個技術(shù)POC的工作快速驗證一項技術(shù),并實現(xiàn)一個簡單的Demo,是否一樣也需要寫測試代碼?所有的代碼可能在一個星期之后被丟棄,除了PPT中會引用,可能再也不會被運行。
大衛(wèi)張在他的《敏捷都是“騙人”的》中,分享了自己的切身經(jīng)歷,我很認同敏捷是需要很多基礎(chǔ)能力的這個觀點,如果團隊產(chǎn)出的是垃圾,那么使用敏捷會加快速度產(chǎn)出垃圾。
在《人件》一書中,作者提出了一個關(guān)于問題本質(zhì)的論題:
本質(zhì)上,我們工作中的主要問題,與其說是技術(shù)問題,不如說是社會學(xué)問題。
回到敏捷宣言,也并沒有一條說的是技術(shù)問題。
個體和互動 高于 流程和工具;
工作的軟件 高于 詳盡的文檔;
客戶合作? 高于 合同談判;
響應(yīng)變化? 高于 遵循計劃。
所以,我認為敏捷要做好,本質(zhì)上是要對敏捷團隊進行改造,思想上接受敏捷價值觀,行動上踐行敏捷實踐,團隊能力得到綜合提升,至于形式,不能照搬硬套,需要因地制宜,因人而異,最終才能成功敏捷轉(zhuǎn)型。
英雄和大牛始終是少數(shù),一個人不可能具備所有的能力,總有短板和弱點,但一個團隊往往由不同的人和角色組成,每個人擅長的方面不一樣,因此可以形成能力互補。比如一個小團隊中既有業(yè)務(wù)分析人員、也有產(chǎn)品經(jīng)理、雖然主要的還是開發(fā)人員。

個體和互動,需要的是個體的主動性,自我管理,良好的溝通和表達,分析能力等方面。
工作的軟件,需要的是技術(shù)能力、問題解決能力,結(jié)果導(dǎo)向,包括代碼質(zhì)量保證,測試質(zhì)量,功能測試等。
客戶合作,是更高層次的溝通能力,沖突管理,影響力等。
響應(yīng)變化,則是計劃能力,解決突發(fā)問題,適應(yīng)性和應(yīng)對風(fēng)險的能力。
怎么構(gòu)建團隊能力,這又是另外一個話題了。
是否敏捷做好了就能得到優(yōu)雅的架構(gòu)、產(chǎn)品的成功、商業(yè)上的成功?
敏捷不是銀彈,也不是萬能的。
就想到這么多了,最后感謝成都敏捷社區(qū)提供這樣交流和學(xué)習(xí)的機會。