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