淺析哪些軟件開發(fā)項(xiàng)目不能做
最近半年撲在一個項(xiàng)目上難以自拔,簡直就是一個泥潭,無數(shù)同行來到這里、陷在這里,誰也不知道到底完成項(xiàng)目還需要多少人來填坑。項(xiàng)目管理混亂,高層領(lǐng)導(dǎo)離職,已無進(jìn)度管理可言(自打來了項(xiàng)目組,就沒見“里程碑”為何物)。干到現(xiàn)在,我所感覺到的僅僅剩下失望、苦悶與挫敗感。寫到這里有點(diǎn)發(fā)牢騷的味道,其實(shí)我想說的是項(xiàng)目的成敗與管理有莫大的關(guān)系,作為一個管理學(xué)出身(我現(xiàn)在是開發(fā)),我也想通過我的經(jīng)歷說說我對項(xiàng)目管理的認(rèn)識。
首先,說說我們項(xiàng)目組自身的不足。
1 沒有“規(guī)范”。進(jìn)入項(xiàng)目我沒有拿到任何“規(guī)范”性文檔,所以開發(fā)中數(shù)據(jù)表、變量、工作流等命名極其混亂。
2 沒有數(shù)據(jù)字典。開發(fā)對數(shù)據(jù)庫的認(rèn)識僅能通過查詢來了解,對于一個企業(yè)級項(xiàng)目來說,表實(shí)在是太多了,我們不了解某些數(shù)據(jù),現(xiàn)有的表是否保存。
3 沒有核心人物。對于一個使用獨(dú)立框架開發(fā)的系統(tǒng),沒有一個對其十分了解的技術(shù)總監(jiān),所有人都是在按照之前的版本改造,嘗試性地引入新功能,經(jīng)常是一錯錯一片,需要不斷地進(jìn)行整體的返工,非常耗時。
4 沒有責(zé)任到人。項(xiàng)目一貫的拆東墻補(bǔ)西墻的做法,導(dǎo)致某個功能點(diǎn)被分配了N手,所有人都要看前人的代碼并熟悉業(yè)務(wù),但項(xiàng)目組有不給你足夠的時間交接,這樣的結(jié)果就是大量代碼重復(fù),BUG數(shù)量飆升,以及出問題沒人認(rèn)領(lǐng),互相推諉,最后接手的人要為前人買單。
5 缺乏溝通。在如此一個需求不明確的情況下,開發(fā)就應(yīng)該坐在需求部門邊上不斷掌握需求,但是多數(shù)人沒有,導(dǎo)致了我們都變更單都快追上《C#高級編程》了,而且內(nèi)部人員溝通不足,缺乏協(xié)作。
6 不做代碼審查。項(xiàng)目組沒有質(zhì)管,破壞現(xiàn)有代碼分層,插入不寫驗(yàn)證的情況很多,誰來為他們的BUG買單?
7 資源分配不合理,獎懲不均。甲方人員閑的打游戲,乙方人員加班到半夜。這其實(shí)也沒啥,但是我要說的是為啥表揚(yáng)的總是甲方,乙方加班就是應(yīng)該的對嗎。開發(fā)兼職運(yùn)維,每天都要浪費(fèi)大量時間來解答用戶的各種問題,這也沒啥,但為啥不讓用戶去找培訓(xùn)人員而來找我們,為啥解決問題消耗的人日不列入計劃。
其次,說說我們的合作廠商的問題。
1 顧問能力不足。多數(shù)顧問不懂技術(shù),其設(shè)計的系統(tǒng)完全違背大型分布式系統(tǒng)的開發(fā)原則。一個接口對應(yīng)N個功能點(diǎn),為了復(fù)用代碼他們絞盡腦汁呀,可你可知道你提高了系統(tǒng)的耦合度,你對維護(hù)提高的多少成本。自己接口從不寫驗(yàn)證,你為啥那么相信你的外圍系統(tǒng),你自己的庫你都不看好門嗎。完全不知道需求文檔該怎么寫,你是顧問,你要將用戶的需求轉(zhuǎn)換為需求文檔,而不是指導(dǎo)用戶如果寫個EXCEL來應(yīng)付差事,你的用戶不知道開發(fā)人員需要什么,也不知道該如何表示自己的需求,再說哪有讓用戶寫需求文檔的。完全不能估算工作量,單方地認(rèn)為改改字段就像改EXCEL文檔那樣簡單,壓外圍進(jìn)度壓的好死。此外,顧問的業(yè)務(wù)水平也不高(經(jīng)常遭投訴),定個需求要開幾天會,等真正做的時候發(fā)現(xiàn)業(yè)務(wù)又走不通了,明顯在設(shè)計時,沒有根據(jù)實(shí)際業(yè)務(wù)對設(shè)計進(jìn)行反復(fù)迭代。
2 糟糕的文檔。先不說文檔的質(zhì)量,首先數(shù)量就不全,經(jīng)常是先開發(fā)后補(bǔ)文檔。再說質(zhì)量,完全是外行人寫的東西,不過也可以理解,畢竟大部分文檔是用戶寫的,我就想問,讓用戶出設(shè)計那還要你顧問干啥,難到就是發(fā)發(fā)郵件當(dāng)監(jiān)工。我覺得這已經(jīng)不是能力問題了而是職業(yè)道德和責(zé)任心的問題。
3 推卸責(zé)任。業(yè)務(wù)上本該自己系統(tǒng)實(shí)現(xiàn)的功能,因?yàn)椴缓米鼍拖掳l(fā)給外圍系統(tǒng),你個幾千萬的系統(tǒng)做不了,你要個幾百萬的實(shí)現(xiàn),這理由充分嗎。每個系統(tǒng)都應(yīng)該承擔(dān)起自己的責(zé)任,占有自己的位置,不要因?yàn)榭蛻舨欢夹g(shù),就偷懶。雖然作為顧問,維護(hù)己方開發(fā)人員的利益是合理的,但也你不能夠以犧牲系統(tǒng)的可用性為代價。
4 換人不做交接。很難相信會發(fā)生這樣的事情。不過我確實(shí)遇到了,換了人了,之前的設(shè)計全報廢,然后做新的。
5 環(huán)境混亂。完全不理解為啥開發(fā)需要搭建如此多個環(huán)境。用戶不停地從1個環(huán)境上測完去另外一個。你同類環(huán)境1個就夠了,為啥整一堆沒有針對性的測試環(huán)境,最要命的是還不能保證發(fā)布的版本同步。而且環(huán)境數(shù)據(jù)臟了就整新的,那得啥時是個頭。
6 不接受意見。外部廠商顧問不愛接受外圍系統(tǒng)給出的意見,比如接口復(fù)用問題。完全是把接口做成一個并集,來最大限度進(jìn)行復(fù)用。
7 頻繁變更。變更過于頻繁,這也是項(xiàng)目組遇到最大的問題。不管是否收到甲方的確認(rèn)函,變更都會到來,我報廢掉的代碼比現(xiàn)在可用的高出數(shù)倍。你完全不知道你的任務(wù)啥時候完了,到開發(fā)完成,測試結(jié)束,用戶確認(rèn)并試點(diǎn)上線之后,本該認(rèn)為是沒事了,但是到來的不是BUG而是變更??催^《C#高級編程》都知道那書有多厚,如果把我們的辦更文檔都打印出來,頁數(shù)也差不多了。
說了這么多,很多都是自己的牢騷與不滿,不過我真正想說的是軟件工程的重要性。是什么造就了軟件泥潭?原因的多方面的,但是好的項(xiàng)目管理能夠幫助我們規(guī)避風(fēng)險降低開發(fā)成本,并提高代碼質(zhì)量。比如,與用和其他參與者(包括合作廠商)密切溝通,對需求反復(fù)迭代,規(guī)范技術(shù)文檔,好的版本控制,統(tǒng)一編碼風(fēng)格,進(jìn)行代碼走查,問題責(zé)任到人,采用合適的開發(fā)模型,正確評估工作量,制定合理的進(jìn)度管理和激勵機(jī)制,這些都有助于對一個項(xiàng)目的跟進(jìn)。
感謝讀者能夠耐心地讀完我的這篇”牢騷“,作為一名普通的開發(fā)人員,我不想指責(zé)誰的過失,因?yàn)楫吘刮覜]有坐到那個崗位上,沒有資格指責(zé)別人的工作。我覺得,一個項(xiàng)目的成敗,雖然不是某個人能左右的,但是只有各個崗位的人各司其職,全力配合才能夠保證系統(tǒng)的順利上線。我想對剛?cè)胄械某绦騿T們說的是,請對你們的代碼負(fù)責(zé),用戶不提的不代表你就不用做了,沒測出BUG不代表就沒BUG,請在提交前做好代碼走查,并不要推卸你的責(zé)任,是人就會犯錯,你要做的就是承認(rèn)錯誤并及時解決;對顧問說的是請對你們的客戶和你的設(shè)計負(fù)責(zé),你要知道你出具的文檔是我們開發(fā)系統(tǒng)的重要依據(jù),我們是如此的信任著你,請不要讓我們失望。
最后送上我比較喜歡的一句話:軟件開發(fā)如同在水面行走一樣簡單,只需需求已確認(rèn),水面已結(jié)冰。
原文鏈接:http://www.cnblogs.com/MeteorSeed/archive/2011/07/12/2104069.html
【編輯推薦】
- 新手軟件項(xiàng)目經(jīng)理該如何入門
- 項(xiàng)目經(jīng)理的力量應(yīng)該從哪里來?
- 當(dāng)你從程序員變?yōu)轫?xiàng)目經(jīng)理
- 軟件測試項(xiàng)目為什么會失敗
- 項(xiàng)目管理之CVS與SVN日常使用總結(jié)