采訪了200多位工程師,我找到管理技術債的好方法
成長中的軟件公司是如何處理技術債務的?為了解這個問題,我前后采訪了 200 多位專家,最終知道了最好的軟件工程師和領導者是如何管理技術債務的。
我們的新產品是客戶開發工作的一部分。因此,我需要深入了解軟件公司之間的差異,他們的技術債務有哪些可控,還有哪些是不可控的。技術債務是一個感性話題,提起它,人們就會喋喋不休。關于技術債務,你去問問公司的工程師就知道了。
在很多情況下(如果不是大多數情況的話),技術債務會不斷累積,像“滾雪球”一樣,直到產生嚴重問題。
Stripe 的一份研究發現:在一般的公司中,工程師們要花費約 33% 的時間來處理技術債務。技術債務不僅打擊了團隊士氣,而且每年給公司造成約 850 億美元的損失。看到這種情況,我們是不是該做點什么?
https://stripe.com/files/reports/the-developer-coefficient.pdf
Gartner 和許多其他公司讓我們知道,應該做點什么。他們的研究顯示,積極管理技術債務的組織能將其交付速度至少提高 50%。
幸運的是,我確實遇到一些公司,它們的技術債務管理策略非常可靠。在這些采訪中,有很多讓人眼前一亮的時刻。Everlane 的工程經理 James Rosen 告訴我:
考慮一下,PM 花了多少時間來策劃要開發的特性集。現在,把這個時間與工程師們為技術債務尋找商業理由的時間做個比較。分配到技術債務上的工程能力幾乎為零,這還那么令人驚訝嗎?
我必須承認,這并不那么令人驚訝。
然而,我也遇到很多團隊,他們花了大量時間和精力來管理技術債務,最終卻一無所獲。
我所有的研究都指向一個簡單事實:成功管理技術債務的公司不僅開發出適當流程,而且還將這些流程完全融入了它們日常的敏捷行動中,成為一種好習慣。
這些工程團隊控制住了他們的技術債務,因此,他們的交付速度更快,更可預測。結果,不僅他們的工程師很高興,而且客戶也很高興——雙贏!
做到這種程度,實際上無需付出太多。你只需要清楚——如何處理小型、中型、大型的技術債務。
1. 如何處理小型技術債務
工程師在代碼中發現這種技術債務時就可以順手解決,而且這也在他們正在進行的工作范圍內。或許,它就是簡單的重構函數或重命名變量。
Robert C. Martin 說道:”總是讓代碼比你發現它時更好。“
這類小工作不需要任何類型的計劃,每個工程師都有權力在沒有任何人批準的情況下解決這類債務。在這篇文章中,我們討論了健康代碼庫所需要的一個文化特質,要確保你的工程團隊具備這樣的特質。如果不具備,現在就采取措施解決這個問題。
https://blog.stepsize.com/the-one-cultural-characteristic-you-need-for-a-healthy-codebase/
在這方面,有許多工具可以幫助你,比如 Code Climate、Codacy、Tech Debt Metrics extension for VSCode。
2. 如何處理中型技術債務
這種類型的技術債務可以在一個沖刺內被解決。它應該像任何特性工作一樣經過同樣的沖刺計劃過程,并被嚴格地考慮。
大多數工程團隊都沒有做到——還記得 James Rosen 的評論嗎?Rosen 說,“分配到技術債務上的工程能力幾乎為零,這還那么令人驚訝嗎?”
企業優先考慮為客戶提供價值的工作,這是對的。況且,處理技術債務并不能做到這一點。
但技術債務卻阻礙了你向客戶提供價值的能力。
要明確說明這是如何發生的,請確定哪些債務妨礙了關鍵的主動性工作,或者在工程師生產力方面讓企業損失慘重,或者是導致影響客戶體驗的 Bug 原因。
記錄技術債務并量化其成本,這讓你可以優先考慮這些債務,如果解決了這些債務,就會像新功能一樣為客戶帶來價值。技術債務歸工程組織所有。他們的責任是解決它,并最終為它提供商業理由。
遺憾的是,這正是我們現有的工具迄今未能做到的地方。
Jira 很適合管理項目,但跟蹤和監控技術債務卻很糟糕。——Unqork 首席工程師 Jake Peyser
代碼質量工具只有助于發現一方面的技術債務,但其他大多數就無法捕獲了。
https://blog.stepsize.com/7-examples-of-sneaky-tech-debt-and-how-to-spot-them/
工程團隊處理技術債務的時間有限,他們需要充分利用這些時間。
幸運的是,Stepsize 可以幫助他們從工作流中捕獲和跟蹤技術債務,這樣他們就能量化其造成的業務成本,并優先處理最重要的債務。
每個工程師都可以直接從他們的工作流(包括編輯器、PR 和 Slack)中報告技術債務和成本。這些報告都會被送到 Stepsize 網站,它們在那里被整理成“技術債務項”,描述和記錄代碼庫中的問題。最后,每一張 Jira 工單上都會加上相關的技術債務項,解決它們可以更有效地為客戶提供價值。
我們建議工程團隊負責人承擔管理這個過程的責任。他們個人掌握其團隊所擁有的代碼庫中的技術債務,并在需要解決債務的時候與 PM 溝通。
3. 如何處理大型技術債務
這種技術債務不可能立即解決,甚至不可能在一次沖刺中解決。我采訪過的最好的公司每季度都有技術規劃會議,所有的工程主管都會參加。工程經理負責重點介紹匯報給他們的大型技術債務,并為那些他們認為最重要的債務提出商業理由。
這個過程聽起來很費力,但對于 Stepsize 的用戶來說卻非常容易。他們的個人貢獻者已經定期報告來自一線的債務。這些數據由每個團隊和他們的領導者持續地審查和整理,他們將大量的債務——以及理解業務成本的必要數據——傳遞給他們的工程經理。Stepsize 甚至可以揭示每個 Jira 史詩的技術債務。然后,領導層可以利用他們對公司更廣泛的優先事項和愿景的理解,對大型債務進行相應地排序。
每個大型債務經過批準后,就會被安排到路線圖中,就像特性工作一樣。這樣,工程負責人就有了他們需要的所有數據,可以監控每個技術債務項的處理進展。
4. 小結
任何現代軟件公司都應該能運用這個過程來處理小型、中型、大型的技術債務。然而,不同的公司之間有一點不同:商業目標。
妥善管理技術債務意味著解決阻礙你實現商業目標的債務。如果你的業務是建立在正常運行時間和可靠性的基礎上,那就把任何會讓它們處于危險中的債務償還掉。如果開發速度是你的競爭優勢,那么就消除任何浪費工程時間或增加新員工理解代碼難度的債務。如果你想減少客戶流失,就解決導致質量問題的債務。
明確處理每一筆債務的商業理由。因為當你這樣做的時候,你就會更好、更快地交付軟件——而且可以讓你的工程師們開心。