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