一個(gè)流行的概念,往往大部分人都不懂
對(duì)于敏捷的定義,維基百科上如下說(shuō)也:
敏捷軟件開發(fā)(英語(yǔ):Agile software development),又稱敏捷開發(fā),是一種從1990年代開始逐漸引起廣泛關(guān)注的一些新型軟件開發(fā)方法,是一種應(yīng)對(duì)快速變化的需求的一種軟件開發(fā)能力。它們的具體名稱、理念、過(guò)程、術(shù)語(yǔ)都不盡相同,相對(duì)于“非敏捷”,更強(qiáng)調(diào)程序員團(tuán)隊(duì)與業(yè)務(wù)專家之間的緊密協(xié)作、面對(duì)面的溝通(認(rèn)為比書面的文檔更有效)、頻繁交付新的軟件版本、緊湊而自我組織型的團(tuán)隊(duì)、能夠很好地適應(yīng)需求變化的代碼編寫和團(tuán)隊(duì)組織方法,也更注重軟件開發(fā)過(guò)程中人的作用。

敏捷宣言如下:
個(gè)體和互動(dòng)高于 流程和工具
工作的軟件高于 詳盡的文檔
客戶合作高于 合同談判
響應(yīng)變化高于 遵循計(jì)劃
上面的定義和宣言,相比傳統(tǒng)的瀑布,核心思想是響應(yīng)變化、小步構(gòu)建、不斷驗(yàn)證以快速尋求反饋,做出高價(jià)值產(chǎn)物。一切都是為了提高軟件的可視性,從而讓客戶能更早的審視產(chǎn)品價(jià)值,從而快速調(diào)整,所以我覺(jué)得尋求反饋是敏捷的核心思想。
我的敏捷之路
在沒(méi)有加入ThoughtWorks之前,我大概聽到過(guò)敏捷,但是當(dāng)時(shí)覺(jué)的Pair很邪乎,老板怎么能讓兩個(gè)人干一份活呢。4年前,有幸加入ThoughtWorks,開始了對(duì)于敏捷的“守、破、離”。
守
剛加入公司,我還是一個(gè)開發(fā),在北京的一個(gè)項(xiàng)目上,和團(tuán)隊(duì)一起Iteration Plan Meeting、站會(huì)、Kick Off、Pair編碼、Sign Off、Showcase、Retrospective。
給我最深震撼的是Retrospective和Pair。在Retrospective過(guò)程中,團(tuán)隊(duì)的所有人一起說(shuō)團(tuán)隊(duì)哪些做的好,哪些做的不好,哪些可以改善。對(duì)于做的不好的和待改善的點(diǎn),通過(guò)大家一起討論從而產(chǎn)出若干Action,以便讓項(xiàng)目的各個(gè)方面都朝好的方面發(fā)展。
在Pair過(guò)程中,兩人一起澄清問(wèn)題、思考解決方案、編碼,整個(gè)過(guò)程思維高度集中,且“三個(gè)豬皮將頂一個(gè)諸葛亮”,往往思路更廣,寫出來(lái)的代碼精致且bug少。
這個(gè)階段,我就是不斷的熟悉敏捷各種活動(dòng)的套路,一招一式,此謂守。
破
在熟悉了各種敏捷活動(dòng)之后,就開始思考這些活動(dòng)到底為什么會(huì)給項(xiàng)目、團(tuán)隊(duì)帶來(lái)好處,以及在具體實(shí)施的時(shí)候,有沒(méi)有可以改善的點(diǎn)。
比如Sign Off應(yīng)該由誰(shuí)drive,之前團(tuán)隊(duì)是由QA,是不是讓開發(fā)drive更合適,能讓開發(fā)有更好的責(zé)任心呢?Retrospective是一定每個(gè)迭代完成才需要,是不是團(tuán)隊(duì)覺(jué)得有問(wèn)題的時(shí)候,就可以來(lái)一場(chǎng)呢?不是每個(gè)Story都要Pair,簡(jiǎn)單的Story是不是可以不用呢?Code Review的標(biāo)準(zhǔn)和目的到底是什么?應(yīng)該不止檢查語(yǔ)法、邏輯錯(cuò)誤,更多的是交流設(shè)計(jì)和想法。估點(diǎn)為什么花那么長(zhǎng)時(shí)間,結(jié)果估的還不準(zhǔn)確?
除過(guò)反思每一個(gè)活動(dòng),有考慮他們背后到底是為了干什么?IPM,Kick Off都是為了讓團(tuán)隊(duì)正確的理解業(yè)務(wù),Sign Off,Showcase是為了讓團(tuán)隊(duì)對(duì)產(chǎn)出的結(jié)果進(jìn)行對(duì)齊,確保做的東西是正確的,客戶想要的。Pair是為了保證質(zhì)量,同時(shí)共享知識(shí)。
這些活動(dòng)背后的理念,了解到敏捷并不確保快速產(chǎn)出,敏捷用這么多實(shí)踐來(lái)確保工作方向的正確性和質(zhì)量。
離
敏捷,以核心的理念為支柱,若干原則為指導(dǎo),并用敏捷活動(dòng)來(lái)實(shí)現(xiàn),以期用正確的方式,做正確的事。
敏捷也是為了做出更好的產(chǎn)出為目標(biāo)的,如果做的事情,需求變動(dòng)不多,需要自上而下的方式,則也不要迷信敏捷。比如:火箭驅(qū)動(dòng)系統(tǒng)用瀑布開發(fā)更加適合。
對(duì)于具體項(xiàng)目,用敏捷還是瀑布?若用敏捷的話,具體用哪些敏捷活動(dòng),具體怎么用?不要所有的活動(dòng)都生搬硬套,要針對(duì)項(xiàng)目具體情況,人員情況,具體定制。還是那句老話,具體問(wèn)題具體分析。
敏捷,就是擁抱變化,快速迭代,尋求反饋,且過(guò)程中不斷持續(xù)改進(jìn)。