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