這是一篇舊文摄咆,之所以發(fā)到這昨凡,是想將自己的內(nèi)容做一個歸集
前言:圍觀了一周命满,關(guān)于張大神在微信內(nèi)部所說的關(guān)于敏捷開發(fā)和KPI的這件小事童芹,今天熱度應(yīng)該有所降低了吧涮瞻。所謂“當(dāng)潮水落去,才知道誰裸泳”假褪,不知道刷屏了一周之后張小龍的這篇演講到底是否會對你們的工作產(chǎn)生一丁點的影響署咽?我認(rèn)為幾乎不會,大多數(shù)只當(dāng)成一次消費,過后也就是過眼煙云宁否,然后再一起等待下一次的演講稿窒升,再一次高潮。
微信是微信慕匠、騰訊是騰訊饱须,張小龍還是那個不愛說話低調(diào)卻神秘的張小龍,你還是你台谊,該背的KPI你今年還得背蓉媳,馬上就年底了都好自為之吧。
開始锅铅,說正事~
敏捷開發(fā)酪呻,其實并不神秘
先推薦兩本入門書:《敏捷開發(fā)與用戶故事》、《敏捷開發(fā)一千零一夜》
敏捷開發(fā)盐须,其實早在上個世紀(jì)90年代就已經(jīng)開始被應(yīng)用在軟件開發(fā)行業(yè)玩荠。所以,并不是什么新奇的事物丰歌,只是在如今在國內(nèi)的互聯(lián)網(wǎng)公司中我們少有提及而已姨蟋。但是,前天看了蘇杰在他微信公眾號寫的立帖,關(guān)于他去硅谷交流時所見到的趣事眼溶,我們還能看到在硅谷的的互聯(lián)網(wǎng)團(tuán)隊中,還是有很大一部分的小團(tuán)隊依然喜歡使用敏捷的開發(fā)方式晓勇。
敏捷開發(fā)堂飞,不是一門技術(shù),而是一套軟件開發(fā)的方法論绑咱、流程绰筛。
核心的思想更多的是集中在,以用戶的需求描融、快速迭代铝噩、分割項目成多個小項目循序漸進(jìn)當(dāng)中。是針對傳統(tǒng)的“瀑布流開發(fā)方式”中以文檔驅(qū)動窿克、需要撰寫大量的需求文檔骏庸、缺乏人與人之間的溝通弊端。而提出來的一種開發(fā)方法年叮。相比傳統(tǒng)的瀑布流開發(fā)方式具被, 敏捷開發(fā)更加強(qiáng)調(diào)的是人與人之間的溝通,包括團(tuán)隊的溝通只损、與客戶的溝通一姿,而文檔則只會撰寫必要少量的文檔。尤其適合早期的小團(tuán)隊。敏捷開發(fā)叮叹,同時是一套“開發(fā)工具集“
寫代碼的同學(xué)都知道IDE這東西艾栋,在沒有IDE之前我們可以直接拿個記事本就可以開始敲代碼照樣可以實現(xiàn)你的hello world。但是集成開發(fā)環(huán)境(IDE)相比與普通的記事本衬横,其內(nèi)部集成了更多的開發(fā)工具裹粤、插件,對于提高寫代碼的效率有著非常重要的作用蜂林。 而敏捷開發(fā)我們也可以把它當(dāng)做一套軟件開發(fā)的“工具集成”在這套方法中集成了多種的小工具包括了:
用戶故事:以用戶的需求為核心遥诉, 站在用戶需求的角度
團(tuán)隊站會:簡潔有效的團(tuán)隊溝通方式,快速解決當(dāng)前問題
任務(wù)看板:將任務(wù)分解噪叙,寫在小便簽卡片之上矮锈,查看當(dāng)前正在進(jìn)行的任務(wù),已完成的任務(wù)睁蕾,未完成的任務(wù)苞笨。當(dāng)你把一個未完成的任務(wù)完成了,那么久可以將未完成的任務(wù)卡片子眶,挪到已完成的區(qū)域瀑凝。形成一個非常明顯的進(jìn)度表。
用戶故事臭杰,不只是故事
上文中我們了解到粤咪,用戶故事之作為敏捷開發(fā)中的集成工具的組成部分而存在。用戶故事(user story)渴杆,是從用戶的角度出發(fā)來描述用戶渴望和需要的功能寥枝,其包括三個重要的元素:
角色:到底是誰要使用這個功能,這個功能是為誰而設(shè)計
活動:這個功能是怎樣的磁奖?要達(dá)到什么程度
商業(yè)價值:為什么要這個功能囊拜,這個功能最后能帶來什么有益的商價值,對用戶來說有什么意義比搭。
通常來說一個優(yōu)秀的用戶故事必須包含以上幾點冠跷,也只有包含了以上三點的才能稱之為用戶故事。一般我們在描述一個用戶故事的時候會按照如下的格式:
作為一個<角色>身诺,我想要<活動>蔽莱,以便于<商業(yè)價值>
舉個栗子:作為一名<人人都是產(chǎn)品經(jīng)理的作者>,我想要<在發(fā)布文章的時候可以預(yù)覽文章>戚长,以便于我<查看我的稿子排版是否美觀>。(小編請將我的需求轉(zhuǎn)告你們的PM)怠苔。
小TIPS:在描述一個用戶故事的時候同廉,千萬不要使用非常技術(shù)官方的專業(yè)術(shù)語、文字來表達(dá)。
如何劃分用戶故事
在實際的開發(fā)工作中迫肖,一個功能模塊的實現(xiàn)會有著大大小小的用戶故事來組成锅劝。那么在實際的敏捷開發(fā)中,我們該按照什么樣的方式來劃分用戶故事蟆湖?
一個優(yōu)秀的用戶故事該有的樣子
一個優(yōu)秀的用戶故事故爵,除了要嚴(yán)格遵守以上提到的描述格式之外,最重要的是在劃分用戶故事和描述的時候還要考慮到如下幾點隅津。
- 保證你的每一個用戶故事盡量的保持獨立性诬垂,不要過多耦合;
- 保證你的每一個用戶故事伦仍,最終是可以通過測試來驗收的结窘;
- 在描述用戶故事時,要保證其文字內(nèi)容的簡潔充蓝、簡短隧枫,有利于閱讀提高效率。
- 要保證用戶故事谓苟,可以讓開發(fā)團(tuán)隊進(jìn)行一個開發(fā)周期是的評估官脓,只有開發(fā)團(tuán)隊可以評估出某個用戶故事的開發(fā)周期,才有利于項目推進(jìn)涝焙。
- 要保證你的用戶故事是來自用戶的需求卑笨,要保證這個用戶故事最后實現(xiàn)是可以帶來商業(yè)價值的。這也是最重要的纱皆。
如何劃分系統(tǒng)龐大的用戶故事
在敏捷開發(fā)中湾趾,每一個功能就是一個用戶故事或者多個用戶故事的集成。那么龐大的系統(tǒng)功能派草,就是由成百上千的用戶故事所組成搀缠,那么在進(jìn)行需求整理時,該如何把這些用戶故事劃分近迁,整理歸集就是個必要的問題艺普。
因為不同復(fù)雜的系統(tǒng)在劃分時,標(biāo)準(zhǔn)是不一樣的鉴竭,所以下文是我按照之前個人經(jīng)歷的項目中歧譬,的劃分原則來說明的。并一定對也不一定適合所有的項目搏存。
按照功能的優(yōu)先級瑰步,劃分用戶故事
這個和我們在寫需求列表的時候是相似的,優(yōu)先先把用戶當(dāng)前的核心需求璧眠,基本需求按照優(yōu)先級列出來缩焦。之后读虏,按照不同粒度的,將用戶故事細(xì)分劃袁滥。最后通過優(yōu)先級進(jìn)行歸類盖桥,將權(quán)限最高的歸到一起,并優(yōu)先開發(fā)题翻。按照使用的角色揩徊、劃分用戶故事
用戶故事的核心就是,人就是角色嵌赠,誰在使用這個功能塑荒?所以在劃分系統(tǒng)用戶故事時,我們可以按照使用角色猾普,劃分出來粒度較大的用戶故事袜炕。然后在按照角色再進(jìn)行二級劃分,得到粒度較小的用戶故事初家。
舉個栗子:之前我負(fù)責(zé)過個網(wǎng)上購買車險項目偎窘,按照前后臺分為前臺后臺,按照使用角色劃分前臺是購買車險的用戶溜在,后臺是系統(tǒng)的運營人員陌知。首先按照角色,把前后臺的用戶故事劃分掖肋,成大粒度的用戶故事仆葡,然后在針對各個角色在進(jìn)行劃分。
- 按照功能模塊志笼,劃分用戶故事
拿后臺功能中我們最常見的的增沿盅、刪、改纫溃、查來舉例子腰涧,增加一個數(shù)據(jù),刪除一個數(shù)據(jù)就是兩種不同的操作紊浩。所以我們在劃分用戶故事的時候可以按照不同的功能模塊窖铡,操作來劃分。
區(qū)分一個誤區(qū):用戶故事與用例
在當(dāng)初首次接觸用戶故事的時候坊谁,個人也是掉進(jìn)過這個深坑幾次费彼,今天在這稍作總結(jié)。用戶故事和用往往我們會搞混了口芍,用例是在UML建模中一個重要的概念箍铲。它是用來描述一組動作系列的抽象描述。
說人話:用戶故事就是我對用戶需求的一個具體化鬓椭,用例則是對于用戶故事的具體化虹钮。有可能一個用戶故事會對應(yīng)這多個用例聋庵。用例詳細(xì)描述著一個功能的所有操作步驟,并且給出所有異常路徑和提示芙粱。
下面這個用例是我按照上文中提到的購買車險這個用戶故事,所寫的一個用例氧映。
最后春畔,再說兩句
敏捷開發(fā)這東西,原本就不是什么新鮮事也不是什么特別的技術(shù)岛都,只不過是因為是張小龍說出來了因為是微信說出來的律姨,所以才在這個周末刷屏。敏捷技術(shù)對于軟件開發(fā)來說確實是個好的方法論臼疫,對于小團(tuán)隊快速完成產(chǎn)品择份,上線搶占市場也存在著一定的作用。
但如前言說烫堤,微信是微信荣赶,張小龍是張小龍,你還你該背的鍋還得背鸽斟。微信我沒待過拔创,但是敏捷方法我經(jīng)歷過,也許它適合微信但不適合我的團(tuán)隊富蓄,也可能不適合你們的團(tuán)隊剩燥。所以,適合團(tuán)隊的方法論立倍,和工作流程才是最好的方法灭红。
不同的團(tuán)隊規(guī)模,不同的leader風(fēng)格都會有不同的方法論口注,切忌生搬硬套变擒。