地獄專案後續追蹤 | 失敗專案大全
Length: • 1 min
Annotated by Jimmy Su
幾年前,我受聘為一家法國大型科技公司的軟體專案擔任顧問。在那裡目睹的一切,完全超乎我對軟體工程的所有想像。比專業能力不足更嚴重的是對人性尊嚴的極度蔑視,這讓我在某個時刻將整個經歷比擬為(我想像中的)監獄生活。以下列舉幾個重點來說明我的觀點,但請自行判斷。
Scope
為政府機關開發一套軟體。複雜度大概跟 Windows 小畫家差不多,只是多了些變化。沒在開玩笑。
政府預先支付數百萬歐元,開發時程預計為 2 至 3 年。公司僱用幾名開發人員開始工作,隨著資金開始流入,大約每 3 個月就將團隊規模擴大一倍。
7 年後,該專案仍未有像樣的進展。每天產生的罰款高達數千歐元。管理層決定降低成本,解僱所有有經驗的人員,改為僱用幾乎沒有軟體經驗的新人。
10 年後,鑑於專案的災難性狀態,中階管理層決定僱用一些具有軟體工程經驗的人員以重回正軌。新進人員的平均流動率為 3 個月,這是法國法律規定的離職預告期。
12 年後,該專案仍在進行中。公司通過向政府收取不斷增加的變更請求費用來彌補每日罰款。當時是 2008 年。
Figures
- 600 萬行程式碼
- C++ based
- 50,000+ 個類別
- 使用的 C++ 版本已過時,被鎖定在僅由一個(未維護的)作業系統發行的編譯器版本中。
- 基於 CORBA
- 來自已倒閉公司的資料庫軟體
- 圖形使用者介面由多層架構堆疊而成,且沒有任何一層是由原作者維護的。
- 在 32 台平行運算機器上需要 48 小時才能完成建置。
- 執行一個使用者介面需要同時運作 40 到 50 個程序
- 沒有動態程式庫連結:執行檔大小高達數百 MB
- 啟動時間約需 15 分鐘
- 平均當機間隔時間:30 秒到 30 分鐘
沒有軟體工程師會告訴你 C++ 是種簡單的語言。事實上,就複雜度而言,它可能是最糟糕的電腦語言之一。它複雜到連創造者都承認尚未完全掌握所有細節。可參考這個著名的惡搞 Stroustrup 訪談: http://www-users.cs.york.ac.uk/~susan/joke/cpp.htm
面對如此令人難以置信、深不可測的複雜迷宮,人們往往會有不同的反應。那些自詡為極客的傢伙們都聽過 C++,想證明自己也能駕馭它。他們毫無畏懼地一頭栽進去,結果被搞得面目全非,花費無數時間試圖弄懂為何滿頁的天書程式碼會毫無緣由地不斷當機。而比較理智的人則會迅速轉向其他程式語言和專案,畢竟人生苦短啊。
無論用哪種程式語言,維護龐大的軟體程式碼都是項艱鉅任務。想像一個團隊必須維護 600 萬行程式碼,你就能體會軟體工程領域的瘋狂程度。600 萬是個驚人的數字:如果你想快速瀏覽所有程式碼,以每秒一行計算,你得在螢幕前不眠不休地盯上將近 70 天 。
先舉兩個小故事讓你感受一下:
有位開發人員接到任務,要檢查為什麼在介面上點擊右鍵會讓應用程式完全凍結。經過數天仔細檢查和驚人的耐心後,他發現右鍵功能其實正常,只是彈出右鍵選單需要約 45 分鐘。每次在主視窗點擊右鍵時,所有選單都是從龐大(且靜態!)的內容動態生成的。
有段時間終端使用者回報「從光碟載入資料」功能完全無法運作。這個問題花了數週才釐清,但最終錯誤報告被標記為『已解決』,因為資料確實有在載入。唯一問題是載入 700 MB 的資料需要整整 7 天。耐心是一種美德。
版本控制大暴走
團隊花了數年時間,直到有位聰明的同仁提出使用版本控制工具的想法。第一次嘗試並不理想,因此團隊轉而使用另一套系統,幾年後又換了一套,每次更換都遺失了所有歷史紀錄。
最終選擇的工具簡直是場災難,它的圖形使用者介面簡直是直接從瑞典進口的糟糕設計。甚至有四人團隊全職負責處理這套版本控制軟體的大部分維護問題,導致以下情況:
- 首次進行簽出(checkout)必須先與版本控制團隊預約,通常要等上一週才能排到。
- 未經中階管理層授權不得編輯檔案。你必須事先告知主管想編輯哪些檔案,然後發送正式權限申請,由版本控制團隊歸檔處理,可能要等上好幾天才會採取行動。
- 每次修改程式碼都會觸發分支,這意味著你必須合併所有收到的修改。你可能會認為在這麼多檔案中,兩個人同時修改同一個檔案的情況很罕見,但結果顯示大部分工作都集中在相同的 100 個檔案左右。
- 提交程式碼需要經過一個痛苦的流程,你的程式碼會先由自動錯誤檢測軟體審查,最後再由中階管理層審核。不用說,這並不能防止錯誤的產生速度超過開發人員修復的速度。仔細觀察已登記的錯誤數量會發現,每修正一個缺陷,反而會引入兩倍多的新錯誤。
- 版本控制很簡單。舊軟體是第 1 版,現在的軟體是第 2 版,未來的軟體是第 3 版。實際上沒人知道客戶拿到的是哪個版本。
某個時間點,官方排定了交付日期,完全沒有參考團隊內部的任何規劃。到了當天,客戶實際收到的是一張空白光碟與安裝說明,因為團隊已經好幾週都無法成功建置軟體。客戶發現收到的是空白光碟後提出正式投訴,結果只拿到舊版本來取代先前的交付品。他們是從「關於」方塊中顯示的日期與去年相同而發現問題。
《Peopleware》
付花生,請猴子。(意指低薪只能請到庸才)
在團隊中有大量毫無軟體工程經驗的人員情況下,程式錯誤不斷大量湧現,這真的令人意外嗎?一位「聰明絕頂」的主管想必已意識到,在純軟體專案中,人力成本才是主要開銷來源。但這個驚人發現絲毫沒有阻止他的決心,他決定解僱所有具備任何經驗的員工,只保留所有主管階層。當時在許多人的辦公桌上看到《C++ 入門指南》可說是司空見慣。
團隊介紹
團隊共 55 人:20 位開發者,35 位主管。沒錯:主管人數比實際開發者還多。主管們不斷召開會議,重複展示著令人作嘔的相同 PowerPoint 簡報,而開發者們則在廣闊的開放式辦公室裡閒聊打發時間。很少有經理具備軟體工程的經驗。當時 SCO 正因 Linux 對 IBM 提起訴訟。即使整件事只是虛張聲勢,但對那些人都很有效——他們全都明白自己很快就得為自由軟體付費。他們從不提「Software Libre」,但都清楚「Software Gratuit」的意思。不用說,這個專案到處都摻雜著 GNU 函式庫,而這些人完全沒意識到這會讓整個專案變成一個龐大卻未共享的 GNU 相容專案。不過話說回來,考慮到這東西的品質爛到極點,根本不會有人堅持要求他們公開原始碼。
技術知識相當匱乏。很少人了解網際網路,知道的人也都認為那只是用來看色情內容的。要是提到你在網路上看過什麼,只會換來曖昧的眨眼和微笑。
歡迎來到地獄
要不是高層主管決定表現得像集中營裡的納粹,整個經歷本來可能還滿好笑的。舉幾個例子來說:
- 禁止在上午 9 點後到班。某天,現場主管駐守在大門後方,當場開除所有在 9 點 01 分後進門的人,包括數名經理與業務人員。
- 抽菸者休息次數較多,因此產出較少。管理層試圖強制所有人戒菸,但未見成效。
- 咖啡機經常故障數天。喝咖啡的人生產力就是不如坐在位子上、飛快敲出珍貴程式碼的人。
- 每當有官員來訪,這些咖啡機就會被關掉,營造出所有人都在認真工作的假象。
- 廁所是我見過最噁心的。背後的邏輯大概是提升生產力:在廁所待的時間越短,工作時間就越長(效率也更高)。
你可能會好奇,為什麼人們會持續在這樣的環境中工作。首要且主要的原因是當時法國正經歷嚴重的經濟危機(某種程度上至今仍是如此)。無論附帶什麼條件,能擁有一份工作和薪水都被視為一種特權。
另一個原因是,對許多人來說,這是他們獲得的第一份正職工作合約。在沒有任何參照標準的情況下,你根本無從判斷自己的工作有多糟糕。多數職場新鮮人認為,明明沒有任何實質要求、純粹只是主管心理變態的情況下,被迫必須在早上 9 點整到班否則就會被開除,是再正常不過的事。關於政府為何會讓這種事發生:我們都心知肚明。部會裡負責預算的官員與多家企業的高層主管都是哥兒們。在法國這樣的國家,這種層級的貪腐並不罕見,大多不會被發現,也很少被起訴。顯然這不僅限於法國。我在歐洲和美國各地都聽過類似的情節。
下次你覺得工作很爛時,再仔細想想。
相關網站: