Sunday, June 11, 2017

技術債的利率水準




有過一段時間開發經驗的軟體工程師,應該都已經有了被技術債搞得效率低下的經驗,不管是自己欠下的或是其他人欠下的。

技術債跟現實金錢債務最大的差別就是,還債的很有可能不是借債的那一個,因此借技術債這件事情需要用全公司的角度來觀察與管理。



有很多文章討論為什麼會欠下技術債,造成什麼影響,該如何解決。
王建興大大的這篇寫得很清楚 ( 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  然後繼續開發。
  • 錯誤地使用語言: 這有點難舉例,大家遇到就會知道了。
  • .....一樣是族繁不及被宰
遇到這種狀況應該就是很想殺了那個欠債的人,不過我也是發生過 git blame 之後看到自己名字的窘況。


最後再提一次技術債的特殊特性:

欠債的人不一定是歸還的人

如果你公司有人總是可以超快速產出功能,尤其是跟其他人相比較之下,他超級快。如果不是你運氣很好遇到一個以一擋百的工程師,那就是有可能是找到一個很會欠債的朋友了啊。

4 comments:

Unknown said...

「......族繁不及被宰」

這裡「被宰」是故意寫錯嗎?

Danny said...

算是我個人的固定用法吧

wakeup said...

"大加"遇到就會知道

Danny said...

fixed, Thanks