【不是只有本金】
相信大家在開發軟體產品時,都會提到技術債(Technical Debt)這個詞,大家都知道這個債總有一天要還,但是很容易忘了「利息」這件事,以為借 $100 只要還 $100, 但其實並不是。
事實是,你還要償還隨著時間進行「複利成長」的利息,因而很容易讓人不知不覺就碰到償債能力不足,導致破產的狀況。
【為什麼會產生技術債】
會產生技術債的原因有很多,其中一個原因是「想要展現超出自己目前能力範圍的東西」,就像有些人會有車貸、房貸的道理一樣。
【技術債中的利息是什麼】
我把技術債分成兩種:房貸跟高利貸
1% – 房貸等級的債務
- 新手將壞味道的程式碼奉為圭臬,持續創造出充滿債的程式碼
- 開發人員隨著時間忘記當初為什麼這樣做 (magic number, variable name, function name),愈久愈難懂,愈難重構
- 架構不良,開發新功能時速度會被拖累
- 沒有 Unit Test & 自動化測試,產品釋出時要手動測試,而且有些測項可能會指數成長
- 開發人員信心下降,逐漸失去熱情
最恐怖的是, 就跟現實世界一樣,只要你沒有注意你的財務狀況,就有可能需要借高利貸。只要你的程式碼持續長大,一個稍加不留意,會突然從 1% 的房貸變成 20% 高利貸。
20% – 高利貸
- 充滿壞味道的程式碼被直接複製
- 沒有 Unit Test & 自動化測試,開始解 bug 時,引發風暴,修 A 壞 B,修 B 壞 C,修 C 壞 A+B…。修 bug 就把開發人員時間吃光,就像高利貸…你的月薪可能連還利息都不夠。
- 無法重構,當初的架構不良已經變成巨獸,增加新功能的唯一方法,是創造更爛的程式碼及架構,例如:
- 更多違反 DRY 原則的程式
- 到處都沒有多型,只好繼續加 if-else
- 巢狀 if 沒什麼,蜂巢式 if 也出來了
- 對不到的大括號,變成永遠捲不到的大括號
- 啊?都到這一步了,你還在幻想 SOLID 嗎?
- 只要你修 bug 的速度不夠快,新功能的開發跟不上產品需求,就是恭喜你破產的時候了~
【適度的債是健康的,但高利貸不是】
當然,借高利貸然後成功的人也不是沒有,但是你確定你的產品有超高獲利能力,而且你也能”馬上”提昇你的償債能力,一舉把這些技術債還完嗎?畢竟沒有人可以一直在背負高利貸的狀態下生存。
我個人是覺得很困難,就算有錢雇用數十倍的開發人員,打算重新好好的設計程式碼,你也要面臨溝通複雜度、市場上排山倒海而來的需求等等問題要處理。
所以最好的做法是,把利率控制在你能償還的狀態,甚至是完全不要產生債。
【如何避免技術債】
回到技術債產生的原因:「想要展現超出自己目前能力範圍的東西」,所以產生技術債的因素有三個,一是能力,二是時間,最後是東西。
時間不是自己能控制的,跟市場、客戶有關,通常很難改變。
東西長怎樣,如果你夠幸運的話,是可以討論的,買房子沒有規定一定要獨棟別墅或是小公寓,而是要看你想得到的價值,產品也是一樣。
唯一能自己掌控的,是能力,如果你能提升自己的技術實力、工具,那麼債留子孫的機會就下降了。
你有感受到技術債及利息帶來的破壞力了嗎?