第 10 章:第十章:現在——沒有答案的答案
凌晨三點十七分。
志明又回到這個時間了。
不是真的「回到」——他沒有離開過。五天了,他一直坐在這個客廳裡。但現在,他覺得自己像是從一個很遠的地方回來了。那個地方沒有時間,沒有日期,只有記憶的碎片在他腦子裡反覆播放,像一台壞掉的投影機,同一個畫面跳針跳了五天。
他坐在地板上,背靠著沙發邊緣。筆電在茶几上開著,螢幕的光映在他臉上。
但這次不一樣。
這次他沒有看那段 controller code。
他打開的是一個空白文件。不是 VS Code,是記事本。白底黑字,沒有語法高亮,沒有自動排版,什麼都沒有。什麼都沒有的東西,有時候反而比較容易開始。
他的手指放在鍵盤上。
他不知道這封信要寫給誰。
給副總?副總不會看。副總只會轉給人資,然後人資會約他談「職場溝通的改善計畫」。
給團隊?團隊群組裡最後的訊息還停在大衛五天前的「Zhi哥,你還在嗎?」。沒有人再說話了。Slack 的訊息紀錄像一條乾掉的河。
給自己?他已經跟自己說了五天的話了,每一句都是「如果那時候」。
他還是開始打了。
不是因為他知道要寫什麼。是因為雅婷今天說了一句話。
你現在這個樣子,也是一種逃避。
他不想再逃了。
他打了第一行字:
> 我不知道這封信要寫給誰。
他看著這行字,覺得很蠢。但他沒有刪掉。
他繼續打:
> 也許是寫給副總的。也許是寫給大衛、小琪、老張的。也許是寫給我自己。也許是寫給那個在會議上說「先用了,有問題再說」的人。
>
> 五天了。我坐在客廳地板上,想了很多「如果」。如果那時候說了不。如果那時候聽了老張的話。如果那時候看了大衛的測試報告。如果那時候沒有回「應該 OK」。
>
> 但「如果」是假的。
他停下來,看著螢幕。游標在最後一行閃爍。
他繼續打。
不是「如果重來」——他發現自己寫不出「如果重來」。因為他不知道重來一次,他會做出什麼選擇。也許還是一樣。也許在同樣的時間、同樣的地點、面對同樣的副總和大衛和老張,他還是會說「先用了,有問題再說」。
因為那個選擇不是偶然的。那個選擇是他這個人——他的恐懼、他的習慣、他的「不想讓人失望」——的必然結果。
所以他不是在寫「如果重來」。
他是在寫「我學到了什麼」。
> 我學到的第一件事:我的「不拒絕」不是善良,是懦弱。
>
> 副總說「這件事你看著辦」,我應該問「如果時程不夠呢」。我應該說「六週不夠,我需要八週」。我應該在會議上把風險講清楚,不是用點頭帶過。
>
> 但我沒有。因為我怕。我怕副總覺得我扛不住。我怕別的 Team Lead 覺得我能力不夠。我怕年底的績效評估少兩千塊。
>
> 兩千塊。雅婷的孕婦營養品、女兒的幼稚園學費、車貸。
>
> 我用兩千塊,買了一個「好配合」的名聲。然後那個名聲,在出事的第一天,就被副總的一句話賣掉了。
>
> 「這個技術選型是志明全權決定的,我當時充分信任他。」
>
> 信任。這個詞從副總嘴裡說出來的時候,不是信任。是蓋章。是免責聲明。是「我已經盡了告知義務,剩下的都是你的事」。
>
> 我學到的第二件事:副總的「信任」不是信任,是風險轉嫁。
>
> 他從頭到尾沒有看過我的技術選型文件。他沒有問過我為什麼選這個 Package。他沒有問過時程是否合理。他只是說「我相信你的判斷」,然後在出事的時候說「這是志明全權決定的」。
>
> 這不是信任。這是一種很精緻的逃避。他用「信任」兩個字,把所有的決策責任放到我身上,然後在結果不如預期的時候,用同一句話,把自己摘乾淨。
>
> 我學到的第三件事:我的「扛責任」不是負責,是控制。
>
> 我以為我在扛責任。我以為我什麼都自己決定、自己處理、自己承擔,是一種負責任的表現。但實際上,我在控制。我控制技術選型,因為我怕別人選的我不滿意。我控制時程,因為我怕別人估的我不放心。我控制每一個決策,因為我覺得只有我不會搞砸。
>
> 但「只有我不會搞砸」是一個謊言。我搞砸了。而且因為所有決策都是我一個人做的,沒有人在過程中挑戰我、質疑我、幫我看盲點,所以這個砸,砸得特別徹底。
>
> 大衛在會議上說了「這個 Package 好像不太穩定」。我回了「先用了,有問題再說」。這不是採納意見後的決策。這是否決。
>
> 老張在角落裡微微搖頭。我看到了,但我選擇忽略。這不是「沒有收到訊息」。這是「收到了但不想處理」。
>
> 大衛在測試報告最後一頁用 Times New Roman 11 號字寫了警告。我滑過去了。這不是「沒看到」。這是「看到了但覺得不重要」。
>
> 我學到的第四件事:團隊的「沉默」不是同意,是放棄溝通。
>
> 大衛後來不說話了。老張後來不說話了。小琪後來只在 Slack 上問技術問題,不再問「我們真的能上嗎」。
>
> 他們不是同意了。他們是放棄了。因為他們說了也沒有用。因為他們的意見不會被聽見。因為他們的主管——我——已經用行動告訴他們:你們說的,不重要。
>
> 這是不是霸凌?
>
> 我不知道。
>
> 黃經理說「有同仁反應你否決他們的疑慮、要求加班、製造壓力」。我當時不知道怎麼回應。我回想:我確實否決了大衛的疑慮嗎?還是只是「沒有採納」?我確實要求加班嗎?還是只是「沒有阻止」?
>
> 界線在哪裡?
>
> 我不知道。
>
> 我學到的第五件事:即使修了,傷害已經造成。
>
> 星期六下午,我加了 lock,deploy 到 production。Race Condition 被擋住了。但 log 裡面還是偶爾會出現重複的 OrderConfirmationEmailSent——我修了 webhook 的入口,沒有修 notification 的出口。Fix 不完全有效。
>
> 後來我把 notification 的 listener 也加上了冪等性檢查,重複的 log 才真正消失。但那些已經被扣了兩次錢的人,不會因為我修了 log 就自動被退款。客服要一筆一筆處理。信任要一點一點修補。
>
> 程式可以修。信任修不好。
>
> 即使後來修了 lock,但那兩百個人已經被扣了兩次錢。修得好程式,修不回信任。
志明停下來。他的手指在鍵盤上懸了很久。
他看著螢幕上的字。那些字很直白,直白到讓他不太舒服。因為每一個字都在指著他。
但他沒有停。
他想起星期一下午兩點,副總辦公室。
他走進去的時候,副總正在看電腦螢幕。不是在看他的技術文件,是在看 email。副總抬頭看了他一眼,指了指椅子,說「坐」。
志明坐下來。
副總沒有馬上說話。他把 email 看完,把螢幕轉回去,然後雙手交叉放在桌上,看著志明。那個表情不是憤怒,是一種更難應付的東西——平靜。一種經過計算的平靜。
「志明,」副總說,「這次的事情,公司需要一個交代。」
「我知道。」志明說。
「技術面的部分,你已經處理了。但管理面的部分——」副總停了一下,像是在挑選措辭。「有人反應你在專案期間的溝通方式有問題。人資那邊已經在調查了。」
志明沒有說話。
「我不會去評論你的管理方式,」副總繼續說,「但我想讓你知道一件事。」
他停了一下。那個停頓很長,長到志明開始數自己的心跳。
「信任是雙向的。」副總說。「我信任你的判斷,但你也要信任你的團隊。如果你不信任他們,你應該說出來。如果你覺得時程有問題,你也應該說出來。你不應該一個人扛。」
志明聽著這句話。
他不確定這是在安慰他,還是在切割他。也許兩者都是。也許副總真的覺得這是建議。也許副總不知道,正是他——正是那句「這件事你看著辦,我相信你的判斷」——讓志明覺得他不能說「不」。
但志明沒有說這些。他只是點了一下頭。
「我知道了。」他說。
副總點了一下頭,那個點頭很輕,像在說「好,那就這樣了」。然後他轉回螢幕,繼續看他的 email。
志明站起來,走出辦公室。
他記得自己站在走廊上,手握著門把,站了大概十秒。然後他鬆開手,走回位子。
那是他最後一次單獨跟副總說話。
> 但我也有想幫他們說的話。
>
> 副總不是壞人。他也許真的相信我的判斷。他也許在說「我相信你的判斷」的時候,不是在做風險轉嫁,而是在表達一種他以為是鼓勵的東西。他也許不知道他的「信任」在出事的時候會變成一把刀。
>
> 老張不是壞人。他在茶水間跟我說了那個 Package 有坑。他跟我說了他在上一家公司遇過同樣的事。他盡力了。他用他的方式——那種不把話說清楚、給你線索讓你自己拼圖的方式——盡力了。
>
> 大衛不是壞人。他寫了測試報告。他在最後一頁寫了注意事項。他在會議上提了 GitHub Issue。他盡力了。他用他的那種「怕主管覺得我在找麻煩」的方式,盡力了。
>
> 小琪不是壞人。她測到了 Race Condition。她回報了。她問了「我們真的能上嗎」。她盡力了。
>
> 那這是誰的錯?
>
> 也許不是任何一個人的錯。
>
> 但這不代表沒有人有責任。
>
> 每個人都有責任。副總有責任——他的「信任」是一種不負責任的信任。老張有責任——他把警告說得太輕了,輕到只有他自己在意。大衛有責任——他把最重要的警告寫在最後一頁,用最小的字。小琪有責任——她問了「我們真的能上嗎」,但在志明說「應該 OK」之後,沒有再追問。
>
> 我也有責任。最大的責任。因為我是 Team Lead。因為決策是我做的。因為在那個會議室裡,在那個茶水間裡,在那個廁所裡,在那個 Slack 對話框裡,我有機會說不同的話,但我沒有。
>
> 霸凌不一定是拳頭。
>
> 有時候是結構。是那種「副總用信任包裝責任下放、主管用責任感壓迫自己、團隊用沉默回應壓迫」的結構。是那種「每個人都覺得自己是受害者,但每個人都在對下一個人施加壓力」的結構。
>
> 但如果每個人都說是結構的問題,那結構永遠不會變。
>
> 因為結構不是什麼抽象的東西。結構是副總在會議上說的每一句話。結構是志明在茶水間做的每一個決定。結構是大衛在測試報告最後一頁寫的那行字。結構是老張在角落裡搖的那個頭。
>
> 結構是所有人加起來的。
>
> 如果要變,也要所有人一起變。
>
> 但我不確定他們會不會變。
>
> 我不確定我會不會變。
>
> 我只知道,如果我繼續坐在這個客廳地板上,什麼都不會變。
志明把最後一行字打完,然後把記事本存檔。
檔名他打了「letter」,然後刪掉。改成「draft」。然後又刪掉。最後他打了「2024-06-19」,出事後的第五天。
他沒有寄出這封信。
他把它存成草稿,關上記事本。
然後他關上筆電。
客廳暗下來。只有窗簾縫隙透進來的路燈燈光,橘色的,很暗。
他坐在黑暗中,感覺到自己身體的重量。五天沒有好好吃東西、沒有好好睡覺、沒有好好走路的身體。很重。像一個被灌了鉛的容器。
但他覺得有什麼東西不一樣了。
不是因為他想通了什麼。他沒有想通。他還是不知道該怎麼面對副總、面對大衛、面對老張、面對人資的約談、面對那兩百個被重複扣款的客戶。
但他開始想一件事。
不是「如果那時候做了不同決定」。
而是「現在,我能做什麼」。
背後傳來腳步聲。
很輕,是室內拖鞋踩在木地板上的聲音。
志明沒有回頭。但他知道是誰。
雅婷站在他身後。
沉默。
然後他感覺到她坐下來了。不是站在他身後,是坐到他旁邊。地板上。跟他一樣,背靠著沙發邊緣。她順手把沙發上那件灰色羽絨外套——從禮拜天晚上就搭在那裡——拉過來,蓋在兩個人腿上。
她的肩膀幾乎碰到他的肩膀。懷孕七個月,她的體溫比以前高。他感覺到了。
他們坐在一起,看著客廳裡的路燈燈光。
「你想清楚了嗎?」雅婷問。
她的聲音很輕,不是那種「我期待你回答是」的問法。是真的在問。
志明想了一下。
「沒有。」
雅婷沒有失望。她好像早就知道他會這樣回答。
「那你要繼續坐在這裡嗎?」
志明轉頭看她。
雅婷的臉在黑暗中看不太清楚,只有輪廓。她的頭髮散下來了,沒有盤起來。她的眼睛在路燈的光裡面有一點點亮。
志明看著她。然後他看了看窗外。
天快亮了。
不是那種突然的天亮。是一種很慢的、從黑色變成深藍、再從深藍變成灰的過程。他以前從來沒有注意過。他以前總是在天亮之前就去睡了,或者在天亮之後才剛要睡。他從來沒有坐在客廳裡,看著天慢慢亮起來。
「幫我泡杯咖啡好嗎?」他說。
雅婷看著他。
然後她笑了。
不是那種大笑,是一種很小的、很輕的笑。嘴角往上動了一點,眼睛彎了一點。但志明看到了。
「好。」
她站起來。這次她沒有用手撐沙發扶手。她扶的是自己的腰。懷孕七個月,站起來的方式跟以前不一樣了。
她走進廚房。志明聽到咖啡機的聲音——雅婷上個禮拜修好了它,他不知道她什麼時候修的。熱水壺燒開水的聲音。即溶咖啡被湯匙攪動的聲音。
志明坐在地板上,聽著這些聲音。
然後他拿起手機。
螢幕朝上。他解鎖。
七十三條未讀訊息。他沒有打開它們。他打開的是 Slack。
他找到那個專案群組。群組名稱是「payment-gateway-integration」。最後的訊息是大衛五天前的「Zhi哥,你還在嗎?」。
志明的手指在鍵盤上停留了一下。
然後他開始打字。
不是長篇大論。不是解釋。不是辯解。不是「如果那時候」。
只是一行字:
> 大家,對不起。還有,謝謝你們那時候有說。
他看著這行字。
「大家」——是大衛、小琪、老張。也許還有副總。也許還有他自己。
「對不起」——為他在會議上說的「先用了,有問題再說」。為他在茶水間忽略的老張的搖頭。為他沒有仔細看的測試報告。為他在 Slack 上回的「應該 OK」。
「謝謝你們那時候有說」——謝謝大衛在會議上提了 GitHub Issue。謝謝老張在茶水間說了那個 Package 有坑。謝謝小琪測到了 Race Condition並回報。謝謝他們說了,即使他沒有聽進去。
他把這一行字看了三遍。
然後他的手指移到發送鍵上。
游標在那裡停留。
廚房裡,雅婷正在倒咖啡。咖啡的氣味飄過來,不是即溶咖啡的苦味,是比較溫和的、帶著一點奶香的氣味。她加了牛奶。她記得他喝不加糖但要加牛奶。
窗外的天色從灰變成淺灰。再過一個小時,太陽就會出來。
志明的手指在發送鍵上停留。
他不知道按下去會發生什麼。也許大衛會回,也許不會。也許老張會已讀不回。也許小琪會回一個 emoji。也許副總根本不會看。
他不知道。
但他知道一件事。
這一行字不是結局。它不是「問題解決了」的意思。它不是「一切都會變好」的意思。
它只是——
它只是一句話。一句他五天前就應該說的話。
游標在發送鍵上停留。
志明的手指懸在那裡。
窗外,天更亮了一點。
(第十章 完)