技術(shù)項(xiàng)目走向失敗的五條“捷徑”oschina 發(fā)布于: 2014年01月23日 技術(shù)項(xiàng)目的失敗,屢見(jiàn)不鮮。不論你運(yùn)營(yíng)的是一個(gè)持續(xù)跟進(jìn)一些項(xiàng)目的軟件公司,還是一個(gè)需要顧問(wèn)來(lái)為你提供系統(tǒng)集成的非技術(shù)公司,你都有可能遭遇這個(gè) 問(wèn)題。進(jìn)度延期、預(yù)算瘋漲、直至最后完全失敗,這在軟件世界非常普遍。事實(shí)上,一個(gè)項(xiàng)目延期數(shù)年,超支數(shù)百萬(wàn),已經(jīng)不是新鮮事了。 例如,在2003年,我飛去洛杉磯出席微軟為軟件開(kāi)發(fā)者舉辦的其中一個(gè)會(huì)議?;顒?dòng)中,微軟發(fā)表了激動(dòng)人心的消息:下一個(gè)版本的windows將會(huì)帶 來(lái)一些革命性的新功能。回顧我的筆記,其中有一個(gè)新功能叫做WinFS。具體細(xì)節(jié)不講,簡(jiǎn)單來(lái)說(shuō),WinFS建議將操作系統(tǒng)的文件系統(tǒng)功能(文件和文件夾 的位置信息)和數(shù)據(jù)庫(kù)功能(個(gè)人對(duì)文件的描述信息)合而為一,放進(jìn)一個(gè)又大又邪惡的“文件數(shù)據(jù)庫(kù)混合體”。 這是一個(gè)挺有野心的動(dòng)作。從技術(shù)上來(lái)說(shuō),WinFS約等于重新安排一個(gè)國(guó)家的交通系統(tǒng),以適應(yīng)會(huì)飛的汽車(chē)。是的,這樣會(huì)使航空公司停業(yè)。同樣,所有車(chē)庫(kù)也要變寬來(lái)適應(yīng)帶翼的車(chē)子。但先別想太遠(yuǎn),還是讓這功能在一年或最多兩年內(nèi)面世再說(shuō)吧。 三年過(guò)去了。一個(gè)叫Quentin Clark的微軟經(jīng)理在博客里說(shuō)道,WinFS根本不能準(zhǔn)時(shí)面世,并且它阻礙了微軟推出其最新的操作系統(tǒng)。因此這個(gè)功能要延期,或者放到以后版本的數(shù)據(jù)庫(kù) 上,這意味著沒(méi)有了“將文件系統(tǒng)與數(shù)據(jù)庫(kù)系統(tǒng)合而為一”這唯一的亮點(diǎn)。有鑒于此,你怎么知道你某個(gè)技術(shù)項(xiàng)目哪一天會(huì)注定成為另一個(gè)WinFS?這里我有五 步指引來(lái)確證一個(gè)軟件的失?。?/p> 錯(cuò)誤一:采用平庸的開(kāi)發(fā)團(tuán)隊(duì) 軟件設(shè)計(jì)是有難度的,而且不幸的是,很多自稱(chēng)程序員的人確實(shí)不能勝任軟件設(shè)計(jì)。盡管這是項(xiàng)目失敗的首要原因,你也不曾從官方的失敗報(bào)告中得知。在所 有的行業(yè),軟件業(yè),物流業(yè),或者客服業(yè),人們對(duì)同事的無(wú)能都太過(guò)寬容。你從來(lái)都不會(huì)聽(tīng)到有人說(shuō)“我們團(tuán)隊(duì)沒(méi)有足夠的智慧來(lái)完成這件事”。為什么要這樣傷人 的心呢?顯而易見(jiàn)的,如果這隊(duì)分得了任務(wù)的人員并不擅長(zhǎng)這份工作,他們的工作會(huì)日復(fù)一日,日復(fù)一日……等等……但軟件卻沒(méi)有做出來(lái)。你也不用太擔(dān)心HR會(huì) 阻撓你招聘一班廢物。在大多數(shù)的案例里,我向你保證,HR對(duì)此毫無(wú)建樹(shù)。 錯(cuò)誤二:按周來(lái)定目標(biāo) 假設(shè)你想改造你的廚房。你請(qǐng)來(lái)的師傅已經(jīng)搞過(guò)很多廚房,而且不作詳細(xì)藍(lán)圖就能估算出這項(xiàng)工作的成本。但軟件開(kāi)發(fā)者是在制造前所未有的東西。如果前所 已有,他賣(mài)張拷貝的光盤(pán)給你就行了。因此,粗略的估計(jì)是不可能的。他們需要在寫(xiě)代碼之前做好詳盡的計(jì)劃。無(wú)論你是客戶還是開(kāi)發(fā)經(jīng)理,你的責(zé)任就是確保開(kāi)發(fā) 人員帶著詳盡計(jì)劃來(lái)開(kāi)展工作。當(dāng)你向開(kāi)發(fā)人員詢問(wèn)計(jì)劃時(shí),他們大多數(shù)人可能只會(huì)給你一份把進(jìn)度按周來(lái)劃分的時(shí)間表。這看似非常合理,但其實(shí)不然。如果你讓 軟件團(tuán)隊(duì)提交一份大粒度的時(shí)間表(大是指需要兩天以上的工作),那么你可以認(rèn)定他們沒(méi)有考慮到所有需要實(shí)現(xiàn)的細(xì)節(jié),而這些細(xì)節(jié)將會(huì)積累,導(dǎo)致延期。 錯(cuò)誤三:為截止時(shí)間而談判 還有什么比按周劃分軟件項(xiàng)目更糟糕?就是要求團(tuán)隊(duì)承諾大大地提早完成工作。根據(jù)我的經(jīng)驗(yàn),大多數(shù)開(kāi)發(fā)者都會(huì)樂(lè)觀地接受你的暗示并參與討價(jià)還價(jià)。然后你會(huì)得到一份友好的協(xié)定時(shí)間表,但卻無(wú)法按時(shí)執(zhí)行。 試想以下情況:海象媽媽會(huì)在懷孕15到16個(gè)月后,生出小海象。你可能會(huì)叫海象媽媽保證在15個(gè)月內(nèi)做到,而她也說(shuō)沒(méi)問(wèn)題。或者你說(shuō),“15個(gè)月? 瘋了吧?我們要在8個(gè)月內(nèi)生出”。當(dāng)然,這樣談判是無(wú)法促進(jìn)事成的,而且即使得到一份8個(gè)月的進(jìn)度表,我還是告訴你一個(gè)小秘密:這是不可能實(shí)現(xiàn)的。你可以 取得一份11個(gè)月的時(shí)間表,但你還是要等15個(gè)月,因?yàn)樾『O缶褪且?5個(gè)月才能出產(chǎn),有時(shí)甚至16個(gè)月。 錯(cuò)誤四:均分任務(wù) 這里有一個(gè)破壞項(xiàng)目的好方法。列出人們需要做的所有工作,然后給重新均分給各人。如果Mary有太多的工作,就分一些給John。這聽(tīng)起來(lái)完全合 理,使得你不會(huì)被質(zhì)疑。但我向你保證,時(shí)間一長(zhǎng)肯定會(huì)出現(xiàn)問(wèn)題。那是因?yàn)楫?dāng)一個(gè)開(kāi)發(fā)者去替代另一個(gè)時(shí),我們有理由假設(shè)效率降為十分之一。John將會(huì)花費(fèi) 無(wú)數(shù)小時(shí)去搞清楚Mary其實(shí)已經(jīng)熟悉的那部分代碼。而且John改bug也不及Mary快,因?yàn)镸ary才了解所有的陷阱在哪里。 錯(cuò)誤五:工作到深夜 讓我們假設(shè)有個(gè)項(xiàng)目要每周工作40小時(shí),連續(xù)六個(gè)月才能完成。如果你讓所有人每周工作60小時(shí),那么持續(xù)四個(gè)月就能完全搞定。軟件團(tuán)隊(duì)可能甚至?xí)?受這個(gè)挑戰(zhàn),因?yàn)檫@使他們看上去像英雄(那個(gè)海象隊(duì)有多厲害?他們每個(gè)周末都來(lái)工作!)這能行的,是吧?再想想吧。有一部完整的文獻(xiàn)論述了“加班不會(huì)使軟 件更快產(chǎn)出”。Edward Yourdon,作為軟件企業(yè)家和該文獻(xiàn)的作者,稱(chēng)這種項(xiàng)目為“死亡行軍”。 軟件開(kāi)發(fā)者花費(fèi)大量的腦力勞動(dòng)。即使是最好的程序員,也很少有能堅(jiān)持幾小時(shí)以上的高強(qiáng)度腦力勞動(dòng)。另外,他們還需要休息一下大腦。這就是為什么你好像總能撞到他們?cè)谏暇W(wǎng)或玩游戲。 強(qiáng)迫他們投入更長(zhǎng)時(shí)間坐在電腦前,并不會(huì)轉(zhuǎn)化為更多的產(chǎn)出——即使會(huì),那都將是劣質(zhì)的產(chǎn)品。當(dāng)軟件開(kāi)發(fā)者的大腦完全發(fā)燒,他們幾乎做錯(cuò)多過(guò)做對(duì),寫(xiě) 出無(wú)法使用的代碼,或者引入大量的bug。而如果你真的禁止他們上網(wǎng),玩多人游戲,強(qiáng)迫他們?cè)谡5乃邥r(shí)間繼續(xù)寫(xiě)代碼,好吧,他們可能會(huì)開(kāi)始離你而去。 死亡行軍不是造成項(xiàng)目延期和預(yù)算爆炸的唯一條件,但絕對(duì)是充分條件。 如果以上是使你項(xiàng)目失敗的方法匯總,那么怎樣做到萬(wàn)無(wú)一失呢?首先,你要招聘一個(gè)巨星級(jí)人馬。在Fog Creek,對(duì)于一個(gè)全職崗位,我們傾向于審核大約400個(gè)候選人。因?yàn)?a title="《一些鮮為人知的編程真相》" href="http://blog./334/" target="_blank" style="margin: 0px; padding: 0px; color: rgb(62, 98, 166); outline: 0px;">最優(yōu)秀的開(kāi)發(fā)者擁有十倍于“一般優(yōu)秀”的創(chuàng)造力。 其次,讓開(kāi)發(fā)者給出細(xì)粒度的時(shí)間預(yù)算。是的,讓開(kāi)發(fā)者去預(yù)估制作一個(gè)新應(yīng)用需要花多長(zhǎng)時(shí)間,是不容易的(文章1、文章2)。這就是為什么他們要在每個(gè)項(xiàng)目之前作出可靠的藍(lán)圖。 一旦你有時(shí)間表在手,不要嘗試提前截止日期。如果項(xiàng)目不能在你能諒解的時(shí)間內(nèi)完成,解決方法不應(yīng)是去交涉一個(gè)“好聽(tīng)的”時(shí)間表,而應(yīng)該是爭(zhēng)取更多資源,或者推遲上線,或者拿掉一些功能。 當(dāng)項(xiàng)目正在進(jìn)行時(shí),你會(huì)多次被誘導(dǎo)而想重新分配工作。但你要謹(jǐn)慎地重分配。所換的新人需要花不少時(shí)間去駕馭原作者的代碼。我覺(jué)得讓人員在不同崗位上 輪換有助于消除不可替代性,但我是謹(jǐn)慎地安排這事,并且在時(shí)間表里加入額外的三周給新人以學(xué)習(xí)新代碼,和額外的一周給舊人去教新人。 最后,鼓勵(lì)你的員工按合理的工時(shí),一周干40小時(shí)。我是說(shuō)真的。除了偶爾為截止日期而沖刺,我們?cè)贔og Creek都是一天8小時(shí)工作制。在技術(shù)的世界里,應(yīng)該將一個(gè)大項(xiàng)目看成是一次馬拉松,而非一次短跑。 注:Joel Spolsky是紐約市Fog Creek的聯(lián)合創(chuàng)始人兼CEO,并且是熱門(mén)博客“Joel on software”的主人。英文原文最后更新于 2007 年 11 月 1 日。 原文鏈接: Joel Spolsky 翻譯: 伯樂(lè)在線 - unblock |
|