技术债务就像俄罗斯方块,你永远都赢不了!
作者 | Eric Higgins
譯者 | 無明
和大多數玩過俄羅斯方塊的人一樣,我也很喜歡這個游戲。我仍然記得第一次在任天堂游戲機上玩這個游戲時的情景。游戲的背景音樂仍然時??M繞在我的耳邊。俄羅斯方塊不僅是有史以來最好玩的游戲之一,我們還可以拿它與技術債務作類比。
我將分享我和我的團隊如何通過修改代碼來減少技術債務,并修復了一個價值 100 萬美元 / 年的 bug。
剛開始的時候任務都很簡單,因為沒有什么復雜性在軟件公司里,產品經理或項目經理與軟件開發人員合作,根據客戶優先級來開發和交付代碼。我們把消除一行俄羅斯方塊比作發布一個新功能。
在技術債務還沒有那么多的時候,即使稍微復雜一點的任務也能輕松應對交付一個復雜的功能等于要消除更多的行。
通常,為了按時交付,我們需要在業務需求(新特性、新產品)和代碼(hack、捷徑)之間做出權衡。要么修改產品策略,導致與以前的設計不兼容,需要額外的工作來遷移客戶,要么同時支持新舊兩套邏輯。
少量的技術債務是正常可控的于是,技術債務出現了。俄羅斯方塊中出現的空格就代表了技術債務。
所有的代碼都會有技術債務,這是很正常的。在玩俄羅斯方塊的時候,或多或少都會出現幾個空格。
淹沒在技術債務中過多的技術債務導致新功能和 bug 修復無法在合理的時間內發布。
這個問題無法通過增加或替換開發人員來解決。在某種程度上,它之所以被稱為技術債務,是因為我們需要償還它。
償還技術債務可以讓你保持競爭力,讓你的游戲可以繼續。
游戲結束就像經營一家企業一樣,玩俄羅斯方塊的時間越長,難度就越大。方塊移動的速度越來越快,很難跟上它們的速度。
就像經營一家企業一樣,你永遠也無法在俄羅斯方塊這個游戲中勝出。因為它沒有真正的終點,你只能控制輸掉游戲的速度。
就像經營一家企業一樣,在俄羅斯方塊游戲出現的空格會讓你輸掉游戲。
百萬美元 bug
不久前,我和我的團隊接到一個任務,負責更新產品代碼中的賬單和發票邏輯,以支持新的定價計劃、新的支付處理器和改進的賬單工作流。產品團隊還在討論某些細節,于是我們利用這段時間深入研究了現在的代碼。在對代碼有了更好的了解之后,我們就能夠對即將到來的變更做出更準確的估計。
那些代碼的基本功能是遍歷每個客戶的帳戶,計算他們的賬單,并將它們發送給票據 API。之前寫這些代碼的人顯然很小心——不能說它們雜亂無章,但起碼太缺乏靈活性。它是一個很長的函數,沒有測試,只有很少的日志,而且幾乎沒有任何注釋。這些代碼是公司的一個聯合創始人在 5 年前寫的。從那以后,唯一一個改過這段代碼的人已經不在公司了。
這有問題嗎?發票發出去,公司賺到錢,好像沒有任何問題。我們好像也沒有必要進行重構,但我們知道即將會發生一些重大的變化,因為這個函數不能按照我們的需求進行伸縮,如果這個部分可以被簡化,我們就可以走得更快。
我們在一個 sprint 中重構了這個函數,并增加了一些日志。直到那個時候,我們才發現我們實際上修復了一個什么樣的 bug!會計團隊的一個工作人員跑到我們的辦公桌前,問我們為什么發票的數量增加了這么多。因為舊代碼有一些問題,一些客戶的使用情況并沒有記錄在發票上。據我們估計,這樣造成的發票丟失每年總額超過 100 萬美元。
償還債務并不總能帶來回報
這個故事是真實的,但償還技術債務并不總是會產生如此戲劇性的效果。只能說我們當時很幸運。
找到技術債務的平衡點我希望我能夠就何時償還技術債務提出明智的建議。然而,這個問題的答案是:這太復雜了,而且我們往往需要做出某種程度的權衡。你的代碼可以是世界上最干凈的,并且經過了最全面的測試,但用戶可能不會為它掏錢。相反,你的代碼也可能非?;靵y,但這些代碼可以取悅用戶,并讓他們為它掏錢,公司因此賺得盆滿缽滿。
我能給出的建議是,產品所有者和開發人員應該在理解技術債務上達成一致,技術債務是永遠無法避免的。畢竟,就像俄羅斯方塊一樣,在軟件開發中,你永遠無法贏得這個游戲。
?英文原文
https://medium.com/@erichiggins/technical-debt-is-like-tetris-168f64d8b700
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的技术债务就像俄罗斯方块,你永远都赢不了!的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 1万属性,100亿数据,每秒10万吞吐,
- 下一篇: 我为什么逃离无人车公司