為什么管理技術(shù)債務(wù)如此重要
如果軟件開(kāi)發(fā)商希望更快地采取行動(dòng),留住頂尖人才,避免從頭開(kāi)始重新編寫(xiě)應(yīng)用程序,那么管理技術(shù)債務(wù)非常重要。
每家軟件開(kāi)發(fā)商都有一定數(shù)量的技術(shù)債務(wù),這是在短期內(nèi)將不成熟的項(xiàng)目推向市場(chǎng)而在之后不斷進(jìn)行完善和補(bǔ)充的額外開(kāi)發(fā)工作。技術(shù)債務(wù)可以表現(xiàn)為糟糕的設(shè)計(jì)決策、急需的重構(gòu)、技術(shù)升級(jí)和未解決的問(wèn)題。
就像承擔(dān)金融債務(wù)一樣,技術(shù)債務(wù)可以為企業(yè)爭(zhēng)取更多的時(shí)間,但必須在未來(lái)以利息償還。與金融債務(wù)一樣,承擔(dān)和管理技術(shù)債務(wù)也有明智和不明智的方法。
本文將討論快速還清技術(shù)債務(wù)至關(guān)重要的原因以及失敗的后果,以及如何解決軟件開(kāi)發(fā)人員在嘗試優(yōu)先處理技術(shù)債務(wù)時(shí)面臨的一些常見(jiàn)問(wèn)題。
為什么要減少技術(shù)債務(wù)?
首先解決最重要的問(wèn)題:為什么要減少企業(yè)的技術(shù)債務(wù)?畢竟,企業(yè)的一些應(yīng)用程序到目前運(yùn)行良好,而且肯定還有更重要的功能工作需要完成。
雖然這種推理方式很容易讓人接受,但企業(yè)會(huì)采用類似的方法來(lái)管理其金融債務(wù)嗎?債務(wù)通常產(chǎn)生利息,如果償還債務(wù)的速度很慢,其利息就會(huì)迅速增加。
如果你每個(gè)月只用信用卡支付最低還款額,那么最終可能會(huì)償還原始借入金額的數(shù)倍。因此盡快擺脫金融債務(wù)顯然是值得的。
償還技術(shù)債務(wù)需要一些時(shí)間和精力,它確實(shí)讓開(kāi)發(fā)人員不能完成開(kāi)發(fā)其他功能的工作。但是,盡早還清技術(shù)債務(wù)是值得的。
以下探討一下軟件開(kāi)發(fā)商償還技術(shù)債務(wù)的一些好處:
- 它可以讓軟件開(kāi)發(fā)商在未來(lái)行動(dòng)更快。
- 它可以讓留住頂尖的人才。
- 它可以幫助軟件開(kāi)發(fā)商避免每隔幾年重新編寫(xiě)整個(gè)應(yīng)用程序。
(1) 行動(dòng)更快
解決技術(shù)債務(wù)的一個(gè)常見(jiàn)阻力是,“我們沒(méi)有時(shí)間”。那么管理技術(shù)債務(wù)會(huì)節(jié)省時(shí)間嗎?
每當(dāng)有人說(shuō)沒(méi)有時(shí)間償還技術(shù)債務(wù)時(shí),這通常是一種借口。事實(shí)表明,拉動(dòng)圓輪的手推車(chē)比拉動(dòng)方輪的手推車(chē)更容易、更快捷。然而,很多企業(yè)可能正在拉著方輪手推車(chē)卻沒(méi)有意識(shí)到這一點(diǎn)。
Martin Fowler在他發(fā)表的一篇名為“高質(zhì)量軟件是否值得付出代價(jià)?”的文章中闡述了解決技術(shù)債務(wù)和保持高代碼質(zhì)量的好處。
他表示,一些軟件開(kāi)發(fā)商無(wú)視技術(shù)債務(wù)并允許其代碼庫(kù)的質(zhì)量下降。雖然他們一開(kāi)始可能會(huì)更快地發(fā)布功能,但隨著時(shí)間的推移,他們的交付速度會(huì)越來(lái)越慢。
糟糕的設(shè)計(jì)決策、開(kāi)放的錯(cuò)誤、過(guò)時(shí)的技術(shù)或任何可能的東西,最終都會(huì)導(dǎo)致功能開(kāi)發(fā)停止,因?yàn)樘幚韽?fù)雜和有缺陷的代碼庫(kù)變得越來(lái)越困難。另一方面,一些軟件開(kāi)發(fā)商了解保持高代碼質(zhì)量、解決技術(shù)債務(wù)和及早修復(fù)錯(cuò)誤的重要性。
雖然他們?cè)陂_(kāi)始交付新功能方面確實(shí)起步較慢,但在很短的時(shí)間內(nèi),他們開(kāi)始在向客戶交付價(jià)值方面超過(guò)其他開(kāi)發(fā)商。那是因?yàn)樗麄冊(cè)诰S護(hù)代碼庫(kù)的正常運(yùn)行方面所采取的謹(jǐn)慎措施可以防止隨著時(shí)間的推移陷入困境。
(2) 留住頂尖人才
事實(shí)表明,未能解決技術(shù)債務(wù)的軟件開(kāi)發(fā)商會(huì)失去一些人才。因?yàn)闆](méi)有人喜歡在一個(gè)具有缺陷的系統(tǒng)中工作,也沒(méi)有人喜歡在很難取得進(jìn)展的項(xiàng)目中工作。很少有開(kāi)發(fā)人員喜歡使用“遺留代碼”或使用已有幾十年歷史的技術(shù)。
那么當(dāng)開(kāi)發(fā)人員體驗(yàn)下降時(shí),他們?cè)撛趺崔k?那些能夠找到更好工作的開(kāi)發(fā)人員將會(huì)離職。換句話說(shuō),企業(yè)的一些頂尖人才離職,而其他的員工將會(huì)由于缺乏所需技能以及其他原因留下來(lái)。
因此,如果企業(yè)想留住頂尖的人才,需要表明它與開(kāi)發(fā)人員一樣重視高質(zhì)量的代碼。
(3) 避免從頭開(kāi)始重寫(xiě)應(yīng)用程序
為什么企業(yè)要從頭開(kāi)始重寫(xiě)他們的應(yīng)用程序?有時(shí)候,這是一個(gè)很充分的理由,例如他們需要擺脫過(guò)時(shí)的技術(shù),同時(shí)實(shí)現(xiàn)平臺(tái)的現(xiàn)代化。
但通常由于開(kāi)發(fā)速度問(wèn)題,需要從頭開(kāi)始重新編寫(xiě)應(yīng)用程序,而開(kāi)發(fā)人員的體驗(yàn)將變得很痛苦。軟件開(kāi)發(fā)商不得不決定從頭開(kāi)始重新編寫(xiě)應(yīng)用程序,并為此花費(fèi)了數(shù)年的時(shí)間和數(shù)百萬(wàn)美元費(fèi)用。
重新開(kāi)始開(kāi)發(fā)一個(gè)新項(xiàng)目也許很有趣。開(kāi)發(fā)人員可以選擇最喜歡的編程語(yǔ)言和工具,并且可以“以正確的方式”設(shè)計(jì)一切。當(dāng)然,其他開(kāi)發(fā)人員在未來(lái)可能會(huì)對(duì)其代碼產(chǎn)生是一種遺留應(yīng)用程序的感覺(jué)。
但是這種情況可以避免嗎?是的,如果企業(yè)優(yōu)先解決技術(shù)債務(wù)并防止事情一開(kāi)始就失控,可能就會(huì)避免完全重寫(xiě)應(yīng)用程序。
為什么技術(shù)債務(wù)沒(méi)有得到解決
軟件開(kāi)發(fā)商認(rèn)為盡快減少技術(shù)債務(wù)是一件好事。那么為什么技術(shù)債務(wù)沒(méi)有得到解決的情況如此普遍呢?
其中有幾個(gè)原因:
- 開(kāi)發(fā)人員認(rèn)為功能工作更重要。
- 開(kāi)發(fā)人員認(rèn)為解決技術(shù)債務(wù)不是他們的問(wèn)題。
- 開(kāi)發(fā)人員與產(chǎn)品和工程管理人員相互推諉。
- 開(kāi)發(fā)人員無(wú)法有效說(shuō)服產(chǎn)品和工程管理人員。
以下為這些原因探索一些應(yīng)對(duì)方法:
(1) 認(rèn)為功能工作更重要
發(fā)布新功能很重要。因?yàn)闆](méi)有功能,產(chǎn)品就沒(méi)有價(jià)值。但是企業(yè)不能在開(kāi)發(fā)全部功能之后才推出產(chǎn)品。
當(dāng)有人表示功能工作更重要,并且不能優(yōu)先解決技術(shù)債務(wù)時(shí),那么功能工作現(xiàn)在真的更重要嗎?客戶真的會(huì)喜歡采用充滿錯(cuò)誤并且運(yùn)營(yíng)緩慢的應(yīng)用程序?
企業(yè)需要為客戶提供價(jià)值,那么一定要提供良好的用戶體驗(yàn),這意味著確保應(yīng)用程序性能良好,并且不讓客戶感到沮喪或阻止他們使用錯(cuò)誤的應(yīng)用程序。
允許同時(shí)處理功能工作和技術(shù)債務(wù)的一個(gè)很好的折衷方案是在每個(gè)項(xiàng)目中花費(fèi)大約70%~80%的時(shí)間開(kāi)發(fā)新功能,每個(gè)項(xiàng)目花費(fèi)20%~30%的時(shí)間來(lái)修復(fù)錯(cuò)誤和解決技術(shù)債務(wù)。
(2) 技術(shù)債務(wù)不是開(kāi)發(fā)人員的問(wèn)題
如果開(kāi)發(fā)人員有這種感覺(jué),這可能是潛在工程文化出現(xiàn)問(wèn)題的征兆。他們希望在這樣的環(huán)境中工作,每個(gè)人都對(duì)代碼庫(kù)感到自豪,并具有主人翁感,并希望將其做到最好。如果沒(méi)有相同的價(jià)值觀和愿景,那么很難一起工作。
這里的解決方案是或者嘗試在更積極的方向上影響工程文化,或者可以讓一些開(kāi)發(fā)人員離職去找到一個(gè)更適合的公司。
(3) 與產(chǎn)品和工程管理人員相互推諉
經(jīng)驗(yàn)不足的開(kāi)發(fā)人員可能有一些恐懼,因?yàn)樗麄兛赡軙?huì)知道有一些重要的技術(shù)債務(wù)需要解決,這將導(dǎo)致內(nèi)部沖突,但他們害怕表達(dá)這種擔(dān)憂。也許是因?yàn)樗麄冋J(rèn)為直言不諱會(huì)對(duì)他們產(chǎn)生不利影響,或者可能會(huì)危及他們的工作職位。
重要的是要記住,作為軟件開(kāi)發(fā)人員,通常了解企業(yè)在任何時(shí)間面臨的技術(shù)債務(wù)數(shù)量。當(dāng)技術(shù)債務(wù)繼續(xù)被取消優(yōu)先級(jí)或被忽視時(shí),開(kāi)發(fā)人員實(shí)際上有義務(wù)表達(dá)這些擔(dān)憂,并不再推諉產(chǎn)品管理或工程管理人員。
(4) 無(wú)法說(shuō)服產(chǎn)品和工程管理人員
第四個(gè)問(wèn)題也許是最關(guān)鍵的問(wèn)題。開(kāi)發(fā)人員通常認(rèn)為解決技術(shù)債務(wù)很重要,并且已經(jīng)向產(chǎn)品管理和工程管理人員提出了這一點(diǎn),但他們并沒(méi)有聽(tīng)從。
在這種情況下,與其感到無(wú)助,不如更清楚地表達(dá)他的擔(dān)憂。如果只是說(shuō)“我們需要解決這個(gè)問(wèn)題”,但沒(méi)有提供任何明確的解釋或原因,那么就不能有效地溝通。
開(kāi)發(fā)人員應(yīng)該提供背景信息,說(shuō)明優(yōu)先處理技術(shù)債務(wù)很重要的原因,以及這會(huì)給業(yè)務(wù)帶來(lái)什么好處。用他們可以理解的術(shù)語(yǔ)來(lái)解釋事物尤其重要。
例如,開(kāi)發(fā)人員采用自己的術(shù)語(yǔ)進(jìn)行解釋:“我們真的需要花一些時(shí)間來(lái)測(cè)試,來(lái)增加我們?cè)谶@個(gè)回購(gòu)協(xié)議中的代碼覆蓋率。由于我們?nèi)狈y(cè)試,經(jīng)常會(huì)引入錯(cuò)誤,我們必須在這些問(wèn)題已經(jīng)投入生產(chǎn)后花時(shí)間修復(fù)這些問(wèn)題。讓我們的測(cè)試套件處于更好的狀態(tài)將使我們對(duì)代碼更有信心,并確保我們的客戶在使用應(yīng)用程序時(shí)也有更好的體驗(yàn)。” 但這種說(shuō)法可能并不能讓產(chǎn)品管理和工程管理人員理解。
或者說(shuō):“我們現(xiàn)在有30個(gè)面向客戶的錯(cuò)誤。這些給我們的客戶帶來(lái)了糟糕的體驗(yàn),甚至導(dǎo)致一位客戶取消了與我們的合同。我真的認(rèn)為我們需要修復(fù)這些錯(cuò)誤,而不是開(kāi)發(fā)一些新功能。”這將使產(chǎn)品管理和工程管理人員可以理解。
而這么說(shuō):“我們的持續(xù)集成管道花費(fèi)的時(shí)間太長(zhǎng)。我們必須等待一個(gè)多小時(shí)才能獲得反饋以查看我們的構(gòu)建是否通過(guò),而這種延遲的反饋循環(huán)使得完成任務(wù)需要很長(zhǎng)時(shí)間。我認(rèn)為我們需要花一些時(shí)間優(yōu)化構(gòu)建,讓它更快地完成,這樣我們所有的工程師都可以更快地行動(dòng)。試想一下,如果我們的構(gòu)建每次運(yùn)行快10分鐘,100名工程師每天創(chuàng)建5次新構(gòu)建,那么我們可以完成多少工作。每天節(jié)省的開(kāi)發(fā)時(shí)間超過(guò)83小時(shí)(10*100*5/60)。” 這可能讓產(chǎn)品管理和工程管理人員了解工作的艱巨性。
結(jié)論
承擔(dān)技術(shù)債務(wù)是不可避免的。但是,選擇如何處理技術(shù)債務(wù)可以決定運(yùn)營(yíng)的成敗。希望開(kāi)發(fā)人員受到啟發(fā)并有能力解決目前在自己的角色中面臨的技術(shù)債務(wù)。這樣做將使企業(yè)成為更好的工作場(chǎng)所,并為用戶帶來(lái)更好的體驗(yàn)。