軟件開發故事-我對CTO撒謊並挽救了項目

進擊的代碼 2024-05-10 19:36:10

原文[1]:GrumpyOldDev[2] - 2024.04.18

這是幾年前的事情了。還記得在我職業生涯的初期,父親曾告訴我,做好工作往往意味著要在上司的阻礙下做好需要做的事情。他的意思是,你可以讓上司成功並感到快樂;也可以讓上司做每一個決定,在這種情況下,沒有人會成功或快樂。

當時,我在一家財富 500 強公司工作,我們的 CTO 承諾要爲一個重要的客戶交付一個大項目,他與該客戶有私人關系。他還決定將其中的一個關鍵部分外包給一家大型技術服務公司,該公司聲稱他們有一款産品可以爲我們完成大部分繁重的工作。

在我的職業生涯中,這種情況很常見,當供應商說他們有一款産品時,真正的意思是他們一個隱約類似于産品的東西,在某種程度上符合我們的需求,並且通過大量的定制,他們可以把它改造成我們需要的樣子。當然,通過定制他們的“産品”,我們巧妙地結合了供應商軟件的所有缺點和定制軟件的所有缺點。我們同時實現了“壞主意”中的“聖杯”:一個不靈活的供應商軟件包,必須被強迫去做它並未設計去做的事情,還要從他們的主産品代碼庫中分叉出來 -- 一旦供應商意識到維護它的成本有多高,它就會被淘汰。我們彼此抱怨這是一個多麽可怕的馊主意,尤其是考慮到供應商在不按時交付産品方面的“良好記錄”。

由于 CTO 每年都會更換他的直接下屬,每次關于項目的狀態都會是一些“老板,這是個好主意”,盡管根本沒有人認爲這是個好主意。

甚至連一般的主意都算不上。這是一個壞主意。

項目的其他部分都需要在公司內部進行大量開發,所以我們也有自己的挑戰,忙得不可開交。但即便如此,隨著整個夏天項目日期的推遲,供應商承諾他們的産品隨時都可以集成到 10 月份的發布日期,除了 CTO 之外,其他人都越來越明顯地感覺到項目遇到了麻煩。終于在 8 月份,供應商交付了他們的“産品”,我們開始了與之集成的死亡之旅。

9 月份,我們遇到了一個令人沮喪的錯誤。供應商的産品將每筆客戶交易以 json 記錄的形式存儲在一個巨大的 json 文檔中(注:此處的 json 文檔存儲在 MongoDB Collection)。因此,隨著測試數據的積累,産品的性能變得越來越慢。添加一個新的交易需要從數據庫中讀取整個 json 文檔,然後將新記錄添加到文檔末尾。供應商聲稱,他們可以通過索引交易字段來解決這個問題,這似乎有點幫助,直到我們遇到了第二個問題。

他們選擇的數據庫是 MongoDB,而當時 Mongo 的記錄限制是每個文檔 16MB。因此,到了 10 月份,當實施團隊開始將真實的客戶數據放入其中時,我們遇到了 16MB 的限制。事情開始變得有趣了起來,我們決定向客戶隱瞞這一限制,並推遲一個月上線,但同時啓動了一個小型項目來替換供應商集成,而且也沒有告訴供應商。因此,我們同時欺騙了客戶和重要的技術合作夥伴。

當時的“暴躁老開發者”更像是一個“熱情的年輕開發者”,于是他組建了自己的團隊來開發替代産品。供應商有 70 多人參與了這個項目,團隊只分配了 3 個人來替換它。一個負責設計數據庫,一個負責構建與數據庫接口的後端,還有一個負責構建業務邏輯/網絡服務。

客戶被告知,我們將在 1 月份推出新版本供他們測試。新版本將修複他們在最初上線時遇到的最嚴重缺陷。但他們並不知道我們正在重寫整個核心系統。這只用了不到兩個月的時間,而原始的項目啓動用了一年多的時間。只有 3 個人,還是在假期裏(你看這是怎麽回事)。

于是,大約在 12 月中旬,所有參與項目的人都被告知(不是要求)要在假期中工作。

要知道,在過去的 6 個月裏,我們中的大多數人已經每周工作 60-80 個小時,只爲趕上原定(大約)的發布日期。

每個人都累壞了。

此時此刻,如果你正在閱讀這篇文章,而且你不是一個以交付爲導向的技術人員,可能會覺得這太瘋狂了,是時候辭職了。你是對的,但是,我們中的許多人真的很喜歡軟件開發,感覺有點像搖滾明星。你花了幾個月甚至幾年的時間來准備這場“演出”,然後發布日期就像一場表演,你想在發布日期一炮而紅。部分原因就像劇院裏的人:演出必須繼續。但你也想在自己的辛勤工作第一次與真正的用戶見面時,感覺自己像個搖滾明星,感受到“我做到了”的快感。人們喜歡我做的事情,我戰勝了不可能。對于內向的人來說,軟件發布就像是現場表演。

所以,到這個時候,已經快到聖誕節了。團隊基本上用一個月的時間就完成了替代軟件的開發,還有一些功能有待完善。但這些開發人員都很聰明,他們一直在按部就班地工作,我知道,如果他們不精疲力竭,我們一定能趕上測試日期。

所以,當 CTO 來找我,說假期被取消時,我說“好吧”...

然後,在我一生中最自豪的時刻,回想起父親關于不顧上司阻礙完成工作的建議...

我告訴團隊中的那三個人,“休息一周,我來搞定。”

每天早上,我都會參加 CTO 強制性的死亡進度電話會議,然後我撒謊:

“團隊正在努力工作,今天我們達到了第 73 個集成點。”“團隊昨天進展順利,我們又完成了一項網絡服務”

每天我都會出現在大老板面前,告訴他我們正在努力工作,而這些工作已經在上個月完成了。

一周後,夥伴們回來了,他們精神煥發。

我們在一月份准時完成了任務,上線後取得了很好的效果,短暫的時間裏我們成了“搖滾明星”。也許更像是 Herman's Hermits[3],而不是 The Beatles[4]。但是,感覺仍然很好。

這就是我向 CTO 撒謊的經曆。

參考資料

[1] 原文: https://grumpyolddev.com/post/the-one-where-i-lie-to-the-cto/

[2] GrumpyOldDev: https://grumpyolddev.com/

[3] Herman's Hermits: https://en.wikipedia.org/wiki/Herman's_Hermits

[4] The Beatles: https://en.wikipedia.org/wiki/The_Beatles

0 阅读:2

進擊的代碼

簡介:程序員,分享生活、工作、技術、學習。