概述
代碼寫好就交,意味著欠債的開始。稍微欠點(diǎn)技術(shù)債得確可以加快速度,但前提是事后及時(shí)重寫代碼,如果只借不還,后果很危險(xiǎn)。在不準(zhǔn)確的代碼上所花費(fèi)的每一分鐘,都算是技術(shù)債的應(yīng)付利息。不穩(wěn)定、脆弱的代碼實(shí)現(xiàn)所引發(fā)的債務(wù)負(fù)擔(dān),會(huì)使整個(gè)工程組織陷入裹足不前的艱難境地。
團(tuán)隊(duì)和組織在深入了解業(yè)務(wù)領(lǐng)域的同時(shí),還要注意償還技術(shù)債;
系統(tǒng)的設(shè)計(jì)和實(shí)現(xiàn)需要跟進(jìn)以便更好地運(yùn)用這些認(rèn)知。
技術(shù)債既指我們有意選擇的捷徑,又指許多損害軟件系統(tǒng)的不良實(shí)踐。不合適的設(shè)計(jì):因?yàn)楫?dāng)前所用技術(shù)或業(yè)務(wù)發(fā)生重大改變,我們之前有效的設(shè)計(jì)變得不再適用。
缺陷:我們已知但沒時(shí)間解決的軟件中的問題。
測(cè)試覆蓋不充分:有些地方我們明明知道該怎么做更多測(cè)試但是沒有做
手工測(cè)試過多:實(shí)際該做自動(dòng)化測(cè)試的時(shí)候我們還在做手工測(cè)試。
集成和版本管理不善:在做集成和版本管理的時(shí)候,采用的方式既費(fèi)時(shí)又容易出錯(cuò)。
缺乏平臺(tái)經(jīng)驗(yàn):例如需要某個(gè)技術(shù),但是相關(guān)人員卻不多。
技術(shù)債的后果
爆發(fā)點(diǎn)不可預(yù)測(cè)
技術(shù)債有一個(gè)特性就是不可預(yù)測(cè)的非線性方式增長。在原有債務(wù)基礎(chǔ)上增加任何一點(diǎn)技術(shù)債,都會(huì)產(chǎn)生顯著的危害,遠(yuǎn)遠(yuǎn)超過新技術(shù)債自身的隱含的危害。
交付時(shí)間延長
承擔(dān)技術(shù)債意味著現(xiàn)在向未來申請(qǐng)借用工作時(shí)間。今天的債務(wù)越多,明天的速率就越慢。
缺陷數(shù)量多
技術(shù)債務(wù)狀況嚴(yán)重的產(chǎn)品變得越來越復(fù)雜,因而也更難把事情做對(duì)。
開發(fā)和支持成本上升
技術(shù)債一增加,開發(fā)和支持成本也會(huì)開始增加。過去一直簡單又便宜,現(xiàn)在變得復(fù)雜又昂貴。
產(chǎn)品萎縮
如果對(duì)老產(chǎn)品停止增加新特性或修復(fù)缺陷使其煥發(fā)活力,它對(duì)當(dāng)前或潛在客戶就會(huì)變得越來越?jīng)]有吸引力。最后導(dǎo)致產(chǎn)品開始萎縮,不再是大多數(shù)客戶愿意考慮的方案。
可預(yù)測(cè)性降低
如果產(chǎn)品確實(shí)已經(jīng)債臺(tái)高筑,基本上不太可能進(jìn)行任何形式的預(yù)測(cè)了。
表現(xiàn)越來越差
技術(shù)債越來越多,人們預(yù)計(jì)工作表現(xiàn)越來越差,進(jìn)而降低他們對(duì)結(jié)果的期望。
挫折感四處彌漫
客戶滿意度降低
技術(shù)債的起因
如期完成工作
策略性技術(shù)債和低級(jí)技術(shù)債通常都是迫于業(yè)務(wù)壓力而必須滿足某個(gè)迫在眉睫的重大最后期限而造成的。
試圖以錯(cuò)誤的方式提高速率
如期完工的可能性比較小的情況下,負(fù)責(zé)干活的團(tuán)隊(duì)就會(huì)被要求提高速率,爭取在理想發(fā)布日期前完成所有特性。按照這種提高速率工作,團(tuán)隊(duì)必須慎重決策,承擔(dān)技術(shù)債。
誤區(qū):減少測(cè)試可以提高速率
現(xiàn)實(shí)的是減少測(cè)試即增加債務(wù)又減少速率,因?yàn)閱栴}潛伏得很深,越晚發(fā)現(xiàn),修復(fù)所花的時(shí)間越長。
誤區(qū):債累債
舊債如果不還,很快會(huì)累計(jì)新債。如果一直延續(xù)下去,有效速率會(huì)趨于零的程度。一旦發(fā)現(xiàn)深陷技術(shù)債務(wù)危機(jī),所有的選擇都是退而求其次的難難選擇。
技術(shù)債必須加以管理
技術(shù)債和財(cái)務(wù)債一樣,必須管理。沒有哪個(gè)產(chǎn)品能夠做到無債一身輕,認(rèn)識(shí)到這一點(diǎn)也很重要,鑒于此,也不建議努力達(dá)到無債狀態(tài)。即使如此,達(dá)到無債狀態(tài)的經(jīng)濟(jì)理由也不夠充分。技術(shù)債的管理要求綜合考量技術(shù)和業(yè)務(wù)因素。
管理應(yīng)計(jì)技術(shù)債
使用良好的技術(shù)實(shí)踐
管理技術(shù)債務(wù)的增長,第一種方法是停止向產(chǎn)品增加低級(jí)債務(wù)。使用良好的技術(shù)實(shí)踐是一個(gè)非常好的開端。
對(duì)于積累下來的技術(shù)債,代碼重構(gòu)是一個(gè)非常重要的減輕債務(wù)的工具。重構(gòu)用于改變既有代碼主體的一種技術(shù),在不改變軟件外在前提下調(diào)整其內(nèi)部結(jié)構(gòu)。
使用強(qiáng)完成定義
有些工作本來應(yīng)該在構(gòu)建特性的時(shí)候就去做,結(jié)果卻拖到后期才做,它們是產(chǎn)生技術(shù)債的重要根源。我們希望用一個(gè)強(qiáng)完成定義來指導(dǎo)團(tuán)隊(duì)在每個(gè)沖刺結(jié)束時(shí)給出一個(gè)低負(fù)債或零負(fù)債的解決方案。
正確理解技術(shù)債經(jīng)濟(jì)
為了有計(jì)劃地改善技術(shù)債,我們必須正確理解它是如何影響決策的經(jīng)濟(jì)考量的。
讓技術(shù)債可見
讓技術(shù)債在業(yè)務(wù)層面可見
讓業(yè)務(wù)人員看見產(chǎn)品的技術(shù)債狀態(tài)很關(guān)鍵。
讓技術(shù)債在技術(shù)層面可見
- 缺陷跟蹤系統(tǒng)
- 產(chǎn)品列表里
- 技術(shù)債列表
償還技術(shù)債
并非所有的技術(shù)債務(wù)都應(yīng)償還
- 行將就木的產(chǎn)品
- 一次性原型
- 短命產(chǎn)品