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