iT邦幫忙

2025 iThome 鐵人賽

DAY 12
0

傍晚六點半,咖啡廳裡人不多。

阿偉一進門就直奔我這桌,臉上帶著一種混雜著興奮和疲憊的表情。

「欸,上禮拜那招真的有用欸。」他坐下來,語氣裡難得有點輕鬆,「小P收到我的email之後,真的很認真在看那兩個方案。最後他選了B方案,那個用WebSocket做即時推播的。」

「他還跟我說『阿偉,你這樣分析得很清楚,我覺得我們確實應該做得扎實一點』。」阿偉學著小P的語氣,有點得意,「我終於感覺我們是在一起想辦法,而不是在互相猜心了。」

我點點頭,為他感到高興。

但阿偉的笑容只維持了大概十秒。

「可是...」他的表情又垮下來,「我開始估算那個B方案的時程時,發現有個很大的問題。」

他嘆了口氣,「跟功能本身複不複雜沒有太大的關係,而是我發現,我們底層那個會員服務的API,實在是太爛了。」

看得見卻說不清的技術債

「有多爛?」我問。

「就...」阿偉用手比劃著,「那個API是三年前留下來的,當時寫的人早就離職了。整個Service混成一團,什麼都綁在一起。我光是要接一個簡單的即時推播,就得花兩天去處理那堆屎山。」

他越說越激動,「你知道嗎,我原本估五天可以做完,結果光是處理那個破API就要兩天。如果不處理,以後每個要用到這個Service的功能,都會被拖慢...而且隨時可能爆炸。」

「那你跟老楊說了嗎?」

「說了啊!」阿偉有點無奈,「我跟他說這個service違反了一堆物件導向原則,耦合度高到爆炸,根本是顆不定時炸彈。」

喔...我大概猜到接下來會發生什麼事了。

「老楊怎麼說?」

阿偉學著老楊的語氣,壓低聲音:「『阿偉,我知道技術品質很重要。但現在老闆只在乎進度,你能不能先把功能做出來,重構的事情,等這季忙完再說?』」

「然後呢?」

「然後?就沒有然後了啊。」阿偉攤手,「對老楊來說,重構就是『要他花三週,卻做不出任何看得見的新功能』。我講什麼SOLID、耦合度,他根本聽不懂...不對,我感覺他好像就算聽懂了也不在乎欸,好奇怪。」

他用手指戳著桌面,「我現在是眼睜睜看著那個隨時可能會炸掉的技術債就在我眼前,你知道嗎,我真的急得半死!但不管我怎麼說,都沒辦法讓老楊理解為什麼現在一定非修不可。這感覺就像...就像我在用外星語跟他溝通一樣。」

咖啡廳裡傳來咖啡機的蒸氣聲,阿偉靠在椅背上,看起來很挫敗。

把看不見的債變成看得見的數字

「阿偉,你覺不覺得,現在這狀況跟之前我們寫考績表的時候有點像?」我問。

「嗯...」阿偉思考著,「你是說…這次也是要把這些技術的東西,給翻譯成老楊聽得懂的語言嗎?」

「沒錯。」我拿出筆記本,「現在我們也要做類似的事,只不過這次我們要翻譯的是『技術債』。」

阿偉皺著眉頭,等我繼續。

「你跟老楊說『違反SOLID原則』、『耦合度太高』,這對他來說根本就是技術黑話。」我在紙上畫了三個圈,「那如果我們換個說法呢?像這樣...」

我開始在紙上寫:

時間成本:

 - 如果我們現在不花三週重構,那未來六個月內,每個要用到這個Service的新功能,開發時間都會多30%以上。
 - 本來兩週能做完的功能,會變成三週。本來一週能做完的,會變成十天。這樣累積下來,我們跟競爭對手的速度差距會越拉越大。

阿偉眼睛亮了一下,「對啊,而且老楊最在意的就是時程...」

「對,所以我們得要改成用他在意的東西來跟他溝通。」我繼續寫第二點。

穩定成本:

 - 這個service在高峰期崩潰的機率很高。一旦系統掛掉,每小時的營收損失有多少?客服會接到多少抱怨電話?

「阿偉,上次系統出問題,客服那邊應該是整個都爆了吧?」

「對欸...」阿偉回想起來,「我記得那次老楊被罵到臭頭,他整個週末都在處理善後。」

「所以這不只單純是個普通的技術問題而已,這如果沒有處理好,會是一種營運風險。」我點點頭,「老楊或許不在乎什麼耦合度怎麼樣,但我可以確定,他一定會怕半夜被老闆罵醒的。」

「最後一個,」我寫下第三點,「因為這個service太爛,你和老黃每個禮拜要花多少時間在這上面救火?」

阿偉想了想,「至少五、六個小時吧...光是上禮拜就修了三個相關的 bugs。」

「那這五、六個小時,如果拿去做新功能,能創造多少價值?」

「呃...」阿偉停下來算了算,「如果是是那種急需上線的功能,應該能創造不少業績吧。」

「你看,」我把筆記本轉向他:

人力成本:

 - 每週花五小時在救火 x 每年有52週 = 一年260小時
 - 相當於每年浪費三個多月的工程師時間在救火上,等於白白燒掉XX萬
 - 變相排擠掉原本應該用來開發其他新功能的時間,這在無形中又衍生新的未知風險

「同樣是技術債,但現在我們是在告訴老楊:『你現在不處理,公司未來幾個月都還會繼續一直流血。』」

阿偉看著那三個圈,慢慢點頭。

給選項,不是提要求

「還有一件事很重要。」我喝了口咖啡,「上次你給了小P兩個方案讓他自己選,記得吧?」

「嗯。我記得那時候給了他雖然快但比較陽春的 A方案,還有比較慢卻扎實的B方案。」

我點點頭,「所以一樣的原理,現在面對技術債,我們也不能只給老楊一個『你就是要讓我重構』的選項。」

阿偉歪著頭,「那要怎麼給?」

「我們可以提供給他兩個明確的選擇,然後讓他思考過後,自己決定要付出什麼樣的取捨。」

我在新的一頁寫下:


方案A:現在重構

 - 需投入三週的時間成本,短期內降低、甚至暫停新功能產出
 - 小P要的那個即時推播,上線日可能會推遲
 - 但未來一年,相關功能的開發時程可以至少減少30%
 - 系統穩定性提升,重大bug發生機率減半
 - 團隊每週都可以增加五小時的額外產能

---

方案B:維持現狀

 - 不需花時間重構,可以繼續開發新功能
 - 小P要的那個即時推播,可以趕在這一版上線
 - 但必須接受:
    - 每個月至少出現一次重大bug的機率大於50%
    - 未來相關功能的時程將難以無法承諾與估計
    - 小P要的那個即時推播,可能會有資料延遲或遺失的風險
    - 團隊每週持續花五小時救火

「你看,」我指著紙上的內容,「本來老楊的決策只是單純是『要不要重構』,但經過我們的分析之後,現在他要考慮的就變成是『我願不願意讓公司持續出血,來換取短暫的進度?』這樣的問題了。」

阿偉盯著那兩個方案,若有所思。

「你的意思是…其實我不用硬叫他改,只要向他提示潛在的風險、看清楚『不改』所代表的意義,就可以了嗎?」

「是啊。」我說,「只有當他看到『不作為的代價』時,他才會重視。不然在他眼裡,技術債就永遠是『可以晚點再處理的小事』了。」

「對了,」他突然抬頭,「如果老楊還是選B方案、決定不要改,怎麼辦?」

「這時…我們就尊重他吧?」我露出神秘的微笑,「假使他看完後,還是選擇維持現狀的話,那也是他經過取捨後的選擇嘛。」

「也是。至少我已經盡力表達、在這件事上對得起自己了。」

不再只是會寫Code的工程師

阿偉拿出筆電,開始打字。

「我好像有點明白了。」他說,「以前我總是單純從技術的角度來爭取重構,難怪沒人理我。」

他邊打字邊說,「原來我需要把這些我平常熟悉的技術語言,給全部翻譯成對方關心的事情。如果是老楊的話,那就是時程、穩定、成本… 然後給他兩個方案,讓他自己選。」

我看著他專心打字的樣子,點點頭。

十五分鐘後,他把筆電轉向我。螢幕上是一封寫給老楊的email,條理分明地列出技術債可能會造成的各種影響,還有兩個方案的對比。

「你覺得怎麼樣?」

「很好。」我說,「你已經不是那個只會寫 code的工程師啦。」

阿偉笑了。他鼓起勇氣按下送出鍵,長長地吐了一口氣。

然後他看著我,「你知道嗎,我以前都覺得這些什麼溝通啊、表達的這些,都是在浪費時間。現在我才發現,如果我沒辦法讓其他人聽懂我的想法,那我的技術就算再好...可能也派不上用場吧。」

咖啡廳外開始下起細雨,窗戶上慢慢凝結出水珠。

「下次聊,」他揮揮手。


上一篇
Day 11:我不想只會防禦,我想試著合作看看
下一篇
Day 13:大神隊友要完美、老闆要速度,夾在中間的我快瘋了
系列文
《工程師的辦公室修行日誌》:寫給那個專注寫 Code、卻忘了寫人生的你31
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言