英國哲學家培根曾經說過,時間就是金錢,時間就是力量,時間就是生命;也許在其它地方它有著更深刻的含義,但是在項目開發中,我更體會出了一種無奈!
目前,我們國家大多數的軟件公司,都有著極不明確的項目開發計劃,大多都圍繞著短期的市場需求轉,因為它直接關系著老板的腰包,很少有經過長時間的市場調研的。于是,當市場開始需要什么東西時,大家一窩蜂的都去做,很少有人能夠靜下心來和用戶仔細交流溝通,原因就是時間太緊,他們擔心這段交流溝通的時間會延遲項目的開發時間,會被其它公司占領先機;因為,就像有的程序員所說的,我們根本就不知道客戶究竟想要什么,因為客戶他自己就不知道自己想要什么。他們爭著看誰在最短的時間里能夠拿出一點東西,即使用戶有一百個的不滿意。然而老板認為這樣他們就搶占了先機,就能夠拿出來作為同用戶進行談判的籌碼,也不管它的性能的優劣,然后就把推銷的光榮而艱巨的任務丟給銷售或業務人員,市場的占有份額完全靠這些人員的推銷能力,也不管他用什么途徑,至于以后的問題嘛,以后再慢慢說。于是問題就逐個暴露出來了:
由于為了搶占市場,需要盡快地制定一份需求分析說明,但是這份需求并不是較為完善的(當然了,在沒能達到用戶的滿意之前,也不可能有百分之百的完善,因為眾所周知的原因,客戶的需求是不斷的變化的。我們這里說的是盡可能的完善),因為我們并未同我們諸多的想象中的(或是預期的)客戶進行較多的溝通,可能的就是依賴個別的比較或是非常熟悉這方面的人員來簡單的分析制定一些需求計劃文檔(有的甚至根本就沒有任何文檔,完全地憑口頭的指示)。其實原因很簡單,因為老板有要求,必須要在多長時間內搞出來,否則。。。。。。所以一切從簡了,簡到不愿浪費一點點的時間同客戶進行任何的交流。
這就牽涉到一個問題,如果那些制定需求的人對所開發的行業確實是專家級的,能夠考慮到面臨客戶的盡可能多的需求變化時,這將是非常幸運的,然而,不可能我們每家公司都有一些這方面的專業人才,何況現在的社會提倡打倒權威,我們的客戶似乎也特別熱衷于此,他總能提出一些需要你改變需求的問題,不為別的,只為讓你知道這方面他也是“行家”,所以開發之前我們也要尤其尊重這些人的看法,即使他們真的一無所知。然而時間就是金錢,我們不會浪費時間去和這種人辯解,不會和他們溝通這個問題的比較好的處理辦法,因為我們沒有時間,我們會認為我們所做的就是最好的,即使用戶有一百個的不滿意;所以為了避免出現類似的情況,為了避免浪費向那些白吃用戶們解釋的時間,我們有的項目組(或公司),干脆就閉門造車了。
接下來,就很簡單了,需求分析有了,趕緊搭建框架,建立數據結構,分配任務了,也不去管什么文檔了。這時候的老板恨不得你明天就能拿出來一個東西。沒話說了,開始敲代碼了。
這里就又出現幾個問題:
有時候(并不是所有時候),可能我們公司比較成熟的技術,剛好是現在的客戶所厭倦或是不喜歡的,他們通過某些途徑知道或是了解到了一些比較新的技術,有些對他們來說只是些美麗的花瓶,但他們就要求用這個,沒辦法,顧客就是上帝嘛,我們引進。這時,如果碰到一些比較慷慨的老板,還好辦些,可以花高薪聘請一些高手,假若要是這樣的話,也還不算太差,這樣我們就可以省卻很多用來解決項目開發過程中可能碰到的難題的時間,同時,他們都有著比較良好的開發項目的習慣(我自己以為,如果沒有良好的開發項目習慣的人,水平再高,也不能稱得上是高手,最多只能說是字典),他們在分析處理問題時,本身就會考慮很多用戶需求本身的變化。這樣,我們也會省出一部分開發時間和一部分重構的時間。
然而,并不是所有的老板都很慷慨,也并不是說所有的人都是高手(甚至有的公司為了降低開發成本,根本就沒有或不會去招聘高手),于是,在開發階段問題就出來了,一些入門級的程序員,面對著嶄新的從未接觸過的行業需求,痛苦而無奈的敲著亂七八糟的代碼,他們面對著很多早已經不是問題的問題而陷入查找解決資料的泥沼中,不能自拔,同時還要進行著莫名的需求的變更。并且,有些公司,為了加快項目的進度,在開始階段,就開始加班加點地工作,終于有些人員承受不住這種折磨,開始紛紛跳槽走了,然而,他們不知道的是只不過從這個地獄跳到了另一個地獄;另一部分人,雖然沒有走,但是心情煩躁起來,開始變得失落,沒有任何的成就感,整天似乎就是為了工作而工作,沒有了樂趣,編程再也不是一種享受了,而是一項任務,效率越來越低,但是還要趕時間,因為時間太緊了;同時,走的一部分人員,又需要有新的人員來補充,重新了解需求,了解已走的人的編程習慣,修改甚至重寫一些不太完善或即將完善的代碼,如果沒有較為完備的文檔,花費的時間就更長一點。然而我們沒有時間,不可能讓他花費那么多的時間去熟悉,去了解,他需要匆忙上陣,還要能夠解圍保駕,于是,他就開始按照自己新的一套風格做自己被要求要做的東西,周而復始,代碼越來越難以維護。然而時間還是這樣不緊不慢的走著,需求就在這個時間的流逝中,開始不斷地發生著或大或小的變化,于是,大家也跟著日復一日地修改以前編寫的代碼,同時還要繼續增加那些新的需求里的功能。
好了,終于有一天,你自以為可以長出一口氣了,因為,在你看來,需求里的功能似乎都已經有了,始乎這個項目也已經開發完畢了。于是,開始向老板匯報,開始拿去向用戶演示,雖然那些笨蛋什么都不會,但是還要給他們解釋,給他們做培訓,請他們提要求,因為,這時候才發現,那些白吃們拿著自己想要的money。當然,客戶們也不會放棄展現自己才華的機會,各種意見、需求變更,紛紛從地底冒了出來,然后對這些意見和需求重新評估,重新調整規劃,重新修改需求文檔,調整數據結構,因為客戶雖然不是上帝,但是人家掌握著財政大權,掌握著我們的經濟命脈。于是,一切似乎都又不那么美好,一切都又變得亂七八糟,為了應付不同的客戶,我們開始針對不同的用戶進行不同的修改,因為時間,也許只有這樣,我們才可能盡快地滿足某個用戶,一個又一個版本出現了,當大部分客戶開始要求修改一些東西時,不同的版本一個接著一個開始修改,,再加上有些版本的升級,以致后來有的公司,同一個軟件竟有上百個不同的版本。我們一邊添加著新的內容,一邊修改著軟件中的bug,同時抱怨著時間太緊。我們不斷地抱怨說,如果某個問題當時給我多長多長時間的話,現在就不會怎樣怎樣, 似乎一切都是時間的錯。
然而說實話,即使一切并不都是時間的錯,但時間在這里還是起到了至關重要的作用,最起碼,如果時間不是很緊迫,我們可以制定一份相對較為完善的需求分析,我們也能夠進行一些合適的業務知識的培訓,不可否認,這樣對我們整個項目開發會有不少幫助。
然而,我想說的,其實并不單單的是市場需求的時間緊,這只是一個客觀原因,這個問題我們是避免不了的,但這真的是時間緊嗎?我看未必,如果真的是因為時間緊,那極有可能是我們在不知不覺中浪費了太多。想想上面的情況,我們可以通過其它途徑來加快整個項目的進程,比如,高薪聘請一些高手,這對于一個軟件公司絕對是很有必要的,這樣最起碼可以減少一些不必要的查詢如何解決那些早已不是問題的問題的時間,同時他們還能夠預測到某些做法可能會出現的問題,畢竟他們是有經驗的,這樣也會減少不必要的回頭率。其實這節省的是時間,也是金錢。還有,如果剛開始我們能夠盡可能多的同用戶進行交流溝通,也會減少我們諸多的需求變更,這樣節省的也不僅僅是時間。
當然一個項目開發的成功與否,還有很多其他重要的因素,即使這個時間,也還有很多方方面面,然而,一個項目剛開始時,如果先把成本放在第一位,一切都要考慮降低成本,最終會發覺會消耗更大的成本,因為,時間是項目開發中最大的成本。所以,一旦我們能夠把握住這個項目在時間上的進度,這個項目即使剛開始做,也已經是很成功的了!
聲明:這只是我在項目開發過程中的一些感想體會,僅代表個人觀點,并不針對具體公司和具體人員!同時這份文章還在繼續更新中,歡迎大家一起來探討,項目開發的得失!