軟件開發(fā)過程管理被比作一只自由放養(yǎng)的貓。換句話說,你不可能真的做到這一點(diǎn),但你可以盡力去做。換句話說,軟件項(xiàng)目就像試圖在NBA防守勒布朗·詹姆斯。你根本無法阻止他,你最多只能想約束他。

軟件項(xiàng)目的開發(fā)和管理是一門不準(zhǔn)確的科學(xué),這不是秘密。以下是我多年來學(xué)到的11個(gè)真理,它們幫助我理解我們管理軟件開發(fā)項(xiàng)目的能力是多么有限。
1.估計(jì)總是錯(cuò)誤的。
無論你花一個(gè)小時(shí)還是一年的時(shí)間來估計(jì),估計(jì)結(jié)果都是錯(cuò)誤的。事情就是這樣。結(jié)果不一定是非常不同的。也許只是一點(diǎn)點(diǎn)錯(cuò)誤,但一定是錯(cuò)的。
如果你看到一個(gè)錯(cuò)誤的報(bào)告,認(rèn)為修復(fù)它需要一個(gè)小時(shí),幾乎可以肯定的是,它不僅僅需要一個(gè)小時(shí)。這可能需要45分鐘或3小時(shí),但只需一小時(shí),甚至一兩分鐘?,F(xiàn)在,你可能會(huì)說,大約一個(gè)小時(shí)。這實(shí)際上是一個(gè)更好的估計(jì),因?yàn)榫唧w和準(zhǔn)確的估計(jì)是錯(cuò)誤的。
目前,對于一個(gè)可能只需要一個(gè)小時(shí)的短項(xiàng)目來說,這不是什么大問題。但是...
2.項(xiàng)目越大,你的估計(jì)就越不準(zhǔn)確。
項(xiàng)目越大,估計(jì)就越不準(zhǔn)確,尤其是在項(xiàng)目開始時(shí)。就像上面一個(gè)小時(shí)的估計(jì)一樣,如果你把一個(gè)項(xiàng)目估計(jì)為一年,可能需要9個(gè)月或36個(gè)月。在某些情況下,它甚至可能需要五年時(shí)間。沒有辦法知道這個(gè)項(xiàng)目是什么時(shí)候開始的。
項(xiàng)目越大,未知就越多。通常,項(xiàng)目越大,參與的人就越多。換句話說,隨著項(xiàng)目規(guī)模的增加,會(huì)有更多的變量和更多的事情發(fā)生,這是你根本無法預(yù)測的。所有這些事情都會(huì)增加項(xiàng)目的時(shí)間,你一開始就不會(huì)在計(jì)劃中。原因很明顯。你不知道它們會(huì)發(fā)生。
3.注意力和注意力是我們最珍貴、最稀缺的東西。
在構(gòu)建軟件時(shí),完成一個(gè)項(xiàng)目所需要的最有價(jià)值的事情之一就是團(tuán)隊(duì)中的開發(fā)人員能夠集中精力而不受干擾。
分心的事情越少,團(tuán)隊(duì)的效率就越高。就是這么簡單。軟件開發(fā)經(jīng)理的主要職責(zé)之一是減少團(tuán)隊(duì)分心的次數(shù)和持續(xù)時(shí)間。
當(dāng)軟件開發(fā)人員不受干擾時(shí),他們的工作效率很高。當(dāng)他們被打斷時(shí)(無論是因?yàn)闀?huì)議、問題還是其他事情),他們很快就會(huì)失去工作效率。我們都知道心流,我們都知道進(jìn)入和維持心流狀態(tài)有多困難。流動(dòng)的時(shí)間和黃金一樣寶貴,應(yīng)該得到保護(hù)。
4.霍夫斯塔德定律是真理。
這是霍夫施塔特定律:
即使你考慮到霍夫施塔特定律,項(xiàng)目的實(shí)際完成時(shí)間總是比預(yù)期的要長。-維基百科。
這與估計(jì)有關(guān),但值得注意的是這句格言的美。你可以假裝報(bào)告你的估計(jì),因?yàn)槟阏J(rèn)為這可以為你贏得完成任務(wù)的時(shí)間。你可以添加額外的因素計(jì)劃中制定未知和未知因素,并增加你的估計(jì)??紤]到實(shí)際時(shí)間會(huì)比你想象的要長,但最終,完成一個(gè)項(xiàng)目的時(shí)間仍然會(huì)比你想象的要長。
5.不能加快軟件開發(fā),只能限制軟件開發(fā)的速度。
對于一些管理者來說,這個(gè)真理真的很難理解。軟件需要盡可能長的時(shí)間。沒有辦法讓它變得更快。你可以要求團(tuán)隊(duì)投入更多的時(shí)間。你可以揮舞鞭子,拿起棍子。你可以乞求、哄騙和乞求開發(fā)人員。你可以說,但是,這應(yīng)該只需要三個(gè)月!但最終,從長遠(yuǎn)來看,你無法提高軟件開發(fā)團(tuán)隊(duì)的速度。
如果你開始意識(shí)到霍夫斯塔德定律的正確性,并認(rèn)為我可以讓這些人工作得更快,那么你就錯(cuò)了。你所能做的就是減少他們的干擾,讓他們獨(dú)立工作,防止他們降低工作速度。這種差異很微妙,但很重要。
6.你只能在很短的時(shí)間內(nèi)出現(xiàn)赤字。
同樣,你可以要求團(tuán)隊(duì)投入更多的時(shí)間,熬夜,周末加班,以及各種鞭打手段,你可能會(huì)從中獲得一些(非常)短期收益。
但是如果你試圖讓它正常,如果你試圖讓團(tuán)隊(duì)的發(fā)動(dòng)機(jī)一直在RPM的紅線上運(yùn)行,它就會(huì)被燒壞。很快,你就會(huì)看到收下降。人們,就像賽車上的發(fā)動(dòng)機(jī)一樣,不能長時(shí)間承受太多的壓力,否則就會(huì)失敗。
7.大腦時(shí)間比屁股時(shí)間更重要。
沒有什么比要求工作時(shí)間更能降低生產(chǎn)力了(例如,你的開發(fā)人員必須連續(xù)幾個(gè)小時(shí)坐在椅子上)。你可以衡量你的工作時(shí)間,并感覺到一個(gè)指標(biāo)可以真正顯示人們的工作效率。但這是錯(cuò)誤的。要求工作時(shí)間只會(huì)降低團(tuán)隊(duì)的士氣,因?yàn)樗麄儗?shí)際上想把時(shí)間花在思考上。
大腦時(shí)間是最重要的。你這樣想:假設(shè)你是一名經(jīng)理,對你來說最重要的是看到團(tuán)隊(duì)坐在電腦前工作。你在辦公室里走來走去,看著開發(fā)人員坐在椅子上敲擊鍵盤。這是一個(gè)繁榮的景象。
但是在那之后,你意外地發(fā)現(xiàn)一些開發(fā)人員只是坐在那里盯著屏幕看。他們只是坐在那里看著。到底怎么了!大約半小時(shí),他們什么也沒做!
但他們確實(shí)在工作。他們在想。他們正在用大腦思考解決一個(gè)非常困難的問題。也許他們甚至?xí)酒饋碓谵k公室里走來走去。最后,他們坐下來,寫下11行代碼,并標(biāo)記用戶的故事。
它們符合你的屁股時(shí)間標(biāo)準(zhǔn)嗎?不符合要求。他們是否想出了一個(gè)非常困難的解決方案?
屁股時(shí)間不能證明什么。大腦時(shí)間意味著一切。
8.硬件比開發(fā)人員便宜,而且要便宜得多。
開發(fā)人員實(shí)際上非常昂貴。要吸引頂尖人才,你必須支付有競爭力的薪水。他們每小時(shí)都不便宜。然而,許多公司并沒有意識(shí)到開發(fā)人員在這一小時(shí)內(nèi)具有很高的價(jià)值,也不愿意為團(tuán)隊(duì)提供硬件。
算了吧,電腦很貴!額外的內(nèi)存會(huì)使硬件預(yù)算超標(biāo)!
也許會(huì)超出預(yù)算,但那是因?yàn)槟愕念A(yù)算有問題!
假設(shè)你每年向每個(gè)開發(fā)人員支付10萬美元,或者每小時(shí)支付大約50美元。假設(shè)他們每天花一個(gè)小時(shí)等待編譯器完成工作。然后,假設(shè)您可以為開發(fā)人員的機(jī)器添加一些內(nèi)存和更快的處理器,并將等待編譯時(shí)間減少到每天45分鐘。所以一個(gè)開發(fā)人員每天可以節(jié)省15分鐘。一年200天,總共50小時(shí)。每個(gè)開發(fā)人員每年可以節(jié)省2500美元,每小時(shí)50美元。如果一臺(tái)更快的機(jī)器的增量成本是500美元,結(jié)果是什么?
讓我們來計(jì)算一下。假如你有20個(gè)開發(fā)人員,那么使用更快的機(jī)器反而會(huì)為你節(jié)省4萬美元的投資??谒銘?yīng)該能算出來。
這只是為了減少編譯時(shí)間的等待。此外,做其他事情的速度也會(huì)更快。
如果你的預(yù)算不允許更快的機(jī)器,你需要調(diào)整你的預(yù)算。
9.你無法衡量軟件開發(fā)人員的生產(chǎn)力。
我曾經(jīng)寫過一篇關(guān)于這個(gè)主題的文章。
可以說,以客觀的方式衡量開發(fā)人員的生產(chǎn)力是徒勞的,根本不應(yīng)該這樣做。有些方法可以主觀地衡量生產(chǎn)力,但這些方法需要經(jīng)驗(yàn)和良好的判斷。這些能力很難獲得。一旦你擁有它們,它們可以給你帶來非常寶貴的價(jià)值。
10.如果你沒有讀過《人物》,那么你就不是一個(gè)真正的軟件開發(fā)經(jīng)理。
在我看來,只有一本書可以教你如何管理軟件開發(fā)人員:那就是《人物》(一定要選擇第三版...)由Tomdemarco和TimothyLister編寫。
這本書非常優(yōu)秀,見解深刻,一針見血,組織清晰,毫無保留。這本書充滿了管理軟件項(xiàng)目和軟件開發(fā)人員的智慧。這是一部永恒的經(jīng)典之作。
快找來讀一讀!
11.質(zhì)量是一種認(rèn)知,而不是缺陷的數(shù)量。
這一點(diǎn)真的很難接受。
基本前提是:您的缺陷管理工具中的缺陷接近于零,但人們?nèi)匀豢梢哉J(rèn)為您的軟件有缺陷。您的缺陷管理工具可能有很多缺陷,但人們可能會(huì)認(rèn)為您的軟件像巖石一樣堅(jiān)固。缺陷管理工具中的缺陷數(shù)量與軟件質(zhì)量無關(guān)。
在這里,我不是說你不應(yīng)該試圖減少你的缺陷數(shù)量,而是恰恰相反。但最終,只有當(dāng)你的客戶認(rèn)為它的質(zhì)量足夠高時(shí),你的軟件才能說它是高質(zhì)量的,而你的缺陷數(shù)量可能無法解釋這一點(diǎn)。真奇怪,不是嗎?
當(dāng)我們談?wù)撨@個(gè)話題時(shí),高的缺陷數(shù)量意味著什么?如果你的代碼庫有10000行代碼,高的定義是什么?那么500萬行代碼呢?誰說的?
結(jié)論
即使在最好的情況下,在短跑道上安全著陸一個(gè)軟件項(xiàng)目也是一個(gè)具有挑戰(zhàn)性和困難的命題。在這個(gè)過程中,再加上一些模棱兩可和一些定時(shí)炸彈,成功是一個(gè)奇跡。
關(guān)鍵在于接受和理解這些模棱兩可,并與之和諧相處,而不是與之對抗。接受這11個(gè)真理將有助于解決這個(gè)問題。