有過一段時間開發經驗的軟體工程師,應該都已經有了被技術債搞得效率低下的經驗,不管是自己欠下的或是其他人欠下的。
技術債跟現實金錢債務最大的差別就是,還債的很有可能不是借債的那一個,因此借技術債這件事情需要用全公司的角度來觀察與管理。
有很多文章討論為什麼會欠下技術債,造成什麼影響,該如何解決。
王建興大大的這篇寫得很清楚 ( http://www.ithome.com.tw/voice/100462 )
非常值得一讀。尤其是該如何解決的那一段。
概念是前面這邊文章來的,但我想強調其中的一部分。
技術債的利率水準
不同的利率水準需要償還的利息會有天與地的差異,這在現實生活下大家都非常清楚,但是到了軟體技術債的領域,大家卻常常鬼遮眼。
跟銀行借的固定利率型欠債,年息 1.5%:
舉例:
- 發生機率小的 bug 放著不修,手動處理每次 bug 發生時的修復
- 不寫文件,每次有人有需要的時候讓他自己踩一下,猜一下
這類型有時是偷懶,有時是真的擠不出時間。雖然問題不會擴張,但是會讓人很煩躁,影響工作心情,數量多的時候,也是很煩,因為越多人接觸這個專案,這個問題就會重複的影響。
跟銀行借的變動利率型欠債,年息 0.8% 根據環境變化調整利息:
大部分有意識的技術債應該都是這一類,為了配合商業需求,加快上線速度,理論上只要後續的開發有好好投資部份時間來處理技術債,基本上付出的利息並不高。
但是如果選擇忽略這個欠債,繼續衝刺其他的新功能,在系統成長,環境變化之後,利率會越來越高,利息也就水漲船高。
舉例
- 根據現有狀況作出某些假設,藉此降低實作的複雜度
- 為了快速,選擇直接 workaround 用特殊解 而不是更改架構讓他不是特例
- 不花時間做自動測試機制
- 少寫測試
- ......族繁不及被宰
這一類型的技術債,通常你在看 code 的時候,找 bug 的時候,雖然會罵聲幹,但花點時間想想前人為什麼做這樣的選擇與設計,大部分都能夠發揮同理心的去還債。
跟地下錢莊借的,每日利息1.5%:
從 day1 開始,你以為自己借了 1,000,其實會先扣個手續費 200,再扣個第一輪利息 150, 你只會拿到650,而且隔天要還就要還 1,000,如果不還本金1,000 那就每 10 天要還 150,不還就利滾利。
通常這個屬於無意識的借債行為,根本不知道自己在欠債。這也是大部分公司裡的 Senior Engineer 以上職位的一項重要工作,避免公司內部發生這樣子的欠債行為。
- 技術選擇錯誤:譬如需要確保 transaction 以及大量使用 join 的應用卻選擇了 mongoDB
- 架構不良:譬如一樣的功能,卻不使用 OO 的繼承或是抽取成 function,而是用Copy&Past 然後繼續開發。
- 錯誤地使用語言: 這有點難舉例,大家遇到就會知道了。
- .....一樣是族繁不及被宰
最後再提一次技術債的特殊特性:
欠債的人不一定是歸還的人
如果你公司有人總是可以超快速產出功能,尤其是跟其他人相比較之下,他超級快。如果不是你運氣很好遇到一個以一擋百的工程師,那就是有可能是找到一個很會欠債的朋友了啊。
4 comments:
「......族繁不及被宰」
這裡「被宰」是故意寫錯嗎?
算是我個人的固定用法吧
"大加"遇到就會知道
fixed, Thanks
Post a Comment