發(fā)布于:2021-01-12 13:39:08
0
80
0
每個工程經理和CTO都會想到技術債務。通過快速而骯臟的方式從未來“借”時間可能會在以后引起巨大的問題。我們采訪了Liran Haimovitch,討論了什么是技術債務,如何將其與傳統(tǒng)代碼區(qū)分開來等等。
JAXenter:“技術債務是一個浪漫的隱喻,用來掩蓋開發(fā)人員的愚蠢行為?!?您是否同意這個想法?
Liran Haimovitch:我的想法是這樣的:技術債務是真實的事情,并且可能由錯誤的設計決策或匆忙的開發(fā)引起。真正的技術債務是我們應該設法減少的東西。但是,我們所謂的技術債務很多根本不是技術債務。這只是我們開發(fā)人員不了解的東西。
問題在于,當開發(fā)人員或團隊不想做某事或不知道如何使用現有的舊代碼執(zhí)行操作時,“技術債務”已成為最終的借口。遺留代碼與技術債務不同。傳統(tǒng)代碼可以快速,穩(wěn)定且安靜地運行數年,即使編寫它的開發(fā)人員已經離開很久了。好的代碼并不會因為沒有人理解而成為真正的技術債務。隨著軟件組織的成熟,他們不僅需要應對真實的技術債務,而且還需要保持對代碼的理解,以避免這種虛假的技術債務。
JAXenter:為什么技術債務對DevOps如此重要?
Liran Haimovitch: DevOps最終將致力于以快速且可持續(xù)的速度提供高質量的軟件。承擔技術債務有點像借貸:從未來的自我中借錢可以幫助您更快地交付軟件,但它并不總是可持續(xù)的。如果您借入的貸款利率過高而又沒有迅速償還債務,則還款可能會失控。
但是,將一段復雜的代碼稱為“技術債務”有時可以成為避免理解他人工作的借口。一些開發(fā)人員寧愿花時間和精力來重建從頭開始起作用的東西,以“消除技術債務”,而不是學習現有代碼的工作原理。
這可能是一個問題,尤其是在公司中,開發(fā)人員的績效是根據他們編寫的新代碼的多少來衡量的。對舊的現有代碼進行試驗很難衡量或向管理人員證明。由研發(fā)負責人證明,理解現有代碼庫具有價值,而替換現有代碼庫并非總是正確的選擇。
賈克森特(JAXenter): 有人爭論說技術債務也可以幫助項目。您對此有何看法?
Liran Haimovitch:科技債務本身并沒有幫助,但它的存在可以證明您做對了事。
技術債務是一種自然現象,看到它的出現可能表明人們正在發(fā)現您的軟件有用。畢竟,如果不使用某些東西,那就沒有任何債務了。僅當您要添加功能或改進功能時,技術債務才變得重要。
假冒技術債務也是產品和公司日趨成熟的積極信號。隨著功能性代碼進入第二個十年,我們不應該感到驚訝,原始的開發(fā)者已經走了很長時間,而當前的一代卻很難理解古代人的智慧。同樣,這應該與真正的技術債務區(qū)分開
賈克森特(JAXenter): 您有什么要做的事情要分享?如何補救技術債務問題或將其用于我們的利益?
麗蘭·海莫維奇(Liran Haimovitch):首先,學會區(qū)分真正的技術債務和您根本不了解的東西。如果項目使用的框架已過時,隨著時間的推移變得越來越難以維護,或者項目速度緩慢或占用大量內存,那么這些都是您正在處理實際技術債務的一些線索。通常,這些系統(tǒng)需要持續(xù)的維護和TLC,因此開發(fā)人員實際上非常了解它們。
另一方面,如果一段代碼悄悄有效地完成了工作,那么它*可能*不是技術債務。也許沒人知道它是如何工作的,因為距它需要任何修復已經有十年了!當您確實需要進行更改時,可能會更難,但這不是原始開發(fā)人員的錯。補救這種虛假的技術債務的關鍵是讓開發(fā)人員了解代碼的工作原理。
理想情況下,這可以通過良好的內部文檔來實現,但實際上,內部文檔通常很差或得不到維護–有時稱為“文檔債務”,這本身就是一個問題。
可觀察性對于學習代碼的工作方式至關重要。APM工具(如Datadog或AppDynamics)和異常管理器(如Sentry)有助于提供良好的概述?;鹧鎴D可以提供視覺幫助,跟蹤解決方案可以幫助顯示應用程序流程。
另一個選擇是調試。我們的一位開發(fā)人員喜歡通過添加大量斷點來查看遺留代碼,并查看擊中了哪些分支,直到他了解所有分支的工作方式為止。Rookout的不間斷斷點使您可以在代碼運行時進行實驗,而不會增加任何開銷,從而使其成為進行此類探索的好工具。
一些真正的技術債務是不可避免的。您可以通過制定良好的設計決策來將其最小化,但是隨著代碼的老化,即使是最好的決策也可能會變成需要替換的負擔。牢記持續(xù)的維護和未來的需求可以幫助您掌握技術問題,但您永遠無法真正知道軟件的未來。
遇到看似技術債務的問題時,請問“如果我理解代碼,我還會感到嗎?” 如果答案是“否”,那不是技術債務;而是 這是知識的不足,也是學習的機會。
作者介紹