技術負債就好比修改和擴展軟件系統,每當添加新功能時,需要付出的額外努力就好像是債務利息一樣。那么身為技術開發者,該如何償還技術負債?
一、什么是技術負債?
技術負債,是指由于某些限制,做出的一種短期見效快,長期有傷害的,在技術層面的決定,無法完全地實施計劃好的各項功能,理想實施完成狀態和實際實施結果之間的差異。
技術負債有時候并不完全是指這個代碼有多糟糕,而更有可能是強調這個代碼帶來的持續增長的成本,即技術負債的利息——后續研發和運營因為不完善的系統實施而需要付出的額外努力。舉個例子,如果前期的實施不包括運營管理平臺,所有后期的運營都要手工操作,這在效率上大打折扣,需要招聘額外的人手。
現實生活中,很多潛在的問題,在項目初期很難被發現,很多問題都是在實踐的過程中發現的,敏捷開發,有利于解決類似的問題。但是越到后期,和技術負債相關的請求,就會越難被接受,因為他們的投入產出比小,風險大。更糟糕的情況是,有一些東西,是需要事后的消化,后知后覺的,這無異是得不償失的。
二、技術負債有哪些負面影響?
如果公司要解決技術負債,花費的成本往往是很高的。在所調研的系統中,35%的技術債務已經嚴重影響了系統的支持和維護,它們可能導致安全、性能問題甚至威脅到正常運行。
三、技術債如何償還?
債總要還的,解鈴還須系鈴人。還債的方式有很多,下面的方法做個拋磚引玉。
1、好的設計和架構
對項目當下需求以及未來的需求能夠做一個預見,避免隨著項目復雜度提升導致后期重構的風險。遵從基本設計原則:模塊化,輕耦合,無狀態。選擇合適的技術而不是最好的技術。
2、Code Review
Code Review是一個只要超過倆人的TD團隊就建議采用的工序。Code Review很重要,千萬不要以時間或者其他原因放棄Code Review。Code Review工作可以在開始就將可能產生的債務清理掉。如果你能全款,為什么要選擇貸款呢?
3、測試保證
增加自動化測試覆蓋率,通過自動化測試覆蓋住流程,減少漏測的幾率,并為后期償還債務時可能需要的重構提供保障。測試,越是無情,越是仔細,全面的測試,越是有助于系統的健壯。
4、定期的技術債務償還
和項目經理或者產品經理協商一個迭代或者趁迭代的空隙,專門用于解決前期積累的技術債務。一方面可以清理債務,另一方面可以是開發人員得到一定程度的放松。
將積累的技術債務按照優先級就行排序,將最需要解決的債務分配一些到迭代之中,提前償還。相當于等額本金。
0技術債是一種完美的情況,但也不必追求“無債”狀態,因為那樣太難了,也不太經濟,人無完人;盡量減少技術債,使其不至于明顯影響后續產品和開發。