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