技術債務真正的代價

無論你是否喜歡把它想成技術債務或是對沖期權,在我們的周圍都充斥著糟糕的代碼,糟糕的決定,以及這些東西給我們每天的生活帶來的影響。但是這些決定所帶來的長期影響會是什么?我們真的做了明智的選擇嗎?Martin Fowler談論了技術債務的四種類型:從魯莽的、故意的到偶然的、謹慎的。

故意不計后果的債務

故意不計后果的技術債務就是這樣的:開發者(或者他們的經理)會允許那些只可能帶來壞結果不可能帶來好結果的決定被通過—例如,放棄TDD或者不用任何設計。無論從什么角度來看,這種做法都是非常不專業的。如果開發人員不能做出正確的選擇,那么管理者就應該介入,并帶入一些能夠做明智選擇的人進來。 Michael Norton將這稱為“令人討厭的行為,而不是技術債務”。如果我們不能從中受益,并且只是簡單地完成任務,寫一些糟糕代碼,那么這根本不是技術債務,這是垃圾。

The true cost of technical debt 2

不易察覺的債務

不易察覺的技術債務比較有趣。如果我們不知道有更好的東西,我們又怎么會去做一些改變呢?工業標準和最佳的實踐都在不斷發展。我確定曾經某段時間EJB被認為是很好的組件模型,但現在它絕對被認為是不折不扣技術債務。當前的最佳實踐方式很容易就變成未來的垃圾代碼。

當開始時,如果我們就已經有了這個領域的知識,或者可能我們從未在這個領域工作過,沒有這個領域的知識,可能設計出來的東西會不太相同。有些時候技術債務是不可避免和必然發生的。

謹慎故意的債務

接下來是謹慎而有意的技術債務,這種情況下,我們會有意做一個決定來增加技術債務。這里就有一個再普通不過的決定:

“不管怎樣,我們要達到這個季度的目標利潤。

我們的市場工作已經開始,所以我們必須在短的時間內搶占市場。

我們已經承諾了交貨日期,所以沒有太多時間給我們去犯錯誤。”

有時,我們必須做一些妥協:通過降低工作成果的品質,我們可以更快的完成工作,但我們會稍晚時候付出代價。

不同于其它的技術債務,這是一種特殊的技術妥協。我們故意做決定讓代碼質量比我們能夠達到的質量要差。我們知道這會在以后讓我們慢下來;我們知道我們需要回來重做,在所謂的“二期工程”里完善它;但是為了在規定的時間內完成任務,我們接受妥協。

它始終都是正確的決定嗎?

1.妥協在短期來看更快,但在長期來看其實更慢

在我們現在就需要的東西與后續可能產生的不明的債務之間做選擇時—顯而易見,我們始終都會選擇妥協。

2.每個妥協都看似渺小,但它們積累起來卻非常龐大

不管有多少人都經歷過“欠債”,技術債務都會積累起來。我們所做的每次妥協都會增加已有債務的代價。這意味著,每次妥協的代價可能很小,但積累起來后它們會產生巨大的影響。

一開始,我決定不重構一些代碼。下一輪時,由于沒有很好的重構,很難測試代碼,所以我跳過了一些單元測試。第三輪時,我的測試覆蓋率非常低,所以我沒有信心進行擴展性重構。現在,這段程序真的變得很難測試也很難修改。我的代碼在一點一點地,越來越快地惡化。每個妥協都堆積在以前的妥協之上,而且將它們放大。每次妥協看似影響很小,但它們累加起來卻讓人大傷腦筋。

The true cost of technical debt 1

3.長期的代價很難被量化

當我們同意不重構一段代碼時,當我們同意留下一些半成品時,當我們同意為了急于通過測試而采用最小測試項時:這真的很難去估計長期的代價。當然,我們能夠估算如何做是正確的—我們知道什么是“真理”。但是,我們如何去估計成本的支出?特別是當它們積累起來時。

我怎么能估計為了解決復雜問題而浪費的時間?時間的損失有可能是因為一個非常難以追查的bug。額外花費的時間可能是因為下一次我無法很容易地重構代碼;或者是因為下一次我不敢重構代碼,但額外的債務使我不得不這樣去做。我怎么可能去量化這個問題?

在IMVU,他們發現他們:

“至少低估了一個量級的技術債務的長期代價”

它始終都是錯誤的嗎?

這里有一些很明顯的例子,它們都在產生技術債務;或者至少做得有些不稱職。如果你想在客戶面前展示一個新特性以判斷其是否有價值,那么它不需要很完美,它只需要迅速地出現在那里就行。如果新特性對客戶沒用,那么你將其刪除。你節省了將其做“完美”的成本,并迅速獲得了你所需要的信息。這顯然是符合成本控制的,是一種管理開發過程的簡易方式。

The true cost of technical debt 3

但是,如果展示的這個特性獲得成功了呢?那么,你需要制定一個計劃清理它,重構它,確保它產生足夠的文檔并被充分的測試。這就是債務。只要你有一個刪除它的計劃,無論這個特性是有用或無用—那么這是一個完美而有效的方式。但如果不是這樣,那么這個半成品特性可能需要數年時間去構建代碼。

不同的是,我們會有一個計劃來消除債務。多久我們就會接受一個模糊的承諾“我們會回過頭來修復它”,或者,“我們會在第二階段完善它”。我的墓志銘應該是“現在開始第二階段的工作”。

在代碼中留下債務,且沒有任何消除債務的計劃,就像一個家伙用一張信用的錢去還另一張信用卡的錢。你讓債務產生,而不去處理它。沒有償還債務的計劃,你最終將走向破產。

技術債務的風險

也許技術債務最大的危害是它代表的風險。技術債務使得我們的代碼更加脆弱,不太容易修改。當我們最近討論這個問題時,正如@bertvanbrakel所說:

“技術債務會使代碼變得僵化”

在我們代碼上堆積的債務越多,代碼就越難改變。這種僵化會帶來最大的風險:我們無法足夠快速地改變代碼。如果競爭環境和監管環境突然變化?如果一個新的競爭對手出現,徹底改變了我們的行業,我們需要多久才能趕上?如果我們只有一個僵化的代碼庫,在我們花2、3或4年時間趕上競爭對手時,我們又能得到什么呢?

當然這是指的最壞的情況,這種靈活性的缺失(缺乏創新)會一點一點地損害公司。一旦一個革命性的公司變成老古板,無法作出反應,并只釋放衍生產品。當公司發現自己無法創新,跟不上不斷變化的局勢—它們就會變得無關緊要。這也就是技術債務真實的代價。

沒有一個償還技術債務的計劃,沒有可靠的辦法來估計它所帶來的長期成本,我們真的可能做出謹慎而故意的決定嗎?這種輕易就能增加技術債務的決定做得是否太草率了呢?


本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/451350.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/451350.shtml
英文地址,請注明出處:http://en.pswp.cn/news/451350.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java 8 Stream的性能到底如何?

Java 8提供的流的基于Lambda表達式的函數式的操作寫法讓人感覺很爽,筆者也一直用的很開心,直到看到了Java8 Lambda表達式和流操作如何讓你的代碼變慢5倍,筆者當時是震驚的,我讀書少,你不要騙我。瞬間我似乎為我的Serve…

【linux】使用swap文件恢復非正常關閉的文件

前言 使用vim的時候,文件編輯過程中可能會出現bug,導致非正常關閉。為了保存剛剛修改的內容,需要對文件進行恢復。 操作過程 1.查看目錄文件 zrjzrj-ThinkPad-E470:~/work/code/facedetection/src$ ll total 48 drwxrwxr-x 2 xxx xxx 4096 S…

js中比較時間字串大小

前些天發現了一個巨牛的人工智能學習網站,通俗易懂,風趣幽默,忍不住分享一下給大家。點擊跳轉到教程。 var start Date.parse($("#str_atBeginDate").val().replace("-","/"));var end Date.parse($("#…

MySQL運維系列 之 如何監控大事務

long transaction背景 大家有沒有遇到這樣的情況 某個SQL執行特別慢,導致整個transaction一直處于running階段某個Session的SQL已經執行完了,但是遲遲沒有commit,一直處于sleep階段某個Session處于lock wait階段,遲遲沒有結束以上…

再見騰訊,創業我來了!!!

發現好久沒有更新博客了,確實自從進了騰訊以后博客寫的寥寥無幾,一來是忙,而來是寫博客沒以前那么有成就感了。但是今天在半夜我又鬼使神差的想寫了,因為尼瑪歐冠巴薩 VS AC米蘭還有將近一個小時,哥實在是等的蛋疼。有…

“docker-app”實用工具分享,大大提高 Compose 文件復用率

本文首發自“Docker公司”公眾號(ID:docker-cn)編譯丨小東每周一、三、五 與您不見不散! Docker Compose 在開發人員中非常流行,它用來描述應用程序。目前,GitHub 上有超過30萬個 Docker Compose 文件。通過…

9.11學習筆記

備注&#xff1a; <span class"kp"> <a href""></a></san>a 是特殊的 要改變a里面的顏色&#xff0c;必須直接給a設置&#xff0c;給a的父級設置不行 屬性繼承&#xff1a;明明是父級上設置樣式&#xff0c;結果后代標簽也跟著發生…

bootstrap-validator 驗證一個標簽同時驗證另一個指定標簽

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 如圖 驗證 str_atBeginDate 同時把 str_atTermDate 也作一次驗證&#xff1a; 注意 紅框中 " value “ 不能少&#xff0c;我之…

solr基本查詢和高級查詢

查詢參數常用&#xff1a; q - 查詢字符串&#xff0c;必須的。fl - 指定返回那些字段內容&#xff0c;用逗號或空格分隔多個。start - 返回第一條記錄在完整找到結果中的偏移位置&#xff0c;0開始&#xff0c;一般分頁用。rows - 指定返回結果最多有多少條記錄&#xff0c;配…

送給“苦逼”的IT人系列

送給“苦逼”的IT人系列1&#xff1a;IT人的“錢”景以及收入的兩道坎 雖然IT工作五花八門&#xff0c;而且年紀有老有少&#xff0c;但IT人的收入總體還是比較有規律的&#xff0c;很明顯的可以看出有兩道坎&#xff0c;分別是10W&#xff0c;和30W&#xff0c;當然&#xff…

銳動SDK應用于行車記錄儀

方案架構手機端直播與錄播功能忠實記錄旅途中各種突發事件&#xff0c;還原事實真相&#xff0c;與家人和朋友分享沿途美景&#xff0c;一同感受美妙之旅。強大的視頻編輯功能&#xff0c;像編輯圖片一樣給視頻添加各種濾鏡&#xff0c;配音&#xff0c;配樂&#xff0c;標題文…

Angular4 存儲訪問路由棧信息

一、實現方法1.可以通過路由守衛&#xff0c;可以給父級路由添加&#xff0c;若無父級路由&#xff0c;則需要每個路由都需要添加守衛&#xff0c;即每個頁面都需要調該方法例如&#xff1a;jdb-app端上的tool.service.ts是每個頁面都會調取的方法&#xff0c;可以將監聽路由函…

python基本語法:字典

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 一、數據類型和對應符號&#xff1a; 元組 ( ) 列表 [ ] 字典 { } 二、字典是python中唯一的映射類型&#xff08;哈希表&#xf…

網址URL中特殊字符轉義編碼

字符 - URL編碼值 空格 - %20" - %22# - %23% - %25& - %26( - %28) - %29 - %2B, - %2C/ - %2F: - %3A; - %3B< - %3C - %3D> - %3E? - %3F - %40\ - %5C| - %7C…

無病呻吟系列

無病呻吟1&#xff1a;給應屆生的話 講到第一份工作&#xff0c;自然要給應屆畢業生一點建議。 其實這不是我的初衷&#xff0c;寫這篇文章的主要目的&#xff0c;是給那些工作了3,5年&#xff0c;正進入迷茫期或已經進入迷茫期的人看的。至于應屆畢業生&#xff0c;我想&…

JavaScript實現向OL列表內動態添加LI元素的方法

2019獨角獸企業重金招聘Python工程師標準>>> <script type"text/javascript"> function addItem() {var myitem document.getElementById("ItemToAdd").value;var mylistItems document.getElementById("mylist");var newP …

【blockly教程】第五章 循環結構

在這里&#xff0c;我們將介紹一個新游戲--Pond Tutor 在Pond Tutor(https://blockly-games.appspot.com/pond-tutor)這個游戲中&#xff0c;我們將扮演黃色的鴨子&#xff0c;通過不斷的發炮彈去攻擊紅色的鴨子&#xff0c;當紅色的鴨子血條減為0時則玩家獲勝。在這個游戲中為…

數據的PB級別是什么?

PB是數據存儲容量的單位&#xff0c;它等于2的50次方個字節&#xff0c;或者在數值上大約等于1000個TB。”一提到數據量級&#xff0c;人們通常會聯想到美國國會圖書館&#xff0c;德勤、麥肯錫、IBM、Gartner和移動廣告公司。Adfonic的數據專家向TechTarget記者介紹了PB級數據…

js 獲取字符串最后一位的4種方法

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 方法一&#xff1a;運用String對象下的charAt方法 charAt() 方法可返回指定位置的字符。 復制代碼代碼如下:str.charAt(str.length – …

360董事長周鴻祎跨足手機市場是福還是禍?

編者按&#xff1a;奇虎360董事長周鴻祎做的這個“思考了半年”的決定&#xff1a;進軍智能手機&#xff0c;是于5月4日夜10時45分。他所發布新浪微博稱&#xff1a;“現在每個人都想擁有高性能的智能手機&#xff0c;高富帥白富美人手一iPhone&#xff0c;難道吊絲只能買便宜低…