技術(shù)債務(wù)的12個(gè)秘密
對(duì)于開(kāi)發(fā)人員來(lái)說(shuō),軟件開(kāi)發(fā)過(guò)程從來(lái)沒(méi)有結(jié)束,無(wú)論是順其自然還是突然提出的功能要求,都會(huì)成為一種沒(méi)有定形的、難以定義的債務(wù),因此需要制定償還規(guī)則。
在以往開(kāi)發(fā)人員并不擔(dān)心,他們創(chuàng)建一個(gè)文件開(kāi)始按照自己的想法編程。然而對(duì)于當(dāng)今大多數(shù)開(kāi)發(fā)人員來(lái)說(shuō),那些隨心所欲、不受阻礙的日子早已一去不復(fù)返了。如今,許多軟件開(kāi)發(fā)都在修改、擴(kuò)展、增強(qiáng)和發(fā)展之中,開(kāi)發(fā)人員經(jīng)常地完成別人以前做的工作。而這會(huì)出現(xiàn)所謂的技術(shù)債務(wù)。
“技術(shù)債務(wù)”一詞是指尚未完成的事情。所欠的債務(wù)是人們必須回過(guò)頭來(lái),通過(guò)修復(fù)或填補(bǔ)空缺進(jìn)行糾正,這可能是在上周、上個(gè)月甚至幾年之前所做的事情。
在計(jì)劃階段,該術(shù)語(yǔ)是經(jīng)常被遺忘的工作。利益相關(guān)者已經(jīng)在醞釀新功能,并增加更多的功能,但是如果有人不加推廣,原有的增強(qiáng)功能將永遠(yuǎn)無(wú)法發(fā)揮全部潛力。丟失或損壞的代碼會(huì)在錯(cuò)誤的時(shí)間失敗,從而使他們陷入困境。
該術(shù)語(yǔ)的棘手部分是“債務(wù)”一詞,它表明是一種義務(wù)和契約,有時(shí)是道德的,有時(shí)是法律的。債務(wù)人如果不還債可能面臨牢獄之牢,但是在軟件世界中,技術(shù)債務(wù)可以說(shuō)是另一種牢獄。
以下是有關(guān)軟件堆棧存在技術(shù)債務(wù)的12個(gè)秘密。
1.技術(shù)債務(wù)并不是天生就壞
“債務(wù)”一詞聽(tīng)起來(lái)很糟糕,但并不總是反映出錯(cuò)誤的判斷。技術(shù)債務(wù)幾乎總是從一系列新的軟件開(kāi)發(fā)中產(chǎn)生,這些開(kāi)發(fā)過(guò)程通過(guò)添加一系列新特性來(lái)擴(kuò)展軟件堆棧。開(kāi)發(fā)人員可以并沒(méi)有增加更多的功能,但可能專(zhuān)注的一點(diǎn)就是負(fù)面因素。技術(shù)債務(wù)實(shí)際上是開(kāi)發(fā)過(guò)程中留下的陰影。
2.技術(shù)債務(wù)確實(shí)是無(wú)限的
技術(shù)債務(wù)清單對(duì)于軟件人員似乎不堪重負(fù),但實(shí)際清單卻可能更多。它實(shí)際上是軟件不執(zhí)行操作的列表,并且這種列表是無(wú)限的。人們可能會(huì)關(guān)注以下事實(shí):它無(wú)法正確導(dǎo)出PDF文件或某些CSS選擇器過(guò)于通用,但它也沒(méi)有實(shí)現(xiàn)所有新的人工智能算法或使用量子安全加密算法。那么它能讀懂人類(lèi)的思想嗎?關(guān)鍵是,技術(shù)債務(wù)無(wú)法計(jì)量或編纂,這很難達(dá)成目標(biāo)。
3.并非總是欠著技術(shù)債務(wù)
技術(shù)債務(wù)通常讓人寑食難安。有人可能會(huì)認(rèn)為,需要擴(kuò)展一些數(shù)據(jù)存檔或重建一些API來(lái)接受不同的查詢(xún),但大多數(shù)企業(yè)在沒(méi)有作出決定的情況下可能做得很好。
4. 沒(méi)有人真正討債
技術(shù)債務(wù)并不像金融債務(wù)那樣,如果不償還,債主就會(huì)上門(mén)討債。技術(shù)債務(wù)純粹是一種內(nèi)部會(huì)計(jì)機(jī)制,可以幫助人們跟蹤需要完成的工作。就像一個(gè)“待辦事項(xiàng)”記事本一樣。
5.技術(shù)債務(wù)有時(shí)可能像金融債務(wù)一樣
技術(shù)債務(wù)的棘手問(wèn)題是某些技術(shù)債務(wù)在財(cái)務(wù)方面面臨嚴(yán)重的問(wèn)題。如果API不支持JSON,則重要的客戶(hù)可能會(huì)離開(kāi)。也許新的競(jìng)爭(zhēng)對(duì)手通過(guò)提供與NoSQL數(shù)據(jù)庫(kù)一起使用來(lái)竊取客戶(hù)的數(shù)據(jù)。企業(yè)面臨的挑戰(zhàn)是衡量這種財(cái)務(wù)風(fēng)險(xiǎn),然后做出明智的業(yè)務(wù)決策。如果債務(wù)的負(fù)面影響遠(yuǎn)小于償還債務(wù)的成本,那么忽略債務(wù)是有意義的。但是,如果成本很高,那么是時(shí)候開(kāi)始解決這個(gè)問(wèn)題了。
6.技術(shù)債務(wù)可能是政治幻想
許多想要解決某些技術(shù)債務(wù)的人都堅(jiān)定地處于某個(gè)政治陣營(yíng)中,他們使用“債務(wù)”一詞,因?yàn)樗?tīng)起來(lái)比“技術(shù)愿望清單”更具說(shuō)服力和誠(chéng)意。這些可能對(duì)企業(yè)的未來(lái)發(fā)展和正在開(kāi)發(fā)的軟件很重要要。如果企業(yè)想在新澤西州獲得更多的合同,那么,確保其軟件在新澤西州的客戶(hù)中運(yùn)行良好可能是一件好事。如果這不是企業(yè)目標(biāo)的重要組成部分,那么可能不需要償還債務(wù)。
7.技術(shù)債務(wù)有時(shí)像皮疹一樣消失
許多人可能得過(guò)皮疹,但因?yàn)槠渥陨碓蚰軌蜃晕矣峡赡軐?duì)此忽略。技術(shù)債務(wù)通常也會(huì)自行消失。在當(dāng)今,支持某些基本文件格式似乎很重要,但是有時(shí)會(huì)出現(xiàn)一種新的文件格式取代了原來(lái)的文件格式,并且由于每個(gè)人都可以忘記了它,因此不必支持原有的文件格式。在這種情況下,技術(shù)債務(wù)就會(huì)消失。
8.技術(shù)債務(wù)很難確定
團(tuán)隊(duì)中有人稱(chēng),“技術(shù)債務(wù)”真的是債務(wù)嗎?還是僅僅是某人想要的功能?到底欠用戶(hù)什么呢?因此很難確定技術(shù)債務(wù)。
9.技術(shù)債務(wù)通常只是表面上的文章
有時(shí),技術(shù)債務(wù)欄中的一個(gè)功能只不過(guò)是表面上的文章。對(duì)于管理人員來(lái)說(shuō),這始終是一個(gè)問(wèn)題。有些問(wèn)題需要精心編寫(xiě)當(dāng)前軟件堆棧的大部分內(nèi)容,而某些問(wèn)題可以通過(guò)對(duì)當(dāng)前代碼庫(kù)進(jìn)行一些巧妙的重新打包而消除。面臨的挑戰(zhàn)是如何判斷聽(tīng)起來(lái)像是技術(shù)難題的東西,并且為了提供成本較低的功能做出切實(shí)可行的決策。
10.技術(shù)債務(wù)從未清算
編劇之所以喜歡技術(shù)債務(wù),是因?yàn)樗麄兛梢酝苿?dòng)主角的發(fā)展,并擁有令人滿(mǎn)意的解決方案。例如在電影中,Nick Cage以前發(fā)誓這一生中必須偷走50輛車(chē)。而在偷竊了49輛之后,他仍然欠債。當(dāng)他偷了第50輛車(chē)時(shí),其債務(wù)已清償,但他因此而入獄。
技術(shù)債務(wù)并不一樣。可以肯定,一旦開(kāi)始接受XML文件,就不會(huì)再收到明確要求。對(duì)XML輸入的請(qǐng)求將被這個(gè)新特性的技術(shù)支持所取代。新的代碼產(chǎn)生了新的問(wèn)題,技術(shù)債務(wù)用新的代碼來(lái)解決。
11.技術(shù)債務(wù)不是數(shù)字,因此難以衡量或跟蹤
雖然貨幣債務(wù)可以用數(shù)字衡量的,而技術(shù)債務(wù)是無(wú)法衡量的。當(dāng)然,敏捷團(tuán)隊(duì)將嘗試計(jì)算實(shí)現(xiàn)某點(diǎn)所需的“點(diǎn)數(shù)”。精明的管理人員將能夠以小時(shí)為單位估算開(kāi)發(fā)人員的時(shí)間。但是這些全都是猜測(cè),任何事情都可能發(fā)生。
12.技術(shù)債務(wù)可能是一個(gè)機(jī)會(huì)
有一個(gè)笑話(huà)是,如果某人欠銀行10萬(wàn)美元,那么就會(huì)遇到麻煩,但是如果欠銀行1億美元,那么銀行可能就會(huì)遇到麻煩。有些開(kāi)發(fā)人員可能會(huì)談?wù)摷夹g(shù)債務(wù),但它更像是客戶(hù)與供應(yīng)商之間的游戲。
如果某人可以在其他地方開(kāi)展業(yè)務(wù),需要獲得這個(gè)業(yè)務(wù)。那么最好修復(fù)其代碼。但是,如果某人確實(shí)需要軟件堆棧并且無(wú)法輕松遷移,那么技術(shù)債務(wù)可能確實(shí)是向用戶(hù)加價(jià)銷(xiāo)售的技術(shù)機(jī)會(huì),但用戶(hù)會(huì)為新功能支付多少費(fèi)用?