Categories
程式開發

因為忽視技術債,我們差點造成幾十億美元的損失


眾所周知,技術債務非常糟糕。然而,仍然有許多人為了某項新功能的未來價值而寧願背上技術債。在它們眼中,新功能的潛在價值比技術債更重要。有個團隊曾經嘗試過此舉,最終後悔不已。 (本文中使用的名字均為化名)

對Tidal Wave團隊而言,關鍵時刻即將到來。他們新的支付路由系統經受住了Litmus測試的考驗,測試中涉及的少量客戶都是精挑細選的。在這個工作週期(Sprint)中,它們會將產品部署到銀行完整的國際內部支付流程中。這意味著數以百萬計的付款操作,和數以十億美元的資金。

這可是大事!

一件小事

然而,一件發生的小事佔據了開發團隊成員克萊爾和產品負責人傑西的心頭。

克萊爾擔心:“普尼特認為他發現的問題緣由來自生產環境,因為我們之前走了捷徑而沒有採用另一個耗時長卻更嚴謹的解決方案。因此,它無法正常運行。如果開展修復工作,那要花上半個週期(Sprint)。“

傑西:

“這不行,克萊爾,我不能將全部時間耗在這上面。初步分析顯示,我們完全可以繞過問題。我提議,大家先了解下解決辦法,後期再去修復。如今,我們還有更重要的事情要做,不能分神。”

克萊爾:

“傑西,這只是初步分析,我們還不能100%保證我們已經找到問題根源。”

傑西:

“普尼特做的分析,他對代碼瞭如指掌。如果他確定,我百分之百相信他。”

克萊爾:

“我同意。先繞開這部分,但是要記得將這一點添加到’已知問題’中。”

傑西:

“我會將這條寫道產品待辦事項裡,畢竟它遲早是要修復的。”

重要日子

今天很重要,Payment Router正式發布,這可是公司年度最重要的產品發布會,眾人皆到,舉杯相慶。儘管潮汐團隊成員只喝不含酒精的飲料,但依然配有香檳。

公司CTO 瑪利亞發表演講,稱讚團隊的工作,然後按下代表項目開始運行的紅色按鈕。馬上,監控屏幕顯示流量急劇上升,直到達到litmus test的50倍。隨後,上升勢頭保持穩定。歡呼聲響起,他們成功了!

第一天,晚上11:30

普尼特剛到公寓,準備美美地睡一覺。今天很好,一切順利,真完美。

突然,電話聲響起,這是前台打來的。這在意料之中,這個7X24小時的功能才剛上線,因此人們還需要熟悉其工作原理和反饋信息。這就是為什麼本週團隊中有兩人隨時待命。

克萊爾:

“嗨,普尼特,我在監控屏幕上看到一條直線。它不該出現這樣的情況。看起來,程序好像停止運行了。”

普尼特:

“是的,這很奇怪。不,它不應該是這樣。我們去查查,隨時向你匯報最新情況。”

快速分析後,他意識到他必須要給克萊爾打電話來解決這個問題。

普尼特:

“嗨,克萊爾。你還記得幾週前那個生產中的小問題嗎?實際上,問題比我預想的要嚴重,需要修改代碼才能修復這個問題。我們必須立即行動,才能在一小時內解決戰鬥。”

一小時後,克萊爾和普尼特成功部署修復程序。但是,問題依然還在,還是一條直線,修復程序沒有起作用。

普尼特喃喃自語:

“糟糕,情況真糟糕。問題比我預想的要更複雜,我們需要深入分析問題所在。”

克萊爾嘆氣:

看樣子,今夜注定無眠,普尼特。

凌晨2點,電話響了,是CTO 瑪利亞打來的。

瑪利亞:

“問題修復情況如何?我們的客戶都快瘋了。你們知道,這種故障會帶來多大的損失嗎?”

普尼特:

”我完全明白。我們的客戶無法收錢,還是數百萬美元的錢。相信我,我們正在全力解決問題。對我們來說,現在沒有什麼比解決這個問題更重要了。“

瑪利亞:

“需要什麼,儘管說,我會為你們提供任何所需。”

普尼特:

“謝謝你,瑪利亞。如果你能幫我們擋住那些妨礙我們工作的電話和短信,那就更好了。”

瑪利亞:

“沒問題,我會讓他們來找我。祝你們好運!”

克萊爾和普尼特越是深層地排查代碼,他們對問題根源就越迷茫,況且,他們精疲力盡。

他們不得不將這個問題轉交給辦公室中團隊的其他成員。現在是早上九點,專注做事時,時間過得飛快。 30分鐘後,工作交接完成,二人倒頭就睡著了。

第二天,下午3點

普尼特回到辦公室,了解了最新情況,並為接下來的夜晚做好準備。

傑西對他說:“早上11點,我們設法重新上線Payment Router(支付路由),這只是暫時修復。目前,沒什麼大問題。我們現在應該聚焦於永久性的解決方案上。”

當普尼特聽完這個臨時方案的細節後,他不知道如何是好。一方面,他很高興系統再次上線運行,但另一方面,這個方案看起來不靠譜。

普尼特:

“你檢查過,支付的處理速度是否夠快?我擔心,高優先級客戶的付款延遲可能會超過SLA(服務水平協議)。”

十五分鐘後,團隊唯一能確認的是普尼特是對的,支付處理延遲非常高。一切都擠在一起,這種狀況不可持續。

他們決定在臨時補丁上再加一個臨時解決方案,然後採取輪班制工作。早上8點到晚上9點,約翰、卡洛斯和愛麗絲;晚上8點到第二天早上9點,則是普尼特、卡迪克和克萊爾。這樣他們應該能撐過一周,這足以解決問題。

發布會後的第一個月,晚上10點

從車站到辦公室,需要步行五分鐘。對普尼特來說,這簡直是條通往地獄的路。他開始討厭公司大樓的紅磚,公司的logo也讓他有點反胃。

整整一個月,他每週工作90個小時,一直忙個不停。發布前的幾個月,他也不清閒。他們付出了代價,但他知道事情遠遠沒有結束,Payment Router仍然不穩定。

他對這一團糟感到內疚,如果當時進行更深入的分析或者請別人來幫忙,情況可能不是這樣。

克萊爾看到普尼特朝辦公室走來。他又遲到了。而卡迪克沒來上班,因為他的妻子正在做手術。她對整個團隊都很失望。值白班的人甚至都沒象徵性地等她和普尼特一起出現。

她感覺自己像獨自一人,用一人之力堵住堤壩來阻止災難性的洪水。直到卡迪克復工,她要一人扛起整個夜班的責任。她想指責普尼特錯誤的分析,但她也知道自己當初可以阻止團隊做出忽視技術債的決策。

發布會後第三個月

Payment Router(支付路由)仍然可以運行,同時,情況有了很大地改善。在發布會後的第一周,團隊每24小時約有20起一級事件,有6起發生在半夜。現在,已經減少到每天一起一級事件。

團隊設法挽救了銀行聲譽,但這是在“走鋼絲”。如果正式發布日,再次出現大規模故障,那麼一切玩完。忽視技術在讓銀行背負了百萬美元的損失,全力以赴的修復才讓銀行免於數億美元的損失。

你可能對Tidal Wave團隊的後續感興趣。正式發布2個月後,在情況有所改善時,普尼特稱自己過度疲勞。如果繼續在支付路由團隊工作,克萊爾用辭職威脅離開公司。所以,她調任另一個團隊。

現在沒人想接手克萊爾和普尼特的工作,支付路由團隊“聲名狼藉”,而不知內情的兩個外部人填上了空缺位置。團隊中剩下的4人竭盡所能持續改善系統的穩定性。如果說他們還留在公司,那麼唯一的原因就是責任感。

教訓

技術債簡直是無形殺手。如果僅優先考慮新特性而忽視技術債,那麼這是在冒巨大風險。每次你做出這樣的決策時,你都會下意識地選擇忽略質量問題。

從Tidal Wave團隊的經驗中學習教訓,當面對技術債時不要犯錯誤。

原文鏈接:
https://medium.com/serious-scrum/how-ignoring-technical-debt-nearly-destroyed-a-banks-reputation-62efdc3fd968