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















 
 
 








 
 
 
 