目錄
一 坑有多深?
二 誰(shuí)在造坑?
三 如何免坑?
“誰(shuí)也無(wú)法改變現狀,唯有無(wú)數程序員血灑大地,才能使項目重建天日?!边@一點(diǎn)也不夸張,軟件項目做爛了就是個(gè)坑,參與者也不過(guò)是填坑的。就像是在魔獸世界戰場(chǎng)遇到國家隊一樣,你贏(yíng)也贏(yíng)不了,出也出不去。
一 坑有多深?
當我們進(jìn)入一個(gè)項目時(shí),通過(guò)不斷觀(guān)察我們可以發(fā)現我們的項目到底是不是一個(gè)坑。造坑的項目,往往具有某些“臭味”,以下是我的一些認識,這些“臭味”即是項目健康狀態(tài)不佳的明顯標志:
- 編碼規范形同廢紙,代碼質(zhì)量低下 每個(gè)項目都有編碼規范,但真正嚴格實(shí)施卻是另一回事。太多的項目把編碼規范作為形式的存在,沒(méi)人在乎讓開(kāi)發(fā)人員寫(xiě)出“人能讀懂的程序”,注釋和命名也成了開(kāi)發(fā)人員的隨心所欲。project上永遠只有開(kāi)發(fā)任務(wù),而幾乎找不到單元測試的時(shí)間和代碼審查的時(shí)間。在高壓進(jìn)度之下的項目,顯得如此山寨。當我們還在抱怨自己工資低的時(shí)候,就先看看我們的程序還能稱(chēng)作OOP嗎。
- 缺乏文檔或文檔質(zhì)量低下 前期文檔很重要,不論是框架的API使用手冊,還是需求或設計文檔,以及各種既定流程的規范,不同種類(lèi)的模板及核對表,等等這些文檔,對于項目來(lái)說(shuō)都是非常重要的資源。而往往有些項目,這類(lèi)文檔就是交由非軟件行業(yè)的人員來(lái)編寫(xiě),或者前期根本不打算在文檔上浪費時(shí)間。這就導致了,缺少相關(guān)文檔或文檔質(zhì)量低下,在軟件構建過(guò)程中,開(kāi)發(fā)者和團隊,不得不為這種“表面工程”的產(chǎn)物而糾結。甚至會(huì )退回到前期準備工作,完成所需的文檔。有些文檔可以在后期補,但有些必須在前期進(jìn)行準備,以保住團隊降低風(fēng)險,減少缺陷引人的幾率并提高編碼質(zhì)量,如果前期這類(lèi)文檔沒(méi)有做好,那么就會(huì )像考前不復習一樣,自食惡果。
- 無(wú)盡的需求變更,永遠追不上的進(jìn)度 這是最常見(jiàn)也是最可怕的,因為無(wú)論怎樣,我們都無(wú)法完成它??蛻?hù)可能認為改個(gè)程序,就像改個(gè)Excel一樣簡(jiǎn)單省事,甚至會(huì )使用可動(dòng)用的一切權利和資源來(lái)推行變更。好吧,我承認這樣的客戶(hù)我遇到過(guò)很多。當我向客戶(hù)解釋過(guò)變更的代價(jià)并提供備選方案后,也就只能等待客戶(hù)的選擇了,這多少有些運數的成分,但也是無(wú)奈之舉。
- 僅僅靠加班應對進(jìn)度落后 進(jìn)度落后并不可怕,可怕的是僅靠加班來(lái)追趕進(jìn)度。這是問(wèn)題的關(guān)鍵,長(cháng)時(shí)間的趕工仍然無(wú)法趕上進(jìn)度,這只意味著(zhù)項目有某種更深層次的問(wèn)題,已經(jīng)不是單開(kāi)趕工可以解決的了。留意那些長(cháng)時(shí)間加班的項目,他們往往在管理上存在很大問(wèn)題,發(fā)現這些問(wèn)題,在你成為PM時(shí),不要犯類(lèi)似錯誤。
- 溝通無(wú)門(mén) 如果你在一個(gè)“叫天天不應,叫地地不靈”的項目里,那你最好省心吧。項目中溝通很重要,但總有些項目,領(lǐng)導的工作太忙,人就是找不到,發(fā)出去的郵件就是沒(méi)人回,遇到問(wèn)題就是自己扛。在這樣的項目里也有一些好處,比如鍛煉自己的自學(xué)能力,以及磨練意志與根性。不過(guò)這些,也都是我的自嘲。低效的溝通將導致不必要的返工,這才是我所痛恨之處。我最為惱火的一段經(jīng)歷是,甲方要進(jìn)行變更,開(kāi)了一周的會(huì )沒(méi)人通知我,我的小組在這一周里完成了原計劃的數個(gè)需求并進(jìn)入到測試階段, 但這些需求均被砍掉 。本來(lái)只有甲方告知是可以調整進(jìn)度開(kāi)發(fā)其它模塊的,但最終演變?yōu)橘Y源的浪費??梢?jiàn),溝通是多么的重要。
- 沒(méi)人關(guān)心質(zhì)量 因為軟件構建屬于專(zhuān)業(yè)領(lǐng)域,客戶(hù)并不具備相應領(lǐng)域的知識,由于這種信息不對稱(chēng),助長(cháng)了軟件的質(zhì)量低下。我們開(kāi)發(fā)的軟件可以是“低等級高質(zhì)量”的,但不能夠是“高等級低質(zhì)量”的。但是,太多的項目不在注重編碼質(zhì)量,這與軟件構建的復雜度有關(guān),也與整個(gè)行業(yè)的風(fēng)氣有關(guān)。但不管何種原因,提高代碼質(zhì)量仍然應該作為團隊的努力方向。團隊應該獎勵那些,編寫(xiě)高質(zhì)量代碼的程序員。如果你的團隊獎勵的是那些,“BUG殺手”(每天修改上百個(gè)BUG),而冷落那些缺陷檢出數量很低的程序員,那么,你的PM是個(gè)不懂技術(shù)的,至少我本人認為,任何有技術(shù)背景的PM都應該獎勵那些正在保持職業(yè)操守,認真對待需求,保證代碼質(zhì)量的程序員。他們?yōu)轫椖扛冻隽烁?,更多的異常處理?更多的測試調試,更多的檢查,更多的重構,雖然他們的進(jìn)度并不快,但他們引人的缺陷數量很少。每個(gè)做過(guò)開(kāi)發(fā)的人都會(huì )在質(zhì)量和進(jìn)度上做出取舍,而我敬佩那些選擇質(zhì)量程序員,因為他們才是真正拿開(kāi)發(fā)當事業(yè)的人。在此,向所有努力提高代碼質(zhì)量的程序員致敬!
- 沒(méi)人為缺陷買(mǎi)單 沒(méi)人為自己的成果負責。需求產(chǎn)出了低質(zhì)量的文檔,設計沒(méi)有進(jìn)行充分的迭代,開(kāi)發(fā)可以怎么簡(jiǎn)單怎么寫(xiě),測試可以隨意測測,沒(méi)人為自己的成果中的缺陷買(mǎi)單,除了項目經(jīng)理,他為項目承擔唯一責任。當項目組所有人員都在混時(shí),就是在給自己挖坑。這種缺陷的堆積,會(huì )像放射性元素在食物鏈中的堆積一樣,早晚項目會(huì )因此而崩潰。
- 過(guò)高的離職率 這個(gè)是最明顯的“臭味”,這說(shuō)明我們的同行已經(jīng)在這里無(wú)法忍受了。它所帶來(lái)的惡略影響不光體現在可用資源的減少,還體現在對成員士氣的極大影響。如果不及時(shí)改善,這將是一個(gè)非常惡性的循環(huán),當往一個(gè)進(jìn)度落后的項目中添加資源只會(huì )使進(jìn)度進(jìn)一步落后,而非正離職導致必須補充新的資源,資源從入職到培訓都會(huì )對對團隊產(chǎn)生震蕩,并降低現行團隊的生產(chǎn)力。一個(gè)頻繁處于形成階段的團隊,很難要求其有什么凝聚力,團隊問(wèn)題將會(huì )凸顯,尤其是在溝通上,在項目忙的時(shí)候很少能照顧到新人?;ㄙM在對新人進(jìn)行培訓,和與其溝通上的時(shí)間,很可能得不償失。
- 團隊中的不良情緒 不同團隊開(kāi)始扎堆并相互敵視,例如開(kāi)發(fā)組認為設計組是一幫搞業(yè)務(wù)的白癡,根本不懂編程;測試組認為開(kāi)發(fā)組的人就是垃圾,BUG提交了多少便還是無(wú)法關(guān)閉;PM開(kāi)始抱怨,自己的成員不配合;成員開(kāi)始抱怨,PM是個(gè)純管理沒(méi)資格指揮內行做事。等等,諸如此類(lèi)的怨念會(huì )在團隊中積累,并以某個(gè)導火索為契機爆發(fā)。面對現實(shí)吧,至少,我遠沒(méi)有自己想象的那樣高尚。我承認我曾經(jīng)會(huì )和別的程序員說(shuō):“你看XX他們寫(xiě)的代碼...什么呀...”,這樣的話(huà)。在過(guò)去我也吐槽過(guò)別人代碼,這種做法是錯誤的,我為此表示歉意?,F在,如果有必要,我會(huì )說(shuō)代碼有缺陷,但絕不會(huì )說(shuō)他的代碼不好。我希望,我們能彼此尊重。對于技術(shù)人來(lái)說(shuō),不尊重他的成果就是不尊重他的人,所以我還是建議PM在管理工作中,多用“缺陷”,少用“不行”、“不對”。但是,項目中也總是有些人,靠鄙視別人的成果來(lái)彰顯自己的實(shí)例。這些人,有,但很少。至少我遇到的很少,遇到過(guò)幾個(gè),讓他們的話(huà)語(yǔ)成為你學(xué)習的動(dòng)力吧。我曾經(jīng)被人諷刺UI做的太丑,之后我學(xué)會(huì )了SL和FLEX;被人鄙視基礎太差,之后開(kāi)始閱讀《CLR Via C#》;我朋友被人嘲笑過(guò)數據庫設計,現在人家也開(kāi)始買(mǎi)書(shū)深造。團隊中就是這樣,我們無(wú)法管住別人的嘴,但我們可以管住自己的。少說(shuō)多聽(tīng),一鳴驚人,乃上上之策。不要受情緒的影響,保持一個(gè)平靜的心。
- 沒(méi)有項目或階段的后評價(jià) 不對項目的階段進(jìn)行后評價(jià),也意味著(zhù)沒(méi)人在乎你到底干了些什么,所有人都只是進(jìn)度是否完成,而沒(méi)有對完成的好壞進(jìn)行評價(jià)。這也意味了,僅靠做好你的工作,你是無(wú)法得到領(lǐng)導的重視的。最終只有那些加班時(shí)間最長(cháng)的程序員被領(lǐng)導認可。而能力強,口碑好的成員也只能在團隊和客戶(hù)中間留下傳說(shuō)。
二 誰(shuí)在造坑?
軟件項目涉眾眾多,造坑的多為項目實(shí)施團隊內部,而究其原因也是多方面的,但是始終離不了項目的四個(gè)維度——時(shí)間、范圍、成本、質(zhì)量。很多時(shí)候客戶(hù)并不具備軟件項目的實(shí)施經(jīng)驗,而實(shí)施團隊為了迎合客戶(hù)意愿,也會(huì )多多少少的在這四了維度上做文章。資源、時(shí)間不足,輕質(zhì)量重功能,往往成為造坑的契機。所以,不用懷疑,造坑的往往是我們自己。很難理解,真正挖出大坑的人,最后也是填坑的人。一個(gè)人很容易被外部事務(wù)所左右,就如“同假的多了,真的到成假的了一樣”,多數人不愿意在一個(gè)新環(huán)境中表現得特立獨行。但也有老的程序員對我說(shuō)過(guò):“當別人做錯了,你就不要跟著(zhù)去做!”所以,我認為工作就是工作,不需要我們在其中融合多少興趣,也不要求我們有過(guò)多的付出,但對于工作的成果則要求我們認真的對待。俗話(huà)說(shuō):“拿多少錢(qián),辦多少事!”如果多少有些團隊意識,能夠對自己的工作負責,那至少在意識上,我們能給自己少造些坑。
三 如何免坑?
(一) 清除盲區
以下觀(guān)點(diǎn),僅是我對軟件項目中一些錯誤認識的歸納:
- 寫(xiě)出能用的程序就行啦! 我們應該首先清楚我們做的是什么,一個(gè)成熟的團隊產(chǎn)出的可交付成果應該包括軟件編程產(chǎn)品,相關(guān)文檔,項目實(shí)施過(guò)程中的經(jīng)驗教訓已經(jīng)其它一些非形式的成果(培訓)。這里,我們必須清楚的認識到,我們所開(kāi)發(fā)是是編程產(chǎn)品,而不是我們個(gè)人的技術(shù)實(shí)踐或大學(xué)的畢設。對于編程產(chǎn)品,我們必須認識到,其是產(chǎn)品級別的,必須保證質(zhì)量,必須提高用戶(hù)體驗,必須考慮系統的諸多特性或維度。這一過(guò)程遠比我們自己寫(xiě)個(gè)程序要復雜的多。設計需要不斷地進(jìn)行迭代;開(kāi)發(fā)人員需要遵守嚴苛的規范,編寫(xiě)大量的注釋和大量的異常處理;測試人員需要不斷地進(jìn)行各種重復測試,但是正是這種全局的規范,全體團隊的不懈努力,才保證了我們的編程產(chǎn)物可以稱(chēng)之為產(chǎn)品。所以,一定要明確,我們要完成的是一個(gè)產(chǎn)品,而不是一個(gè)畢業(yè)設計,它不是一個(gè)人的技術(shù)實(shí)踐,而是整個(gè)團隊傾注精力去完成的最佳成果。我們可以輕松的實(shí)現客戶(hù)的某些需求,但需求背后的某些東西,需要我們認真對待,比如安全性和性能等。實(shí)現功能的程序誰(shuí)都會(huì )寫(xiě),而寫(xiě)出高質(zhì)量的程序的才是真正的藝術(shù)。
- 盡快開(kāi)始編碼吧 ! 軟件構件是一個(gè)精心設計的過(guò)程,其前期準備十分重要。在后期修復缺陷的成本要遠遠高于前期。因此,在項目執行前,前期的規化十分必要。在前期每發(fā)現一個(gè)缺陷,都會(huì )為后期節省大量的成本。
- 需求怎么變了! 沒(méi)有不變的需求。
- 進(jìn)度落后了就招人唄! 這是種典型的錯誤認識,《人月神話(huà)》中已經(jīng)說(shuō)明的很清楚了——往一個(gè)進(jìn)度落后的項目中注入資源,只會(huì )使進(jìn)度進(jìn)一步落后。雖然,這本著(zhù)作成為PM必讀之作,其思想也被業(yè)界所廣泛認可,但是,還是會(huì )有很多管理者單純的認為,通過(guò)注入資源能解決問(wèn)題。對于這些人,只能讓實(shí)踐來(lái)檢驗真理了。
- 軟件質(zhì)量保證是測試的工作!這是一種逃避責任的說(shuō)辭。如果把代碼質(zhì)量比喻為減肥,那么測試無(wú)疑是一個(gè)磅秤,減肥工作還是要有開(kāi)發(fā)人員來(lái)完成。所以,不要將代碼質(zhì)量都寄希望于測試工作上。即使是大規模的用戶(hù)測試,其錯誤檢出率也不足五成。而真正挑起代碼質(zhì)量重擔的是代碼審查。
- 程序員你8小時(shí)就寫(xiě)了這么點(diǎn)代碼? 讓開(kāi)發(fā)人員將全部時(shí)間都花在編碼上是不可能的。開(kāi)發(fā)人員需要時(shí)間預讀文檔,需要與相關(guān)干系人進(jìn)行溝通,需要花時(shí)間來(lái)搜索資源。此外,可能還需要編寫(xiě)文檔,參加會(huì )議,培訓以及處理個(gè)人事務(wù)等等。這些時(shí)間都會(huì )無(wú)情的奪走編碼的時(shí)間。程序員大約有近似20%的時(shí)間甚至更多會(huì )用在與編碼無(wú)關(guān)的事情上(不算上班或聊QQ),所以不要錯誤的以為每個(gè)程序員每天能寫(xiě)8小時(shí)的程序。
- 你今天寫(xiě)了這么多行代碼真有效率! 編碼不是在掃地,比誰(shuí)掃的面積大。不能單純用行數來(lái)評價(jià)開(kāi)發(fā)人員的工作量。評判的標準應該結合模塊的復雜度,編碼的缺陷檢出量以及最終交付時(shí)可用代碼的比例(實(shí)踐表明,我們報廢了大量的無(wú)用代碼)。
- 他今天把自己100多個(gè)BUG都改了,我們得在組里表?yè)P下他! 在我看來(lái)這樣的領(lǐng)導不跟也罷,這就是讓人相當無(wú)語(yǔ)的行為。好的開(kāi)發(fā)者在提交測試前,覺(jué)得會(huì )對自己的代碼進(jìn)行走查和調試,甚至使用單元測試工具,因此其代碼的缺陷檢出量很小。這樣的程序員,才值得被表?yè)P。而那個(gè)一天改了自己100多個(gè)BUG的人,作為管理者應該想想,流程哪里錯了,需要進(jìn)行改進(jìn)。
- 設計我來(lái)定,開(kāi)發(fā)你閉嘴! 這樣的例子也不少,這種做法有一種聽(tīng)起來(lái)非常合理的理由——保證項目架構的概念完整性。其解釋為,如果將設計人員從開(kāi)發(fā)人員剝離,那么就可以將架構的概念完整性統一,因為設計人員的數量比開(kāi)發(fā)人員是數量要少的多,更容易統一認識。而這樣做的項目組,也默認地認為設計組的技術(shù)實(shí)力要明顯高于開(kāi)發(fā)組。他們往往從開(kāi)發(fā)組中選擇優(yōu)秀的設計人員到設計組,但也會(huì )有走眼的時(shí)候。其一,硬手沒(méi)有被提拔。這時(shí)候多半是硬手對設計不滿(mǎn),并對團隊管理層產(chǎn)生質(zhì)疑,并想法設法進(jìn)行溝通。如果處理的好,可能硬手會(huì )被重視,如果溝通無(wú)門(mén),那之后,可能會(huì )充斥著(zhù)抱怨和不滿(mǎn),以及人際關(guān)系的惡化。有些強硬些的可能會(huì )選擇拒絕不合理的設計或更為極端的是離職。走眼的另一種情況是,挑的人干不了設計。這樣往往就是讓他鍛煉,而不是撤換(彼得原理——每個(gè)人都會(huì )被晉升到他不適合的崗位)。這就郁悶到極點(diǎn)了,設計者將會(huì )與相應的數名開(kāi)發(fā)人員進(jìn)行一場(chǎng)曠日持久的暗戰。其中,已經(jīng)不只是個(gè)人的抱怨,甚至會(huì )演變成成員集體的士氣低落,并最終促成小組的重組。我認為,有必要將開(kāi)發(fā)人員納入設計活動(dòng)。應該參考開(kāi)發(fā)人員的意見(jiàn),其原因有三:其一,開(kāi)發(fā)人員對實(shí)現相當熟悉,往往發(fā)現設計中的不足;其二,通過(guò)授權開(kāi)發(fā)者參與設計,能讓其感受到認同感,提升其參與項目的欲望,和責任心;其三,讓開(kāi)發(fā)參與設計,可以對設計人員進(jìn)行儲備,在需要時(shí)作為備選資源使用。
- 客戶(hù)(領(lǐng)導)說(shuō)必須完成,我也沒(méi)辦法! 這就是“領(lǐng)導一句話(huà),勞動(dòng)人民跑斷腿!”這是非常典型的加班借口。軟件構建過(guò)程如同耕種,你每次只處理它的一小部分,一點(diǎn)一點(diǎn)的加到整個(gè)系統,使系統一點(diǎn)一點(diǎn)的“生長(cháng)”。這也暗示了,工作應該按部就班,正如春種秋收一樣,各個(gè)環(huán)節有強硬的邏輯存在。所以,我們必須學(xué)會(huì )對不合理的要求說(shuō)“不”。這里并不是說(shuō)要拒絕客戶(hù)的需求,而是指應該向客戶(hù)說(shuō)明情況并提出相應的備選方案以供參考。例如通過(guò)通過(guò)削減范圍來(lái)達到按時(shí)完工的目的。PM需要向客戶(hù)說(shuō)明情況,并向其提供幾套可行的解決方案,以促成項目向良性發(fā)展。
- 我是領(lǐng)導我來(lái)排進(jìn)度! 工作進(jìn)度的安排不能是領(lǐng)導的單方?jīng)Q策,而應該參考做了解這項工作的人的意見(jiàn)。
- 系統上線(xiàn)了,項目就算結束了! 只有當可交付成果成功移交,項目進(jìn)行的相應的收尾工作,項目的經(jīng)驗教訓文檔被總結和歸納,一個(gè)項目才算真正意義上的完成。
(二) 參考建議
- 做好前期準備 前期準備很重要,如果在開(kāi)始構建之前認真的地進(jìn)行適當的準備活動(dòng),那么項目會(huì )運作的良好。充足的準備防止我們制造一個(gè)錯誤的產(chǎn)品。前期工作的好壞,多少會(huì )為這個(gè)項目的成功和失敗打下基礎。即使進(jìn)入構建階段,如果我們發(fā)現前期工作做的不好,也完全有理由退回去。前期準備工作和核心目標就是降低風(fēng)險——一個(gè)好的項目規劃者能夠盡可能早地將主要的風(fēng)險清除掉,以使項目的大部分工作能夠盡可平穩地進(jìn)行。目前,對后期影響最嚴重的風(fēng)險是糟糕的需求分析和項目規劃,因此準備工作就傾向于集中改進(jìn)需求分析和項目規劃。
- 預先行其事,必先利其器 用軟件武裝團隊提高生產(chǎn)效率,例如:版本控制,錯誤跟蹤,信息發(fā)布,自動(dòng)發(fā)布,CASE工具,調試工具,測試工具,文檔管理,代碼生成工具等等。
- 分析項目類(lèi)型,在管理和構建之間找尋平衡 商業(yè)系統、使命攸關(guān)的系統、性命攸關(guān)的系統在整個(gè)項目階段具備不同的控制粒度。需要根據項目的具體類(lèi)型來(lái)確定管理的嚴謹程度,避免“過(guò)度控制”或“控制不足”。
- 需求必須被凍結 需求必須被凍結,如果需求不能凍結,那么誰(shuí)來(lái)了都沒(méi)有用。再強的團隊也無(wú)法完成一個(gè)無(wú)盡的任務(wù)。
- 變更必須走流程 正確應對變更,變更并不可怕,可怕的是失控的變更。以下建議希望對讀者有所幫助:
在構建期間處理需求變更
- 核對需求,評估質(zhì)量:如果需求不夠好,停下來(lái),把它做好再開(kāi)始。
- 確保每一個(gè)人都知道需求變更的代價(jià):讓客戶(hù)知道需求辦更并不像在Excel上進(jìn)行幾個(gè)修改那樣容易,“進(jìn)度”和“成本”是你最有力的武器。
- 建立一套變更控制程序:固定的變更控制程序讓你知道在什么時(shí)候處理變更,讓客戶(hù)知道你會(huì )處理他們的提議。
- 使用能適應變更的開(kāi)發(fā)方法:迭代與增量。
- 放棄這個(gè)項目:如果以上提議沒(méi)有一條奏效,需求變更極其頻繁,那么,評估你的項目,考慮放棄它吧,繼續下去你只會(huì )越陷越深。
- 注意項目的商業(yè)案例:性?xún)r(jià)比,沒(méi)必要滿(mǎn)足超出項目成本的需求。
- 關(guān)于加班 做IT的加班是很正常的,但加班要加的有意義,而且不應該長(cháng)期加班。必須針對關(guān)鍵路徑上的工作進(jìn)行趕工,而不是做些無(wú)法加快整體進(jìn)度的工作。而且,應當安排調休,而不是支付加班費。其主要原因也是我不贊成加班的原因——疲勞更容易引人缺陷。加班無(wú)疑會(huì )使人疲勞,每個(gè)人都想盡快結束手上的工作后回家休息。在長(cháng)期疲憊的情況下,人員的工作效率會(huì )下降,士氣會(huì )低落,非正常離職率增加,最重要的是疲憊的團隊很難保證軟件的質(zhì)量,缺陷在不知不覺(jué)中引人,在后期無(wú)疑會(huì )為此付出代價(jià)。項目的總成本和周期,都會(huì )隨著(zhù)引人缺陷的數量的增加而倍增,而且發(fā)現的越晚越嚴重。
- 做好版本控制和配置管理 版本控制和配置管理是必須有的,即便是再小的項目也不能忽視,必須加以重視,一旦版本混亂,多多少少會(huì )對構活動(dòng)造成影響。所以,平時(shí)不要偷懶,管理好每個(gè)基線(xiàn)。
- 授權的好處 授權好處多多,包括:一,減少管理者工作量;二,對人員有意識地進(jìn)行鍛煉,培養儲備人才;三,提高人員對項目的參與度,從而提高士氣。
- 樂(lè )觀(guān)管理與悲觀(guān)管理 樂(lè )觀(guān)與悲觀(guān)完全取決于人的性格,一般來(lái)講多數傾向于樂(lè )觀(guān),應該清楚這兩種性格在項目中的優(yōu)勢與劣勢。我本人傾向于悲觀(guān),可能是性格使然,但悲觀(guān)的管理至少不會(huì )誤事。樂(lè )觀(guān)管理的優(yōu)勢在于,很容易營(yíng)造氣氛,擅長(cháng)給客戶(hù)或領(lǐng)導描繪一個(gè)美好的未來(lái)。這種作風(fēng),前期很舒服,但后期可能要吃苦了。樂(lè )觀(guān)管理容易出現的問(wèn)題是對風(fēng)險的預計不足,不能預留充足的緩沖時(shí)間,沒(méi)有準備足夠的預防措施。其表現就是,在進(jìn)行進(jìn)度計劃時(shí),總是認為今天的問(wèn)題今天可以解決,已經(jīng)修復的BUG將不會(huì )再次出現,用戶(hù)需求是最后一次變更,等等諸如此類(lèi)的樂(lè )觀(guān)想法會(huì )使管理者蒙蔽雙眼,而沒(méi)有做足風(fēng)險應對,其結果就是不管怎么加班就是趕不上進(jìn)度,因為進(jìn)度計劃被設計為最順利的情形,而不是現實(shí)場(chǎng)景。悲觀(guān)管理的好處是,為潛在風(fēng)險做足了準備。但悲觀(guān)管理有一個(gè)非常大的缺陷,就是“過(guò)度控制”,可以比喻為“疑心病”(小心的都有些病態(tài)了)。其表現是為:按照之前的措施,發(fā)現遺漏了一個(gè)問(wèn)題,那么悲觀(guān)管理者會(huì )在之前措施基礎上增加新的保障措施,然后又發(fā)現遺漏了一個(gè)問(wèn)題,之后會(huì )繼續追加保障措施。乍看之下沒(méi)啥問(wèn)題,因為是在不斷地進(jìn)行過(guò)程改進(jìn),但問(wèn)題出在保障措施的增長(cháng)速度過(guò)于驚人,稱(chēng)其為“疑心病”一點(diǎn)也不為過(guò),悲觀(guān)管理者容易在很小的地方施加過(guò)多的控制,造成人日的浪費,而忽略掉本應該關(guān)注的更為重要的問(wèn)題。不管那種性格的管理,清楚自己的弱點(diǎn)總是好的。
- 有效的溝通,不要踢皮球 軟件項目因為其本身的復雜度和涉眾眾多,所以更加需要溝通。溝通問(wèn)題是所有大型項目都共用的問(wèn)題,在大多數團隊中往往也不認為溝通是個(gè)問(wèn)題。但我還是想請讀者認真對待溝通,比如郵件。郵件可以回復的慢,但請回復郵件。當我在一個(gè)連發(fā)出的郵件都沒(méi)人回復的團隊中工作時(shí),除了無(wú)法解決問(wèn)題,讓我感受到的只有無(wú)奈以及冷漠。
- 客戶(hù)是我們的朋友 把你的客戶(hù)當成朋友,客戶(hù)是我們做重要的資源之一。在每個(gè)客戶(hù)背后往往隱藏著(zhù)更多潛在的客戶(hù)。我們必須清楚,客戶(hù)作為非專(zhuān)業(yè)人士,其可能并不理解我們的工作,在項目執行階段產(chǎn)生摩擦是難免的。但是,這些都不能成為我們遷怒客戶(hù)或故意在工作中放水的借口。即便是為了項目能成功收尾,我們也必須維護好與客戶(hù)的關(guān)系。
- 不要超前設計,不要項目鍍金 超前設計和項目鍍金都是不可取的,因為他是在浪費資源。滿(mǎn)足需求以外的東西,不會(huì )對你的項目有任何好處,但是卻可能引人缺陷。
- 總結經(jīng)驗教訓 必須對階段進(jìn)行經(jīng)驗教訓總結,沒(méi)有什么比這些收獲更有價(jià)值。這樣文檔就是組織的資產(chǎn),是以后類(lèi)似項目的參考和依據,并在持續優(yōu)化方面發(fā)揮更為重要的作用。
- 不要讓會(huì )議和文檔拖了團隊的后腿 “當船快要沉的時(shí)候,我們需要的是一個(gè)發(fā)號施令的領(lǐng)袖,而不是開(kāi)會(huì )?!避浖椖康暮诵膯?wèn)題是降低復雜度,越是復雜的項目就越需要溝通,但別讓開(kāi)會(huì )拖了我們的后腿。沒(méi)有必要的會(huì )盡量少開(kāi)或不開(kāi),要常開(kāi)會(huì ),開(kāi)小會(huì ),每次會(huì )議就幾個(gè)相關(guān)干系人碰頭溝通下就可以了,沒(méi)有必要擴大為全員參與。冗長(cháng)的討論應該適時(shí)的終止,畢竟會(huì )議室上只能做出決策,而解決問(wèn)題還得在會(huì )下。所以我認為應該精簡(jiǎn)那些冗長(cháng)的會(huì )議,別然開(kāi)會(huì )成為我們的工作。此外,要時(shí)刻謹記客戶(hù)最終需要的是可以良好運行的軟件產(chǎn)品而不是華麗的文檔。所以,文檔要恰到好處,寫(xiě)的再漂亮的文檔沒(méi)有完備的系統也不過(guò)是廢紙一堆,別丟了西瓜撿芝麻,可以正常工作的軟件才是我們的工作重心。
- 核對表的你的好助手 就像飛機工程師在檢查飛機時(shí)使用核對表一樣,軟件項目也可以大量使用核對表。核對表可以幫助檢驗文檔的質(zhì)量,降低缺陷數量,以及改進(jìn)項目管理。好的核對表,是你工作中的好助手。
- 小范圍的受控好過(guò)大范圍的失控 要注意控制的粒度,事無(wú)巨細。根據項目規模,人員構成,要采用不同的控制粒度。評估可控范圍,并不是控制越廣越好,控制不了就是失控。 對無(wú)暇顧及的地方授權別人管理是個(gè)可行的做法。 即便是小范圍是受控,也好過(guò)大范圍的失控。一個(gè)失控的項目,誰(shuí)也不知道其會(huì )走向何方。