2004/12/21

軟體專案委外時要慎選廠商

最近接手了公司的企業網站,因為它發生了異常的DB連線過多的問題,也就是說,我未參與一年前的委外合作,到現在才發生效能降低,與DB連線問題,為什麼會發生這個問題,可能要從評選廠商開始檢討,最重要的是,要如何驗收廠商的專案,並能順利結案。

對於主管來說,專案在決定委外時,就會開始一連串的RFP(Request For Proposal)與評選會議,這時候是最輕鬆的,因為廠商會想盡辦法,天花亂墜地拿到專案的開發權,這時候的廠商也是最卑下的,因為要從各個可能的方面設法打敗其他對手。能夠把專案委外的公司,通常是有相當規模的,也就是認為錢不是問題的公司,但是預算的多寡,會直接影響到專案的品質。

我曾經在不同公司遇過兩種專案,一個是大型專案,由IBM負責開發,這個案子因為過於龐大,專案開發的時程相當地長,測試也比較嚴謹,雖然IBM的產品並不是最好的,但是公認有能力管理專案,也不會瞬間倒閉,所以那時候雖然時程一拖再拖,最後還是可以順利上線。

企業網站的專案是由一家小公司開發,由於公司的預算不足,所以選擇了一個便宜的軟體公司,加上負責這個專案的人不知道怎麼評選與要求軟體公司,所以這個案子的下場就是要讓我來收尾。

我認為評選廠商必須要從幾個方面著手,最重要的是預算,預算的多寡會直接影響參與競標公司的規模,然而這個變因是由公司決定的,身為工程師根本使不上力。然後就是檢視軟體公司的技術,這一點相當地重要,通常在RFP階段時,各家廠商都是由「理級」人士出馬,並由一個工程師報告專案的規劃,在簡報的時後,你會看到一大堆系統的規劃方塊圖,這就是考驗廠商如何劃大餅的時候,餅劃得越大,技術講得天花亂墜,價格壓得最低,越能獲得主管的青睞,因為多數的主管根本不在意技術的問題,只會問參與會議的工程師,「你認為這家公司的技術可不可行?」問了這句話就表示你要為將來的專案成敗負責,也是間接告訴你,將來廠商完成專案後,就是你要負責維護。

身為一個工程師要如何檢視軟體公司的技術能力呢?
1. 檢查廠商的人力素質:就是看對方公司的人力結構,究竟有多少人力可以參與,這些人的背景如何,但這些資料可以動點手腳,所以也只能初步參考而已。

2. 檢查廠商的技術能力:以Java專案來說,詢問一些專業領域的問題(例如J2EE Patterns、OOAD等等),或是該公司曾經製作過的專案情況,如果可能的話,最好要到對方曾經製作過專案的設計圖。

其實光作這些動作,還是有被廠商欺騙的可能,如果能實際看到一些程式碼,可以更精確地瞭解廠商的能力,例如:有沒有使用CVS,如何測試專案,撰寫程式時有沒有coding convention,也就是良好的程式設計習慣。如果能瞭解到這一層的細節,相信能更瞭解廠商的技術本位如何。

企業網站的專案就是被廠商欺騙了,我們後來才發現廠商是「用嘴巴寫程式」,實際上他們根本沒有用過也不瞭解J2EE Patterns的精髓,當初答應的MVC Model 2,變成了JSP內嵌DB程式碼的成果。要預防這種事的發生,參與RFP的工程師是最重要的,因為發包公司必須要懂得相當程度的技術問題,才有能力監控並檢視廠商的能力與實作的成果。

這跟主管如何面試新進員工是一樣的,你要用什麼方法檢視一個來應徵的員工,一般人都是用口述的問答方式,但這對於要求實作的工作來說,是非常危險的,光以半個小時的問答,配合那個新人的經歷與學歷,很難瞭解到這個人的技術能力到什麼程度。如果能夠在面試的時候,實際出一些撰寫程式的問題,不光只是用嘴巴講技術,相信更能夠掌握這個新人的技術能力。


一旦決定了廠商之後,就是實作的過程,在企業網站專案中,發包的單位沒有在第一時間要求廠商進駐,這個錯誤衍生出後來一連串的問題,因為廠商關在自己家裡作架構的規劃與初步的開發,所以我們沒有辦法檢視廠商開發的進度,也沒有辦法在一開始就評估廠商實作架構有沒有問題,如果能在第一時間,就發現廠商的問題,不但可以知道廠商一開始RFP答應做到的事情,究竟有沒有實現,也可以在第一時間要求廠商改進,這時候絕對不能因為會影響結案時程而讓步,以我們企業網站的經驗,就是因為廠商進駐時已經是半成品了,而負責的單位又為了趕上時程,只要求廠商基本功能沒有問題,又要即時結案,程式的架構問題也因此禍延至專案上線後的一年,也就是現在。但這對管理階層來說並不是問題,他只要見到網站可以維持運作,一天重開一次,還是可以接受的,難過的就是負責除錯的工程師,既沒有開發新專案的光環,也不受重視。

記得曾經聽過SUN在大陸有一個技術顧問團隊,專門負責找出Java專案運作的效能問題,作過專案的人應該非常地清楚,要完成一個案子並不難,但要做出一個「好」的案子,就不是三兩天的經驗能達成的,「好」的案子並不是有完整的文件就可以了,軟體專案最重要的還是程式碼,如果程式碼「不好看」,系統架構有問題,要專案上線後要修改就不是一件容易的事情了。