所有敏捷團(tuán)隊(duì)的目標(biāo)都是一樣的:在每一個迭代結(jié)束的時候開發(fā)出一個潛在的可發(fā)布的產(chǎn)品。
有時候也會叫作潛在的可交付的產(chǎn)品來代替潛在的可發(fā)布產(chǎn)品。這個目標(biāo)的意圖是為了讓團(tuán)隊(duì)每幾個星期就能夠提供足夠好的產(chǎn)品交付到客戶手中。
但是到底什么是潛在的可發(fā)布產(chǎn)品呢?
僅僅因?yàn)樗赡鼙话l(fā)布并不代表它應(yīng)該發(fā)布。
首先我們要知道它被叫作潛在的可發(fā)布版本的原因是很重要的。通常要真正發(fā)布一個產(chǎn)品都是出于商業(yè)的考量。它通常由交付一個產(chǎn)品的更新的成本和用戶獲取更新的成本來驅(qū)動。
如果你們產(chǎn)品的發(fā)布是比較大規(guī)模的,你們不會每個迭代都進(jìn)行發(fā)布更新,而是選擇不那么頻繁的發(fā)布。例如:我們回到當(dāng)軟件產(chǎn)品還是通過CD來發(fā)行的年代,一年發(fā)布一次是很尋常的。發(fā)布的主要費(fèi)用是制造和郵寄這個大的產(chǎn)品的所有必需的CD。
同樣的,如果客戶獲得一個產(chǎn)品的新版本的時間成本或金錢成本很高,你也希望它不那么頻繁的發(fā)布。假設(shè)你買了一個最新款的IPhone,而一個星期后,Apple公司又發(fā)布了一款新的IPhone,并且一個星期后又發(fā)布一款,接著下個星期又發(fā)布一款。那么你肯定會很失望,因?yàn)閮H僅只過了幾個星期,你當(dāng)時買的IPhone就已經(jīng)落后了兩代了。
雖然什么時候發(fā)布產(chǎn)品是由商業(yè)因素決定。但是即使真正的產(chǎn)品發(fā)布不是很頻繁,你的團(tuán)隊(duì)每個迭代仍然應(yīng)該以潛在的可發(fā)布版本為目標(biāo)。
潛在的可發(fā)布產(chǎn)品的三個關(guān)鍵特征
為了讓產(chǎn)品可以成為一個潛在的可發(fā)布版本,改進(jìn)產(chǎn)品的新功能必須滿足下面三個條件:
- 高質(zhì)量的
- 經(jīng)過充分測試的
- 功能完整的
經(jīng)過充分測試
任何潛在的可發(fā)布版本都必須經(jīng)過充分的測試。并不是所有的產(chǎn)品都需要經(jīng)過同等級的測試--醫(yī)療管治設(shè)備的授權(quán)比紡織掃雷艦的網(wǎng)需要更多的測試。但是如果你們發(fā)布一個沒有經(jīng)過充分測試的產(chǎn)品時,你的顧客肯定不會高興。
高質(zhì)量的
除了經(jīng)過充分的測試外,研發(fā)團(tuán)隊(duì)必須修復(fù)足夠多的缺陷才能使用戶認(rèn)為你的產(chǎn)品是高質(zhì)量的產(chǎn)品。這并不表示每一個缺陷都需要修復(fù)。但團(tuán)隊(duì)修復(fù)缺陷至少要滿足缺陷管理政策中規(guī)定的嚴(yán)重等級及頻率。
功能完整的
為了使產(chǎn)品待辦事項(xiàng)都完成,與之相關(guān)的所有事情都必須包含在內(nèi)。例如,如果一個產(chǎn)品包含用戶手冊,那么用戶手冊必須是最新的。
但是潛在的可發(fā)布版本不必是緊密耦合的
那么被認(rèn)為是潛在的可發(fā)布版本,產(chǎn)品的更新必須是高質(zhì)量的,經(jīng)過充分測試的,并且是功能完整的。但是并不意味著是一個緊密耦合的功能集合。
請記住創(chuàng)建一個潛在的可發(fā)布產(chǎn)品不并意味著你必須每個迭代都發(fā)布它。意思是在正式發(fā)布前包含在發(fā)布列表中的功能可以在早期的迭代中被忽略。
例如,你可能不會發(fā)布一個只允許用戶登錄但不允許用戶退出的系統(tǒng)。不過只有登錄功能,沒有退出功能也可以是潛在的可發(fā)布版本,只要能滿足上面三點(diǎn)要求。
一個潛在的可發(fā)布版本就是將他所做的事情做好。但是它并不需要做所有的事情。這正是迭代和增量開發(fā)的要點(diǎn):從一個初始版本開始開發(fā),然后不斷的改進(jìn),不斷添加新的特性,使它更完善。
如果你在一些迭代中不能交付潛在的可發(fā)布版本,那么會發(fā)些什么呢?
如果在一個迭代結(jié)束時未能交付一個潛在的可發(fā)布版本,那么敏捷團(tuán)隊(duì)?wèi)?yīng)該做些什么?
這取決于敏捷團(tuán)隊(duì)是在迭代剛開始時判定的(例如,在做敏捷計(jì)劃會議中)或者在迭代已經(jīng)進(jìn)行的時候發(fā)現(xiàn)的。
如果你是在沖刺計(jì)劃會議中發(fā)現(xiàn)的
如果沖刺計(jì)劃會議中敏捷團(tuán)隊(duì)判定這一個迭代不能交付潛在的可發(fā)布版本,那么團(tuán)隊(duì)成員應(yīng)該考慮將一些功能從這個迭代中放棄。與其做7個功能點(diǎn)而不能達(dá)到可交付狀態(tài),還不如改為做6個功能點(diǎn)卻能完全交付。
有些時候,不管團(tuán)隊(duì)從計(jì)劃中放棄哪些工作他們都判定他們無法達(dá)到可交付目標(biāo)。大部分時候是由于團(tuán)隊(duì)沒什么經(jīng)驗(yàn),但有些時候可能也是因?yàn)槟切┕ぷ鞔_實(shí)是不能分割的。
如果你發(fā)現(xiàn)你們和這個情況一樣,在你們要放棄可交付版本的目標(biāo)前再努力一把。然后再接受現(xiàn)實(shí),你們確實(shí)不能像計(jì)劃中那樣完成可交付的目標(biāo)。
如果你確實(shí)做不到,那么你真的是做不到。但至少在放棄之前努力(再努力)。
最后,有一些些內(nèi)疚,因此你也不會經(jīng)常這樣做。
如果你是在迭代過程中發(fā)現(xiàn)的
如果團(tuán)隊(duì)在迭代過程中發(fā)現(xiàn)他們將無法交付一個潛在的可發(fā)布版本,那么團(tuán)隊(duì)成員最好的方法就是討論一下為了可以交付一個可發(fā)布版本,你們可以放棄哪個功能。
通常情況下,為了讓我們成功交付版本有些用戶故事可以部分實(shí)現(xiàn)或者被從這個迭代中移除。這里大家要記住交付一個潛在的可發(fā)行版本不一定要交付一組緊密耦合的功能的。
成為潛在的可發(fā)布版本是一種好的習(xí)慣
以我的經(jīng)驗(yàn)來看,盡可能經(jīng)常地達(dá)到潛在的可發(fā)布版本對于敏捷團(tuán)隊(duì)來說是一個很好的習(xí)慣。那些不能達(dá)到這個標(biāo)準(zhǔn)的團(tuán)隊(duì)常常開始頻繁的與可交付版本失之交臂,或者在很長一段時間內(nèi)都將是這樣。
就像我已經(jīng)指出的,團(tuán)隊(duì)可能有一些迭代并不能達(dá)到潛在的可發(fā)布版本。但當(dāng)團(tuán)隊(duì)一次兩次甚至更多的迭代都沒法交付的話,那么團(tuán)隊(duì)就會離真正的交付目標(biāo)越來越遠(yuǎn)。
這不僅僅意味著團(tuán)隊(duì)跟他們實(shí)際的交付能力交付相比,團(tuán)隊(duì)可能會交付更少的價值,而且讓團(tuán)隊(duì)更難評估要將產(chǎn)品待交付項(xiàng)成功交付到底要花多少的功夫。