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