行業(yè)內(nèi)有太多人吐槽敏捷開發(fā),原因各不相同承璃,有覺得 Agile 就是一坨翔的利耍,有覺得 Agile 太低效的,也有覺得團(tuán)隊(duì)小暫時(shí)不需要敏捷的盔粹,etc隘梨。
人的本性都是敏捷的,誰都不想浪費(fèi)寶貴的時(shí)間舷嗡。抱怨敏捷的人轴猎,一是對(duì)敏捷理解不夠深刻,生搬硬套进萄,覺得不行捻脖,然后就一大堆抱怨;二是老板覺得敏捷不能完全的壓榨勞動(dòng)力垮斯,也就是行業(yè)金句——工作不飽和郎仆。
美國人埃里克·萊斯提出了《精益創(chuàng)業(yè)》的方法論,它強(qiáng)調(diào)的是在風(fēng)險(xiǎn)極高兜蠕、創(chuàng)業(yè)資本有限的情況下扰肌,需要快速摸索出最小化可行產(chǎn)品(MVP)盡早進(jìn)行市場(chǎng)驗(yàn)證,現(xiàn)在精益創(chuàng)業(yè)已風(fēng)行創(chuàng)業(yè)領(lǐng)域熊杨,但是如何將此方法論具體應(yīng)用到創(chuàng)業(yè)團(tuán)隊(duì)產(chǎn)品開發(fā)的實(shí)踐之中曙旭?很多創(chuàng)業(yè)公司/團(tuán)隊(duì)聲稱自己的精益創(chuàng)業(yè),然而卻對(duì)團(tuán)隊(duì)管理漠不關(guān)心晶府,更別說敏捷開發(fā)桂躏,開發(fā)流程亂七八糟,全是小作坊操作川陆,美其名曰:我們要快速的迭代產(chǎn)品剂习,顧不上這些。
我在敏捷的團(tuán)隊(duì)做過好幾年较沪,敏捷的目的并不是為了讓開發(fā)事兒更少鳞绕,而是讓大家在有限的時(shí)間效率更高。在工作量不變的情況下尸曼,更少加班们何;在工作時(shí)間不變的情況下,產(chǎn)出更大控轿。
在歐美軟件企業(yè)中,有近半數(shù)企業(yè)已采用敏捷方法進(jìn)行開發(fā)冤竹,硅谷FLAG拂封,國內(nèi)如騰訊、阿里鹦蠕、百度冒签、Fackbook、Yahoo!等等一線互聯(lián)網(wǎng)公司內(nèi)部幾乎所有的開發(fā)團(tuán)隊(duì)都在實(shí)施敏捷方法钟病。相關(guān)統(tǒng)計(jì)表明镣衡,敏捷開發(fā)可以將效率提高3~10倍,項(xiàng)目質(zhì)量也有更加可靠的保證档悠。
什么是敏捷開發(fā)?
- 敏捷開發(fā)(Agile Development)是一種以人為核心望浩、迭代辖所、循序漸進(jìn)的開發(fā)方法。
怎么理解呢磨德?首先缘回,我們要理解它不是一門技術(shù),它是一種開發(fā)方法典挑,也就是一種軟件開發(fā)的流程酥宴,它會(huì)指導(dǎo)我們用規(guī)定的環(huán)節(jié)去一步一步完成項(xiàng)目的開發(fā);而這種開發(fā)方式的主要驅(qū)動(dòng)核心是人您觉;它采用的是迭代式開發(fā)拙寡;
- 為什么說是以人為核心?
我們大部分人都學(xué)過瀑布開發(fā)模型琳水,它是以文檔為驅(qū)動(dòng)的肆糕,為什么呢?因?yàn)樵谄俨嫉恼麄€(gè)開發(fā)過程中在孝,要寫大量的文檔诚啃,把需求文檔寫出來后,開發(fā)人員都是根據(jù)文檔進(jìn)行開發(fā)的私沮,一切以文檔為依據(jù)始赎;而敏捷開發(fā)它只寫有必要的文檔,或盡量少寫文檔仔燕,敏捷開發(fā)注重的是人與人之間造垛,面對(duì)面的交流,所以它強(qiáng)調(diào)以人為核心涨享。
- 什么是迭代筋搏?
迭代是指把一個(gè)復(fù)雜且開發(fā)周期很長的開發(fā)任務(wù),分解為很多小周期可完成的任務(wù)厕隧,這樣的一個(gè)周期就是一次迭代的過程奔脐;同時(shí)每一次迭代都可以生產(chǎn)或開發(fā)出一個(gè)可以交付的軟件產(chǎn)品俄周。
敏捷的套路 —— 實(shí)踐框架
- XP(極限編程)較早出現(xiàn)在中國的原因,得益于當(dāng)初翻譯的幾本書(2001年)髓迎,不過有點(diǎn)極端了峦朗,很多傳統(tǒng)企業(yè)都不能適應(yīng)。
- Scrum 是精益創(chuàng)業(yè)很好的實(shí)踐方法排龄,概念清晰波势,可操作性強(qiáng),落地快橄维,在中國也出現(xiàn)了日漸普及的態(tài)勢(shì)尺铣;當(dāng)然罵聲也不少,認(rèn)為它什么都沒講争舞,太虛了凛忿。實(shí)際上他們大多數(shù)人把自身的問題歸結(jié)于 Scrum 了。
- FDD(Feature Driven Development)等還有一些其他的過程竞川,聲音慢慢就越來越少了店溢。
目前流行的敏捷套路就只有 Scrum 而已,另外一些都越來越少有被人提起了委乌。
這里床牧,我們主要以 Scrum 來講解敏捷,但千萬別以為 Scrum 就是敏捷遭贸。
- 關(guān)于Scrum和XP
前面說了敏捷它是一種指導(dǎo)思想或開發(fā)方式戈咳,但是它沒有明確告訴我們到底采用什么樣的流程進(jìn)行開發(fā),而 Scrum 和 XP 就是敏捷開發(fā)的具體方式了壕吹,你可以采用 Scrum 方式也可以采用 XP 方式除秀;Scrum 和 XP 的區(qū)別是,Scrum 偏重于過程算利,XP 則偏重于實(shí)踐册踩,但是實(shí)際中,兩者是結(jié)合一起應(yīng)用的效拭,這里主要講 Scrum暂吉。
Scrum 關(guān)鍵詞匯解釋
product backlog: 可以預(yù)知的所有任務(wù), 包括功能性的和非功能性的所有任務(wù)缎患。
sprint: 一次跌代開發(fā)的時(shí)間周期慕的,一般最多以30天為一個(gè)周期.在這段時(shí)間內(nèi),開發(fā)團(tuán)隊(duì)需要完成一個(gè)制定的backlog,并且最終成果是一個(gè)增量的挤渔,可以交付的產(chǎn)品肮街。
sprint backlog: 一個(gè) sprint 周期內(nèi)所需要完成的任務(wù)。
Scrum Master: 確保團(tuán)隊(duì)合理的運(yùn)作 Scrum判导,并幫助團(tuán)隊(duì)移除實(shí)施中的障礙嫉父。
PO (Product Owner): 即產(chǎn)品負(fù)責(zé)人沛硅,確定產(chǎn)品的方向和愿景,定義產(chǎn)品發(fā)布的內(nèi)容绕辖、優(yōu)先級(jí)及交付時(shí)間摇肌,為產(chǎn)品負(fù)責(zé)。
scrum team(開發(fā)團(tuán)隊(duì)): 一個(gè)跨職能的小團(tuán)隊(duì)仪际,包括開發(fā)測(cè)試围小,人數(shù)5-9人為佳,團(tuán)隊(duì)擁有交付可用軟件需要的各種技能树碱。
time-box: 一個(gè)用于開會(huì)時(shí)間段肯适。比如每個(gè) daily scrum meeting(每日站立會(huì)議) 的time-box為15分鐘。
sprint planning meeting: 在啟動(dòng)每個(gè)sprint前召開成榜。該會(huì)議需要制定的任務(wù)是:PO 和團(tuán)隊(duì)成員將 backlog 分解成小的功能模塊,決定在即將進(jìn)行的 sprint 里需要完成多少小功能模塊疹娶,確定好這個(gè) Product Backlog 的任務(wù)優(yōu)先級(jí)。另外伦连,該會(huì)議還需詳細(xì)地討論如何能夠按照需求完成這些小功能模塊。制定的這些模塊的工作量以小時(shí)計(jì)算钳垮。
-
Daily Scrum meeting:開發(fā)團(tuán)隊(duì)成員召開惑淳,一般為15分鐘。每個(gè)開發(fā)成員需要向 team 匯報(bào)三個(gè)項(xiàng)目:
- 昨天完成了什么饺窿,完成了百分之多少歧焦,還剩百分之多少?
- 今天你打算做什么肚医?
- 完成你的目標(biāo)是否存在什么障礙绢馍?
通過該會(huì)議,團(tuán)隊(duì)成員可以相互了解項(xiàng)目進(jìn)度肠套。
Sprint review meeting:在每個(gè) Sprint 結(jié)束后舰涌,這個(gè)Team將這個(gè) Sprint 的工作成果演示給 Product Owner,客戶你稚,老板和其他相關(guān)的人員瓷耙。
Sprint retrospective meeting:對(duì)剛結(jié)束的Sprint進(jìn)行總結(jié)。會(huì)議的參與人員為團(tuán)隊(duì)開發(fā)的內(nèi)部人員刁赖。一般該會(huì)議為1小時(shí)搁痛。
什么是scrum?
Scrum的基本假設(shè)是:
開發(fā)軟件就像開發(fā)新產(chǎn)品,無法一開始就能定義軟件產(chǎn)品最終的規(guī)程宇弛,過程中需要研發(fā)鸡典、創(chuàng)意、嘗試錯(cuò)誤枪芒,所以沒有一種固定的流程可以保證專案成功彻况。Scrum 將軟件開發(fā)團(tuán)隊(duì)比擬成橄欖球隊(duì)谁尸,有明確的最高目標(biāo),熟悉開發(fā)流程中所需具備的最佳典范與技術(shù)疗垛,具有高度自主權(quán)症汹,緊密地溝通合作,以高度彈性解決各種挑戰(zhàn)贷腕,確保每天背镇、每個(gè)階段都朝向目標(biāo)有明確的推進(jìn)。
Scrum 開發(fā)流程通常以 30 天(或者更短的一段時(shí)間)為一個(gè)階段泽裳,由客戶提供新產(chǎn)品的需求規(guī)格開始瞒斩,開發(fā)團(tuán)隊(duì)與客戶于每一個(gè)階段開始時(shí)挑選該完成的規(guī)格部分,開發(fā)團(tuán)隊(duì)必須盡力于 30 天后交付成果涮总,團(tuán)隊(duì)每天用 15 分鐘開會(huì)檢查每個(gè)成員的進(jìn)度與計(jì)劃胸囱,了解所遭遇的困難并設(shè)法排除。
Scrum 三大角色
Scrum“角色”–無規(guī)矩不成方圓
- PO
必須有一個(gè)項(xiàng)目持有者瀑梗,制定規(guī)劃并把握項(xiàng)目走向烹笔,一般就是產(chǎn)品經(jīng)理。 - SM
敏捷教練抛丽。一般由對(duì)技術(shù)開發(fā)以及當(dāng)前項(xiàng)目明晰的技術(shù)經(jīng)理擔(dān)任谤职。 - TEAM
Scrum 的流程
我們首先需要確定一個(gè) Product Backlog(按優(yōu)先順序排列的一個(gè)產(chǎn)品需求列表)亿鲜,這個(gè)是由 Product Owner 負(fù)責(zé)的允蜈;
正式開始一個(gè) sprint 開始之前,產(chǎn)品蒿柳、研發(fā)饶套、測(cè)試需要一同開一次 sprint planning meeting,共同討論本次 sprint 的功能點(diǎn)垒探,需求討論或技術(shù)討論妓蛮;成員預(yù)估需求所需開發(fā)時(shí)間;團(tuán)隊(duì)輸出是否滿足需求圾叼,排入 sprint backlog仔引;
planning meeting 下來之后每個(gè)團(tuán)隊(duì)成員對(duì)自己在這個(gè)sprint中的工作進(jìn)行整理,拆分小任務(wù)褐奥,預(yù)估開發(fā)完成時(shí)間咖耘,自己排自己的優(yōu)先級(jí);
進(jìn)行 Daily Scrum Meeting撬码,這個(gè)環(huán)節(jié)在 agile 中非常關(guān)鍵儿倒,是 agile 的日常修煉,控制在15分鐘左右,每個(gè)人都必須發(fā)言夫否,并且要向所有成員當(dāng)面匯報(bào)你昨天完成了什么彻犁,并且向所有成員承諾你今天要完成什么,同時(shí)遇到不能解決的問題也可以提出來尋求幫助凰慈。完了以后SM負(fù)責(zé)根據(jù)結(jié)果更新 burndown chart汞幢;
當(dāng)一個(gè) Sprint 結(jié)束時(shí),我們要進(jìn)行 Sprint Review Meeting微谓,也稱為評(píng)審會(huì)議森篷,產(chǎn)品負(fù)責(zé)人和客戶都要參加,每一個(gè)Scrum Team的成員都要向他們演示自己完成的軟件產(chǎn)品(這個(gè)會(huì)議非常重要豺型,一定不能取消)仲智;
最后就是 Sprint Retrospective Meeting,復(fù)盤這個(gè) sprint姻氨,以輪流發(fā)言方式進(jìn)行钓辆,每個(gè)人都要發(fā)言,總結(jié)并討論做得好的地方肴焊、需要改進(jìn)的地方前联;根據(jù)實(shí)際情況進(jìn)行下一個(gè) sprint 的任務(wù)安排。
這樣周而復(fù)始娶眷,按照同樣的步驟進(jìn)行下一次Sprint.
Scrum 的特性
- 不斷交付軟件以滿足客戶需求似嗤,每個(gè)迭代版本都是可運(yùn)行的
- 歡迎需求的變化
- 及時(shí)溝通,拒絕過度設(shè)計(jì)
- 量化了工作項(xiàng)目的進(jìn)度和團(tuán)隊(duì)的產(chǎn)出
- 流程簡(jiǎn)單茂浮,溝通順暢
隨便總結(jié)一下
敏捷是一種流程、方法壳咕、理念席揽,甚至信仰;
敏捷不是一種工具谓厘,不是用了敏捷的軟件就是敏捷了幌羞;
敏捷是為了團(tuán)隊(duì)成員能夠更加緊密地配合完成工作;
敏捷是需要本土化的竟稳,可以根據(jù)項(xiàng)目團(tuán)隊(duì)的情況指定自己的敏捷計(jì)劃属桦。