【知乎問答】敏捷開發(fā)中進(jìn)度與文檔的平衡

1 評(píng)論 25336 瀏覽 31 收藏 11 分鐘

史蒂芬說:最近和同事討論敏捷開發(fā)如何在進(jìn)度和文檔之間找到平衡?居然發(fā)現(xiàn)大家理解各異。什么是敏捷開發(fā)?敏捷開發(fā)是否意味著省略很多過程文檔?具體如何實(shí)踐?我們一起分享下“知乎”中大家的心得。

以下是總結(jié)自知乎的高投票率回答
一、什么是敏捷和敏捷開發(fā)

@付聰,中國移動(dòng)

首先,敏捷開發(fā)是一種過程控制論,通俗的說,就是一種做事情的方法。
1. 它適用于軟件,因?yàn)檐浖擒浀模梢愿?。要是硬件,改起來就沒那么方便了;
2. 它適用于客戶不知道自己要啥的情況,其實(shí),這樣的客戶占絕大多數(shù)。因?yàn)榭蛻舨恢酪?,所以你需要不斷幫客戶弄明白他到底想要啥。換句話說,你需要和客戶溝通,合作,傾聽反饋,持續(xù)改進(jìn);
3. 它適用于競(jìng)爭(zhēng)激烈的市場(chǎng),這樣的情況下,趕在競(jìng)爭(zhēng)對(duì)手前交付一個(gè)不完美但至少能用的產(chǎn)品非常重要;
4. 它適用于快速變化的市場(chǎng),你在埋頭造一輛汽車的時(shí)候,客戶已經(jīng)想開飛機(jī)滿天飛了,這就需要你能一步步的把汽車改成飛機(jī),還能按時(shí)交付;
5. 它適用于在一個(gè)地方辦公的小團(tuán)隊(duì),一般10個(gè)人以內(nèi)。這樣能使敏捷中主要的溝通方式“Face to Face” 是可行的;
????? 其次,敏捷開發(fā)是一套工具集,里面有形形色色的工具,你可以不搞敏捷,但可以用那么一兩個(gè)來提高工作效率。比如:
1. 站會(huì):三個(gè)問題,簡(jiǎn)潔有效的小團(tuán)隊(duì)溝通方式;
2. 看板:直觀反映工作進(jìn)度,反映流程遵守情況,反映流程缺陷;
3. 演示,計(jì)劃,反思會(huì):適合于小團(tuán)隊(duì)的協(xié)作和優(yōu)化反饋方式;
4. 用戶故事:站在用戶的角度講需求;
5. 持續(xù)集成:隨時(shí)高質(zhì)量交付的基礎(chǔ),有利于應(yīng)對(duì)變化劇烈的市場(chǎng);
????? 再其次,敏捷開發(fā)是一種企業(yè)管理方式。比如:
1. 一線員工可以同時(shí)是架構(gòu)師,Scrum Master,開發(fā)工程師,測(cè)試工程師,發(fā)揮了他的主觀能動(dòng)性,有利于創(chuàng)新和效率;
2. 敏捷不專注于敏捷團(tuán)隊(duì)中個(gè)人的績(jī)效考核,而更多的側(cè)重于整個(gè)團(tuán)隊(duì)的績(jī)效,更好的避免了KPI驅(qū)動(dòng)模式;
3. 把大項(xiàng)目拆分成小項(xiàng)目去做(每個(gè)Sprint都是一個(gè)迭代,需要輸出一個(gè)高質(zhì)量的版本,相當(dāng)于完成一個(gè)小項(xiàng)目),把bug的生存期控制在一個(gè)迭代以內(nèi),降低了風(fēng)險(xiǎn),也減少了后期改bug的工作量;
4. 把數(shù)十人的大team 分成幾個(gè)敏捷團(tuán)隊(duì),這幾個(gè)敏捷團(tuán)隊(duì)的Scrum Master/PO再組成一個(gè)更高一級(jí)的敏捷團(tuán)隊(duì),利用站會(huì),反思,看板等等敏捷元素,可以避免數(shù)十份郵件也不能解決一個(gè)小問題,大家互相踢皮球,溝通不暢的大企業(yè)?。?br /> 5. 老板可以是最大的PO,他給下面的高管講idea(User Story),定期檢查Demo,把控產(chǎn)品用戶體驗(yàn),負(fù)責(zé)和外界的溝通合作—–比如喬布斯,360的周鴻祎等;
二、為什么需要敏捷開發(fā)

@何明璐,IT領(lǐng)域,網(wǎng)名人月神話

用兩個(gè)詞吧,一個(gè)是擁抱變化,一個(gè)是進(jìn)度可視。

1.任何軟件類系統(tǒng)或項(xiàng)目,即使你前期花在需求上的時(shí)間足夠長(zhǎng),你也很難在需求階段真正的分析和挖掘出所有的需求。有些需求注定會(huì)在設(shè)計(jì)實(shí)現(xiàn)或用戶使用過程中才逐漸出現(xiàn)。要承認(rèn)軟件開發(fā)中存在這種不確定性。而瀑布模型將這種識(shí)別變化延遲到最好的測(cè)試或用戶使用階段才發(fā)現(xiàn),極大的增加了返工或變更成本。敏捷思想里面通過短周期迭代,盡可能早的交付可用的迭代版本來擁抱和適應(yīng)變化。

2.任何一個(gè)軟件項(xiàng)目,需求或設(shè)計(jì)做完我們并不清楚進(jìn)度是否真正完成了60%或者更多,任何不是經(jīng)過測(cè)試通過的功能我們都很難把握真正的完成進(jìn)度情況。因此在敏捷里面換了一種思路,如講這個(gè)項(xiàng)目拆分為100個(gè)粒度差不多的功能點(diǎn),如果有60個(gè)功能點(diǎn)全部完成并通過驗(yàn)證和測(cè)試,我們就比較有把握說整體進(jìn)度完成了60%。這種可視化的評(píng)估進(jìn)度模式在瀑布里面較難以做到。

(小編總結(jié):實(shí)際上,敏捷是一種思路,敏捷開發(fā)是一種實(shí)踐。適用于: 周期短,人員較少,早期需求變化頻繁,高風(fēng)險(xiǎn)的項(xiàng)目 ,不適用于: 行業(yè)需求較為固定,開發(fā)周期長(zhǎng),市場(chǎng)穩(wěn)定的項(xiàng)目;)
三、敏捷開發(fā)是否意味不用寫文檔

@何明璐,IT領(lǐng)域,網(wǎng)名人月神話

如果理解為敏捷開發(fā)后不用寫文檔是對(duì)敏捷開發(fā)很大的誤解。敏捷開發(fā)的重點(diǎn)是輕文檔,而不是不要文檔。而這種輕我原來也講過,對(duì)于全新的系統(tǒng)開發(fā)最好是在有總體方案或架構(gòu)后再開始輕。

對(duì)于怎么理解輕文檔,我建議你好好看下scrum里面的product backlog和sprint backlog。注意這就是文檔的一種形式,而且這種文檔包括了需求,業(yè)務(wù)場(chǎng)景,實(shí)現(xiàn)思路,驗(yàn)證和測(cè)試方法,估算等多個(gè)內(nèi)容的按user story的追溯。而不是按傳統(tǒng)軟件工程思路拆分為多個(gè)文檔。

@Blues,scrum sprinting

敏捷開發(fā)是重溝通,輕文檔。文檔要適度,既不能成為項(xiàng)目團(tuán)隊(duì)的累贅,也要出現(xiàn)爭(zhēng)議的時(shí)候有具可查。

先說需求文檔,分為兩部分,一方面是框架性的需求文檔,對(duì)功能、交互方式、出錯(cuò)或邊界情況的表現(xiàn)進(jìn)行總體描述,這種文檔不需要過于細(xì)致,因?yàn)楫a(chǎn)品經(jīng)理組織語言寫文檔,開發(fā)讀文檔,理解文檔都要消耗大量時(shí)間,最好是以總體概括的方式來做,開發(fā)在做需求設(shè)計(jì)時(shí)候與產(chǎn)品人員進(jìn)行頻繁密切溝通,最終一起形成完整文檔,這中間開發(fā)、測(cè)試人員對(duì)于文檔嚴(yán)謹(jǐn)性是有很大貢獻(xiàn),不必要求產(chǎn)品經(jīng)理全部把邊界細(xì)節(jié)都寫出來。

另外一方面,作為良好的協(xié)作習(xí)慣,任何溝通產(chǎn)生的結(jié)論都應(yīng)該存檔!郵件是一種比較好的形式。每次會(huì)議結(jié)束,問一句結(jié)論呢?誰出紀(jì)要?不是說文檔不重要,而是通過見面溝通,把需要文檔描述很細(xì)節(jié)的內(nèi)容達(dá)成共識(shí)。

概要設(shè)計(jì)詳細(xì)設(shè)計(jì),視需求邏輯難易,規(guī)模大小而定。邏輯復(fù)雜的項(xiàng)目,概要設(shè)計(jì)作為幫助開發(fā)理解需求的一種手段。大型項(xiàng)目,詳細(xì)設(shè)計(jì)架構(gòu)設(shè)計(jì)不可避免。一句話規(guī)模的需求,隨便做做就算了。這其中都要不斷的當(dāng)面溝通!前提是項(xiàng)目成員不能太死板,也有一定磨合,并能力較強(qiáng)。
四、敏捷開發(fā)如何實(shí)踐

@張碩,敏捷開發(fā)的尋路人

想一想我們做的項(xiàng)目有多少部分是做出來永遠(yuǎn)不會(huì)有人用的,交付出來到客戶那兒才發(fā)現(xiàn)根本不是客戶想要的,之后返工也好,客戶重啟項(xiàng)目也罷。
????? 只要付出了努力,卻沒能體現(xiàn)出相應(yīng)的價(jià)值,那就是浪費(fèi)。

敏捷宣言的那撥人我相信就是想著如何才能盡可能消除浪費(fèi),在湊在一起吃吃喝喝滑滑雪之后,總結(jié)出來了4條消除浪費(fèi)的方法:

  • 可工作的軟件》完備的文檔
  • 客戶協(xié)作》合同談判
  • 個(gè)體與互動(dòng)》流程和工具
  • 響應(yīng)變化》遵循計(jì)劃

畢竟宣言是需要落地和實(shí)施的,說得挺熱鬧的,但我們?cè)撊绾雾憫?yīng)變化,如何客戶協(xié)作,如何生產(chǎn)可工作的軟件,都是問題。
所以在統(tǒng)一了思想之后,接下來的實(shí)踐各有不同,scrum、精益就應(yīng)運(yùn)而生,我們采用迭代的方式響應(yīng)變化和增進(jìn)客戶協(xié)作,我們用持續(xù)交付持續(xù)生產(chǎn)可工作的軟件,我們用站會(huì)、看板來促進(jìn)個(gè)體與互動(dòng)。

上面說的東西都是改變生產(chǎn)關(guān)系層面的,生產(chǎn)力跟不上的話再好的生產(chǎn)關(guān)系都也是桎梏。比如我們的開發(fā)流程就是很長(zhǎng),大家代碼質(zhì)量不高,所以無法做到每個(gè)迭代結(jié)束后都能有所交付,我們代碼結(jié)構(gòu)不好,所以我們沒法做到快速響應(yīng)變化。

為了提高生產(chǎn)力,所以又應(yīng)運(yùn)而生了一些技術(shù)工程實(shí)踐:測(cè)試驅(qū)動(dòng)、領(lǐng)域驅(qū)動(dòng)、結(jié)對(duì)編程、持續(xù)集成、持續(xù)交付、重構(gòu)等等。以上每一點(diǎn)都大得可以寫一本書。

所以說,敏捷開發(fā)的核心思想就是消除浪費(fèi),讓我們付出的每一分努力都能有所價(jià)值,之后的敏捷宣言和各種流程框架是提出了一種新的生產(chǎn)關(guān)系,用來適應(yīng)大牛程序員們先進(jìn)的生產(chǎn)力,而如何提升生產(chǎn)力,又產(chǎn)生了很多技術(shù)工程實(shí)踐。這就是敏捷開發(fā)的體系。

本文由人人都是產(chǎn)品經(jīng)理@史蒂芬孫整理自知乎問答,轉(zhuǎn)載請(qǐng)注明出處并保留本文鏈接。

更多精彩內(nèi)容,請(qǐng)關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號(hào)或下載App
評(píng)論
評(píng)論請(qǐng)登錄
  1. 目前還沒評(píng)論,等你發(fā)揮!