導(dǎo)致你的敏捷開(kāi)發(fā)項(xiàng)目失敗的5個(gè)原因
太多的敏捷開(kāi)發(fā)項(xiàng)目失敗。這很難甚至精確地測(cè)量這么多的軟件開(kāi)發(fā)項(xiàng)目失敗的次數(shù),因?yàn)樽罱K“完成”和發(fā)布,即便:
- 他們花了足夠長(zhǎng)的時(shí)間來(lái)構(gòu)建
- 構(gòu)建的質(zhì)量很差
- 構(gòu)建的產(chǎn)品不是客戶(hù)所期望的的
- 構(gòu)建的成本大大超出預(yù)期
多年來(lái),我在多個(gè)不同的敏捷開(kāi)發(fā)團(tuán)隊(duì)工作過(guò),同時(shí)也為一些敏捷開(kāi)發(fā)提供咨詢(xún)和培訓(xùn)。在這期間,我發(fā)現(xiàn)5個(gè)共同的問(wèn)題,如果這些問(wèn)題不被解決,就很可能會(huì)導(dǎo)致項(xiàng)目失敗。
1. 不是產(chǎn)品所有者
所有的事情,都可能會(huì)導(dǎo)致一個(gè)敏捷軟件項(xiàng)目的失敗,而不是一個(gè)正在開(kāi)發(fā)的產(chǎn)品 的最終的決策者的人,是確保其(產(chǎn)品)消亡最快的方式。
如果你追隨Scrum的,沒(méi)關(guān)系,只管做你自己的Kanban style project 項(xiàng)目或者別的事;如果你想你的項(xiàng)目能取得成功,你需要能一個(gè)能多所開(kāi)發(fā)的產(chǎn)品設(shè)定方向和做決定的人。
想想要改造一個(gè)廚房。如果你聘請(qǐng)了一堆的承建商進(jìn)來(lái),做各種各樣的工作,如:管道,木工,地板等,但你沒(méi)有一個(gè)人來(lái)決定實(shí)際完成的廚房看起來(lái)應(yīng)該像什么樣,最終你將會(huì)得到一個(gè)亂七八糟的廚房。
少有的幾個(gè)承建商可能會(huì)足夠的聰明的,能找到正確的人以詢(xún)問(wèn)應(yīng)該做什么,但設(shè)計(jì)一個(gè)廚房需要的不僅僅是隨意的決定櫥柜放哪兒,而是需要更多。你需要的是有人能真正的提出符合實(shí)際的設(shè)計(jì)和愿景,并隨著工程的不斷推進(jìn)能對(duì)愿景進(jìn)行糾正,以避免問(wèn)題的發(fā)生。
話費(fèi)大量錢(qián)財(cái)重建你的廚房,看起來(lái)相當(dāng)瘋狂,但不想在設(shè)計(jì)成品或者雇傭人員上投資任何時(shí)間和努力,已完成該項(xiàng)工程。
當(dāng)然,日復(fù)一日,我在軟件項(xiàng)目中的確看到很多這樣的行為。我看見(jiàn)很多公司在敏捷開(kāi)發(fā)上花費(fèi)了大量的金錢(qián),但并不會(huì)委任任何人成為正在建設(shè)的項(xiàng)目的真正的主人,并為它設(shè)置愿景。
2.沒(méi)有迭代
迭代是敏捷開(kāi)發(fā)給軟件開(kāi)發(fā)世界帶來(lái)的關(guān)鍵價(jià)值之一。
但什么是迭代呢?
你可能會(huì)認(rèn)為,這意味著將你的項(xiàng)目分成兩個(gè)短周期或者迭代周期。雖然這樣做可以促進(jìn)迭代開(kāi)發(fā),這并不意味著你是在使用迭代。
感到困惑了吧?下面就讓我們揭秘吧:
迭代的關(guān)鍵是在時(shí)間范圍內(nèi),一點(diǎn)點(diǎn)的開(kāi)發(fā)一個(gè)產(chǎn)品。這將準(zhǔn)確的,作為一個(gè)產(chǎn)品的演進(jìn)來(lái)描述迭代過(guò)程中的商品。
無(wú)論你是否相信宏觀進(jìn)化,微進(jìn)化,或適應(yīng)性是否是一個(gè)成熟的概念。進(jìn)化背后的想法是事情隨著時(shí)間的推移逐漸被改變。由量變到質(zhì)變。
試想一下,如果進(jìn)化論是最“敏捷”軟件內(nèi)置的方式工作,這將是多么的愚蠢。
試想一下,如果你是一條在大洋中游動(dòng)的魚(yú),并有一些自己的在出生時(shí)就有功能健全的腿的魚(yú)寶寶。然后,那些有腿的魚(yú)寶寶長(zhǎng)大了,然后又有翅膀的魚(yú)寶寶。
也許腿和翅膀并不會(huì)讓魚(yú)能活的更好,也沒(méi)有被恰當(dāng)?shù)脑O(shè)計(jì),因?yàn)橥群统岚虻某霈F(xiàn),不是隨著時(shí)間的推移因適應(yīng)所做的改變,而是突然出現(xiàn)。
產(chǎn)品功能不應(yīng)該以單一的短周期或迭代來(lái)建立。好比在單一的一代魚(yú)的身上出現(xiàn)退一樣愚蠢。
反之,功能應(yīng)該隨著時(shí)間的推移和進(jìn)化。某種功能不應(yīng)被放入到某種單一的短周期或迭代,然后去實(shí)現(xiàn)。一種功能應(yīng)該從小規(guī)模開(kāi)始,并隨著時(shí)間的推移進(jìn)行進(jìn)化和開(kāi)發(fā)收到反饋,客戶(hù)或者產(chǎn)品所有者試圖將其開(kāi)發(fā)出來(lái)。
太多的時(shí)候,我看到敏捷開(kāi)發(fā)的項(xiàng)目進(jìn)行了錯(cuò)誤迭代和迭代開(kāi)發(fā)產(chǎn)品。
不要試圖發(fā)送一次完成的功能,而是讓它隨著時(shí)間的推移來(lái)完成。
3.沒(méi)有將事物分解的足夠小
對(duì)于將事物分解成小的、易接受的塊,我是堅(jiān)定支持者。
為什么如此重要的一個(gè)主要原因,是這樣做可以避免延期。
延期經(jīng)常發(fā)生在當(dāng)我們對(duì)大型的可能困難的任務(wù)感到畏懼的時(shí)候,或者我們不知道接下來(lái)該做什么的時(shí)候。
如果你能將大項(xiàng)目分成很多小塊,這將使項(xiàng)目看起來(lái)很容易完成,并有一個(gè)明確進(jìn)展步驟。
我經(jīng)常看到,沒(méi)有給之前的軟件項(xiàng)目考慮足夠的工作,人為的創(chuàng)造了積壓工作或工作項(xiàng)目。
我創(chuàng)造了一個(gè)長(zhǎng)期的積壓類(lèi)型:fatlogs。Fatlogs積壓沒(méi)有分解成足夠小,并且經(jīng)常對(duì)于要完成什么非常模糊。
當(dāng)試著理解和解釋他們的時(shí)候,F(xiàn)atlogs是出了名的難以估算和浪費(fèi)時(shí)間。關(guān)鍵是fatlogs被分解成更小的可操作的積壓工作給敏捷開(kāi)發(fā)團(tuán)隊(duì)或大量的時(shí)間將被浪費(fèi)。
很多時(shí)候,我發(fā)現(xiàn)fatlog 的創(chuàng)造者可以很容易的將工作分成小的易于解釋和理解的積壓工作,即使對(duì)于軟件開(kāi)發(fā)知之甚少。
我時(shí)常建議敏捷開(kāi)發(fā)團(tuán)隊(duì),他們應(yīng)該徹底拒絕fatlogs 并將其送回到某條鏈上。
如果你不能花足夠的時(shí)間來(lái)清楚地說(shuō)明你想要什么,那么它就沒(méi)那么重要。但這也不足以豁免開(kāi)發(fā)團(tuán)隊(duì)。 開(kāi)發(fā)團(tuán)隊(duì)?wèi)?yīng)該將他們得到的任何積壓工作分解成小塊任務(wù)。
4.沒(méi)有設(shè)置標(biāo)準(zhǔn)
當(dāng)你訂一塊牛排的時(shí)候,服務(wù)生問(wèn)你的第一件事是什么?
顯而易見(jiàn),他們問(wèn)你你想如何完成它。
如果廚師不知道你想要完成的牛排的制作標(biāo)準(zhǔn),廚師就必須決定他或她的制作標(biāo)準(zhǔn)是什么。
你可會(huì)得到一個(gè)完美的牛排,或者一個(gè)讓你難以置信的牛排,或者介于兩者之間,完全取決于為你烤制牛排的人。
這不是一個(gè)烤制牛排的好方式,同樣也不是制作軟件的好方式。
在大多數(shù)軟件項(xiàng)目中,我經(jīng)常遭遇到大量的在烤制時(shí)沒(méi)有定義的牛排。積壓工作當(dāng)時(shí)間耗盡的時(shí)候,經(jīng)常被“做”。
對(duì)于一個(gè)敏捷開(kāi)發(fā)團(tuán)隊(duì),做任何積壓工作有一個(gè)明確的標(biāo)準(zhǔn)是相當(dāng)重要的。
這意味著,產(chǎn)品所有者應(yīng)該定義一些可接受性測(cè)試。測(cè)試是手動(dòng)測(cè)試還是全自動(dòng)測(cè)試沒(méi)有關(guān)系,與團(tuán)隊(duì)指定的標(biāo)準(zhǔn)是否能達(dá)到其測(cè)試目標(biāo)有關(guān)。
缺乏標(biāo)準(zhǔn),好比父母對(duì)孩子所提的問(wèn)題“我應(yīng)該吃多少豆子?”時(shí)所做的回答:“吃飽就行”一樣。
沒(méi)有制定標(biāo)準(zhǔn)會(huì)導(dǎo)致負(fù)面情緒,并為什么在手指指向的方向沒(méi)有做正確的事。
我發(fā)現(xiàn),如果你詳細(xì)的告訴某人你對(duì)他的期望是什么以及評(píng)判的標(biāo)準(zhǔn)是什么,你將會(huì)比僅僅分配給他們?nèi)蝿?wù)得到更好的結(jié)果,牽著他們的鼻子說(shuō),“好好干。”
5.不要為了團(tuán)隊(duì)而建立團(tuán)隊(duì)
團(tuán)隊(duì)是一個(gè)奇怪的組織,特別是敏捷團(tuán)隊(duì)。
有很多的變數(shù),會(huì)影響到團(tuán)隊(duì)的行為和交互。有太多的方式組建一個(gè)健康的團(tuán)隊(duì),亦有很多方式創(chuàng)建很爛的團(tuán)隊(duì)。
一個(gè)健康積極的團(tuán)隊(duì)具有協(xié)同作用,一個(gè)不健康的消極團(tuán)隊(duì)比其團(tuán)隊(duì)成員各干各的好不了多少。
關(guān)鍵是有一個(gè)健康的團(tuán)隊(duì),能讓每個(gè)團(tuán)隊(duì)成員都變得很自主。無(wú)論你的政見(jiàn)如何,你也許會(huì)同意以下觀點(diǎn),當(dāng)一個(gè)國(guó)家入侵另一個(gè)國(guó)家,并建立了一個(gè)并非由公民選舉的政府來(lái)管理人民,肯定有問(wèn)題的。
同樣的問(wèn)題發(fā)生在敏捷開(kāi)發(fā)過(guò)程中。
我并不是說(shuō)團(tuán)隊(duì)不應(yīng)該有責(zé)任制。但如果你想以敏捷的方式管理一個(gè)軟件項(xiàng)目,你必須讓團(tuán)隊(duì)在達(dá)成共識(shí)的基礎(chǔ)上自我組織以及自我管理。
當(dāng)團(tuán)隊(duì)老大總是監(jiān)督和干擾的話,團(tuán)隊(duì)互動(dòng)變得非常困難。
自然而然的,團(tuán)隊(duì)時(shí)常有他們自己的開(kāi)發(fā)節(jié)奏,領(lǐng)導(dǎo)力和角色(稱(chēng)之為準(zhǔn)則)。
然而,當(dāng)外部力量直接干擾團(tuán)隊(duì)工作時(shí),他們沒(méi)有權(quán)力決定他們自己的命運(yùn),團(tuán)隊(duì)成員就會(huì)開(kāi)始意識(shí)到他們需要好自為之。
額外的敏捷開(kāi)發(fā)資源
我發(fā)現(xiàn)在這些議題中發(fā)現(xiàn)好的資源是相當(dāng)困難的,但這里有一些書(shū),我發(fā)現(xiàn)了一些和我上面描述的有用的期刊的地址。
- Succeeding with Agile: Software Development Using Scrum-這本書(shū)專(zhuān)注于Scrum 但它同樣適用于不同種類(lèi)的敏捷項(xiàng)目。 Mike Cohn和我時(shí)常在大部分敏捷主題上達(dá)成一致。
- Agile Retrospectives-我發(fā)現(xiàn)這本書(shū)對(duì)于團(tuán)隊(duì)回顧能得到啟發(fā),這些想法將真正有助于打破障礙,幫助團(tuán)隊(duì)解決他們自身遇到的問(wèn)題。
- Scrumban 和 Kanban and Scrum - 兩本書(shū)都提供了豐富的信息,關(guān)于combining Scrum and Kanban以及對(duì)于解決上述提到的問(wèn)題,提供了好的解決方案。
你認(rèn)為如何?我錯(cuò)過(guò)了任何的敏捷項(xiàng)目真兇?與他們打交道的任何有用的提示?
讓我們從下面的評(píng)論中尋找答案。
英文原文:5 Things That Will Make Your Agile Development Project FAIL
譯文連接:http://www.oschina.net/translate/5-agile-development-failure-signs