2011年初接手XX考試專案至今,中間歷經數次的需求整改,屢次的開會討論需求,終於像小孩學步一樣蹣跚的完成了這個專案的前期開發工作,期間的酸甜苦辣,只有自己能品嚐。
   我接手專案的時候,專案已經開始,技術選型已經確定,因為是Java開發,難免採用SSH老一套,並且已經做了部分開發工作,因為開發任務緊張,我們就在原先的基礎上進行了開發至今,但是越開發到最後,就發現專案的可維護性與可管理性有著很嚴重的問題,最可悲的是沒有測試程式碼,任何一個錯誤都可能引起全域性的變化,自動化測試也沒有。
   因為採用Java開發,專案的需求決定了技術的選擇,因為這個系統可以同時允許多個考試同時執行,並且每個考試相互獨立,各個考試之間並沒有直接的關係,並且在考試開始之前定義報名欄位,報名的樣式之類的操作,所以報名欄位基本上可以說是欄位是動態的,並且一次考試的壓力大,不能影響其他考試的報名,所以在初期我們選擇了資料庫分庫的形式,即一次考試一個獨立的庫,各個庫之間沒有關聯,但是程式還是放在一起,其中如何解決動態建立、載入資料來源,採用什麼方式運算元據庫都有過很多爭論,幸好我們解決了這一方面的問題。
   專案開始時,專案組有4-5個人,其中我們2個人負責核心業務的開發,並且工作量特別大,於是進行了封閉開發,在瞭解需求的基礎上,我們悶頭開發,相互溝通不是很多,最可悲的是,這傢伙受不了折磨走了,當然待遇是最重要的原因,結果他一走搞的我很被動,因為我們兩個人的開發的業務不一樣,個人本身的開發工作量挺大,我接手他的工作困難挺大,最可悲的是把專案交給了完全不瞭解的人,並且此人到現在都沒加入專案組,數次倒手,情況可想而知。
   都說成本,進度與質量是個三角形的關係,這個我們也知道,畢竟計算機科班出身,這點還是瞭解的,但是專案組頻繁的換人,進度無限壓縮而成本控制又太嚴格,質量就不用說了。在專案緊張的時候,領導說,再加幾個人就可以了,當時很無語,真的加幾個人就可以了麼?這讓這個專案很悲劇,而新增進來的人水平參差不齊,而對於我,除了成天嚷嚷他們外,沒有任何辦法,讓他們離開專案,不可能,離開了沒有人再加入進來,大家都很辛苦,特別是在我的成天怒吼下,我想請他們出去玩玩,放鬆下,不可能,專案沒有特別的資金,當然有幹得不錯的傢伙,給他們點獎金吧,不可能,說了不算,太無語了。
   我是個專案管理的新手(說好聽點叫專案管理,難聽點是什麼都幹,出了問題領導可以點名罵你,而我除了分配任務外,檢查任務外,其他的權利什麼都沒有),管理能力有欠缺,也很感謝專案組成員能忍受的了我成天怒吼,也非常期待有專案管理方面才能的人才給與迷茫中的我指導。
   所以專案能堅持到現在,對我來說,我個人覺得是個奇蹟。但是我仍然從其中學到了不少東西,大部分都是專案管理類的東西,總結一下,希望能走出軟體作坊:

1、公司離開誰都是損失,這不符合軟體公司發展。
   任何人到公司,首先安排重要的工作給他,等他有其他的想法或者工作呼叫,此部分工作重新安排或 找其他人接手,對專案進度和質量是嚴重的打擊。  原先有朋友在XX公司,普通開發人員是使用他們公司自己開發的中介軟體或者元件進行開發,對於核心的開發並不參與,其中有些人離職或者其他的原因調離此崗 位,對專案的進度和質量沒有太大損失,我們按照元件式的開發是個開始,我們的目標也應該是朝這個方向努力,逐漸擺脫軟體作坊式的開發。
2、客戶負責測試,我們是錯誤驅動或者是bug驅動開發。
   我們的東西出來,一般沒有專業的測試人員去測試,而是由開發人員自己測試,一方面時間上不是太充裕,另一方面自己開發的程式自己測,也測不出什麼問題來,等  客戶使用的時候,就會出現各種問題,我們再負責去修改和改正錯誤,對我們的專案或產品來說是一種失敗,同時對客戶體驗來說,也是對我們非常不利的。
3、各個專案的技術選擇
   我們什麼技術都用,什麼技術好用什麼,每個專案的技術使用都不一樣,特別是Java,今天出一個框架,明天又出一個,我們頻繁的選擇,頻繁的更改,實際上是一種錯誤,最後什麼都沒有沉澱下來,任何一個專案開始都是從頭開始,並且各個系統難以整合。

   發了那麼多得牢騷,帶著這麼多的迷茫,馬上就迎接2012年的到來了,至於瑪雅人說得世界末日我們也不管了,把明年的工作以及稍微整理下吧。
   歷經和客戶多次開會討論需求,自己對需求的理解能力和客戶想要的東西也逐漸掌握了,此專案看似簡單,實際上是有至少10個子系統組成的有點規模的系統,無論是在開發,還是在部署的時候,都對我們提出了更高的要求,所以為了更好的服務於客戶,我們絕對2012年對專案進行重構,具體目標有:

  1、核心業務系統引入SOA,通過服務編排以及服務治理,更高效合理的管理業務平臺。
              2、為了迎接更大量的業務,引入資料水平和垂直分割資料服務系統。
              3、鑑於系統由多個系統組成,並且系統之間存在無數次的互動情況,在SOA的基礎上,形成資料交換系統。 
              4、前端引入HAPoxy,Memcached叢集。
              5、全面引入虛擬化(VSPHERE 5),更強更好的組織伺服器資源,當然,這也與程式開發無關。 
              6、引入Hadoop雲端計算平臺,用於日誌分析以及訪問資訊審計。

希望此願望在2012年能實現,阿彌陀佛,上帝保佑,阿門阿門!