第 8 章:第八章:星期一(事件爆發後第一天)——霸凌的定義
志明不知道自己是怎麼從辦公室回到家裡的。
他記得的是:坐在位子上、看著 log、斯拉一下椅子、站起來。經過副總辦公室的時候,門是關著的。他沒有停。搭電梯、走出大樓、走了一段路——他不確定走了多久,可能是十分鐘,也可能是半小時。等他回過神來的時候,他已經站在自己家的門前,鑰匙插在鎖孔裡,轉了兩圈。
門開的時候,客廳的燈是暗的。雅婷在臥室裡,門關著。他看了一眼時間——凌晨一點四十分。
他沒有去臥室。他坐在玄關,鞋子沒有脫,就那樣坐了大概十分鐘。然後他站起來,走到客廳,打開筆電。
不是要看 code。是要看 Slack。
大衛在晚上十一點傳了:「Zhi哥,不是我跟副總說的。」
志明當時沒有回。現在他看著這則訊息,看了一遍,又一遍。
他打了一行字:「我知道。」
游標停在發送鍵上。
他想到大衛星期五經過他身邊時的樣子——低著頭,走得很快,像是在逃離什麼。那時候志明不知道大衛在逃離什麼。現在他知道了。大衛在逃離「是不是我害了 Zhi哥」這個問題的答案。
但大衛說「不是我跟副總說的」。
那是誰說的?
志明把那行字發出去。
然後他打開筆電,看著 Slack 上的訊息。從星期六下午三點到凌晨一點,未讀訊息累積到了七十幾條。大部分是 @channel 的通知,幾條是私訊。他一條一條點開,讀完,關掉。
副總在下午四點的時候在 #project-payment-gateway 上面發了一則訊息:
> 各位辛苦了。目前退款預計今天內會全部處理完成。後續的技術檢討我們下週再安排。
技術檢討。
志明看著這四個字。技術檢討。不是「復盤」,不是「事後分析」,是「技術檢討」。這四個字的潛台詞是:這是一個技術問題。技術人員的問題。
他關上筆電,去浴室刷牙。鏡子裡的自己看起來像另外一個人——頭髮塌了,眼睛下面有青黑的影子,下巴上有沒刮乾淨的鬍渣。他洗了臉,換了睡衣,走到臥室門口,猶豫了一下,最後還是推開了門。
雅婷躺在床上,側著身子,呼吸很輕。他輕手輕腳地上床,躺下來。
「回來了。」雅婷的聲音從黑暗中傳來。不是問句。
「嗯。」
「吃了嗎?」
「……吃了。」
他沒有吃。便當只吃了幾口雞腿,米飯幾乎沒動。但他說了「吃了」,因為他知道如果說「沒吃」,雅婷會起來幫他弄東西吃,而他不值得她這樣。
雅婷沒有再說什麼。
志明閉上眼睛。黑暗中,他看到的是 log。OrderConfirmationEmailSent,OrderConfirmationEmailSent,OrderConfirmationEmailSent。偶爾一行不應該出現的重複。像一首走調的歌,你知道哪裡不對,但你沒辦法讓它停下來。
星期日他睡到中午。
醒來的時候雅婷不在家。手機上有一則她的訊息:「我帶女兒去超市,電鍋裡有飯。」
他坐在餐桌前面吃了飯。白飯配肉鬆。他把飯吃完,把碗洗了,然後回到客廳,打開筆電。
他不確定自己為什麼要打開筆電。系統已經修了。退款已經在處理了。他應該休息。但他坐在沙發上,手指不自覺地打開了瀏覽器,搜尋自家的公司名稱。
第一個結果是那個科技部落格的報導。第二個結果是 PTT 的一篇文,標題是:「XX電商重複扣款,有人也被扣了嗎?」下面有六十幾則回覆,有人貼了銀行明細,有人說已經拿到退款,有人說客服态度很差。
他一篇一篇看。每一則留言都是一個人。一個真實的人,用信用卡買了一個東西,然後發現自己被扣了兩次錢,然後打電話給客服,等了二十分鐘,然後被告知「系統會自動退款,請等待三到五個工作天」。
三到五個工作天。
志明把瀏覽器關上。
他打開 GitHub,看著自己提交的那個 hotfix branch。hotfix/race-condition-lock。一個 commit,三個檔案變更——PaymentWebhookController.php 加上了 DB::transaction() 和 lockForUpdate(),PaymentService.php 加上了 idempotency key 的檢查,還有一個新的 migration 在 payment_logs 上加了一個 processed 的 boolean flag。
他花了四十秒 deploy 的 fix。但他知道,如果他在上週一加那個 lock,整個星期六都不會發生。
四十秒的改動。一個星期的災難。
他關上筆電。
雅婷回來了。女兒看到爸爸,跑過來抱住他的大腿。「爸爸!」
志明蹲下來,把她抱起來。她的臉軟軟的,有奶味。他把臉埋在她的頭髮裡,閉上眼睛。
「爸爸你怎麼了?」女兒問。
「沒事。」志明說,「爸爸沒事。」
星期一早上,志明八點半到公司。
他比平常早。不是因為他想早,是因為他睡不著。凌晨四點他就醒了,躺在床上聽雅婷的呼吸,聽窗外的車聲,聽自己的心跳。五點他放棄了,起來坐在客廳,打開筆電,把 production log 從頭到尾看了一遍。
沒有新的重複扣款。Fix 有效。
他到公司的時候,辦公室裡還沒有多少人。他走到自己的位子,打開電腦,開始處理上週累積的信件。
九點十五分,他的手機震了一下。
一則來自公司內部系統的通知:
> 您有一個會議邀請:面談(人資)
> 時間:今日 10:00
> 地點:7樓 人資辦公室
> 邀請者:黃經理
志明盯著這則通知看了大概十秒。
面談。人資。黃經理。
他站起來,走到茶水間,倒了一杯水。他站在飲水機前面,手握著紙杯,水滿了也沒有移開。水溢出來,流到他的手上。
他想到上週在會議室裡,黃經理坐在副總旁邊,在副總說「這個技術選型是志明全權決定的」的時候,她在紙上寫了什麼。
他不知道她寫了什麼。
但他知道「面談」這兩個字的意思。
七樓的人資辦公室在走廊的盡頭。志明上次來這裡是入職的時候,三年前。那時候他坐在同一張椅子上,填了一堆表格,黃經理站在旁邊,用一種很平穩的語氣說:「歡迎加入。」
現在他坐在同一張椅子上。黃經理坐在桌子對面,面前放著一台筆電和一杯茶。
「志明,謝謝你來。」黃經理的語氣跟三年前一樣平穩。不是冷漠,是一種訓練過的平穩——一種「我不會讓我的情緒影響這次對話」的平穩。
「嗯。」
「今天找你來,是因為上週的專案出了狀況,公司希望了解一下整個過程。」她翻開筆電,看了一眼螢幕。「我先說明一下,這次面談的目的是了解狀況,不是要追究責任。你不需要有壓力。」
志明沒有說話。
「我想先問一個問題,」黃經理說,「你在專案期間,有沒有收到團隊成員對技術選型的疑慮或反對意見?」
志明想了一下。
「有。」他說。「大衛在會議上提過,那個 Package 的 GitHub Issue 有 Race Condition 的報告。老張在……私下的時候也提過。」
「那你是怎麼處理這些疑慮的?」
「我……」志明停了一下。「我當時判斷前端加入 debounce 可以緩解這個問題,所以沒有在後端加入 lock。」
「所以你的意思是,你收到了疑慮,但你沒有採納。」
「不是沒有採納,是——」
他停了。
不是沒有採納。那是什麼?「覺得問題不嚴重」?「覺得時程來不及」?「覺得自己可以控制風險」?
每一個說法都是「沒有採納」的另一種講法。
「我當時判斷風險可控。」志明說。
黃經理在筆電上打了一些字。
「好。第二個問題。」她抬頭看他。「有同仁反應,你在專案期間要求團隊加班,製造了很大的壓力。你有什麼想說的?」
志明愣住。
「要求加班?」
「有同仁反應,你在專案接近尾聲的時候,要求團隊留下來加班,即使有人提出時程上的疑慮。」
志明回想。
他要求加班了嗎?
上週四晚上,他在 Slack 上說:「今天需要把 migration 跑完,大家辛苦了。」這是要求加班嗎?還是只是「告知進度」?
上週三晚上,大衛留下來修 migration 的 index,志明留下來陪他。他沒有叫大衛留下來。但大衛看到志明沒有走,他也沒有走。這算不算「要求」?
上週二晚上,小琪在 Slack 上說她前端遇到問題,志明說「沒關係,我們明天再處理」。但小琪還是留下來弄到十一點。志明知道,但他沒有說「你先回去」。這算不算「要求」?
「我……」志明說,「我沒有要求任何人加班。但我知道大家有留下來。我沒有阻止。」
「沒有阻止。」黃經理重複了這四個字,然後在筆電上打了一些字。
志明看著她的手在鍵盤上打字。劈劈啪啪。每一個字都像是被記錄下來的證據。
「黃經理,」志明說,「我可以問一個問題嗎?」
「你說。」
「反應的人是誰?」
「這個我不能告訴你。」
「那副總呢?」
黃經理的手停在鍵盤上。
「什麼?」
「副總把責任推給我,這算什麼?」志明的聲音比他自己預期的要平。不是因為他不生氣,是因為他太累了,累到連生氣都需要花力氣。「他在會議上說『這個技術選型是志明全權決定的』。但當初是他說『這件事你看著辦,我相信你的判斷』。這算什麼?」
黃經理沉默了一下。那個沉默大概只有三秒,但志明感覺得出來,那三秒裡面有很多東西在跑。
「林副總有他的管理考量。」她說。
志明聽著這句話。
林副總有他的管理考量。
這句話跟副總說的「我充分信任他」是同一種結構——一種把責任放在一個安全距離之外的結構。副總有他的管理考量。副總充分信任他。副總沒有錯。副總只是信任了一個做錯決定的人。
那個人是他。
「我了解了。」志明說。
黃經理繼續問了幾個問題。關於專案的時程、關於團隊的溝通、關於測試報告。志明一一回答。他的聲音很平,像在念一段他寫好的稿。
面談結束的時候,黃經理說:「謝謝你今天的配合。公司很重視職場霸凌的防治,如果屬實,我們需要進行調查。但目前只是了解狀況的階段,你不需要擔心。」
職場霸凌。
志明站在人資辦公室門口,聽著這四個字在他腦海裡回響。
職場霸凌。
他想起年初的性平教育訓練,黃經理站在會議室前面放投影片,用一種很平穩的語氣念:「職場霸凌的定義包括但不限於:持續性的冒犯、威脅、冷落、孤立、或過度要求,導致同仁在身心上受到損害。」
過度要求。
他過度要求了嗎?
他要求大衛留下來修 migration 了嗎?沒有。但大衛留下來了。
他要求小琪趕前端進度了嗎?沒有。但小琪趕了。
他要求老張配合嗎?老張從頭到尾都沒有配合。他也沒有對老張怎麼樣。
那他霸凌了誰?
還是說,他霸凌的方式不是「要求」,而是「沒有阻止」?沒有阻止大衛留下來。沒有阻止小琪趕工。沒有阻止整個團隊在一個有風險的時程裡面往前衝。
「沒有阻止」算不算霸凌?
他不知道。
他只知道,當黃經理說「有同仁反應你否決他們的疑慮、要求加班、製造壓力」的時候,他沒有辦法說「我沒有」。
因為他確實否決了大衛的疑慮。不是用「不行,你錯了」這種方式,而是用「先用了,有問題再說」這種方式。這兩種方式,結果是一樣的。大衛的疑慮被放在一邊了。
他確實沒有阻止加班。不是用「你留下來」這種方式,而是用「我也留下來」這種方式。這兩種方式,結果是一樣的。團隊留下來了。
他確實製造了壓力。不是用「你做不到就滾」這種方式,而是用「我相信你做得到」這種方式。這兩種方式,結果是一樣的。團隊感受到了壓力。
志明走在走廊上,經過一間一間的辦公室。門有的開著,有的關著。他看到裡面的人坐在位子上,面對螢幕,打字,打電話,開會。每一個人都看起來很忙。每一個人都看起來很正常。
他不知道是誰去跟人資說的。
他在樓梯間遇到大衛。
大衛從樓上來,手裡拿著一杯便利商店的咖啡。他看到志明,腳步頓了一下。
「Zhi哥。」
「嗯。」
他們面對面站在樓梯間。日光燈在頭頂嗡嗡地響。
「Zhi哥,不是我說的。」大衛說。他的聲音比平常小,眼睛沒有看志明,而是看志明肩膀後面的某個地方。「人資沒有跟我面談過。我不知道是誰說的。但我沒有去反應。」
志明看著他。
大衛二十八歲,年資兩年。他剛進公司的時候,是志明帶他的。教他 Laravel 的 Service Container、教他怎麼寫 migration、教他怎麼在 Git 上面開 branch。那時候大衛叫他「Zhi哥」,眼睛裡面有一種很亮的東西——不是崇拜,是一種「我想變成你這樣的人」的東西。
現在那個東西沒有了。
現在大衛的眼睛裡面是一種很複雜的東西——自責、恐懼、還有一點點憤怒。不是對志明的憤怒,是對整件事情的憤怒。一種「為什麼會變成這樣」的憤怒。
「我知道。」志明說。
「你知道?」
「嗯。」
大衛看著他。他的嘴唇動了一下,像是想說什麼,但最後只是點了一下頭。
「Zhi哥,」大衛說,「那個測試報告——」
「我知道。」志明打斷他。「不是你的錯。」
大衛低下頭。他的手指在便利商店的咖啡杯上收緊,杯壁微微變形。
「我應該在會議上說得更大聲一點。」大衛說。
志明沒有回答。
因為他知道,就算大衛說得更大聲,他可能還是不會聽。不是因為他覺得大衛是錯的,而是因為他當時已經決定了。他決定用那個 Package。他決定不延期。他決定「先用了,有問題再說」。
大衛說得再大聲,也改變不了一個已經決定的人的決定。
除非那個人自己改變。
「大衛,」志明說,「你覺得我有沒有霸凌你?」
大衛抬起頭。他的表情不是驚訝,是一種更複雜的東西——像是這個問題他已經想過很多次了,但從來沒有想過會從志明嘴裡問出來。
「什麼?」
「霸凌,」志明說,「你覺得我的管理方式,有沒有對你造成壓力?」
大衛沉默了大概五秒。
「我不知道。」他說。「有時候我覺得壓力很大。但我不確定那個壓力是你給的,還是……整個環境給的。」
整個環境。
志明聽著這四個字。
整個環境。時程是整個環境給的。技術選型的壓力是整個環境給的。加班的文化是整個環境給的。副總的「我相信你」是整個環境給的。
那他呢?他是這個環境的一部分,還是這個環境的受害者?
還是兩者都是?
「我知道了。」志明說。
他轉身走下樓梯。
「Zhi哥。」大衛在後面叫他。
志明停下來,沒有回頭。
「我相信你當初的判斷是有原因的。」大衛說。
志明站在樓梯上,背對著大衛。
他不知道該怎麼回應這句話。
大衛說「我相信你」。副總也說「我相信你」。但這兩個「我相信你」聽起來完全不同。副總的「我相信你」是在出事之後說的,是一個免責聲明。大衛的「我相信你」是在出事之後說的,是一個……
一個什麼?
志明不知道。
他繼續走下樓梯。
他回到位子的時候,看到桌上放了一張便利貼。
不是小琪的字。是副總的字——那種一筆一劃、很工整的字:
> 志明,下午兩點來我辦公室一趟。 林副總
志明把便利貼撕下來,看了兩秒,打開抽屜放進去。
他打開 Slack,看著 #project-payment-gateway 的訊息。最後一則訊息是副總在昨天發的:「技術檢討我們下週再安排。」
下週。
他打開 GitHub,看著那個 hotfix branch。hotfix/race-condition-lock。他忽然想到一件事:這個 branch 還沒有被 merge 到 main。他上週六 deploy 的時候是直接從這個 branch deploy 的,但後來沒有做 merge。
他打開 GitHub,點下 merge 按鈕。
綠色的 check mark。Merge 完成。
一個四十秒的改動。一個星期的災難。一個 merge button。
他關上 GitHub,打開 production log。
[2024-06-17 09:45:12] production.INFO: OrderConfirmationEmailSent {"order_id":18234}
[2024-06-17 09:45:13] production.INFO: OrderConfirmationEmailSent {"order_id":18235}
[2024-06-17 09:45:13] production.INFO: OrderConfirmationEmailSent {"order_id":18236}
正常。沒有重複。
他靠回椅背上,閉上眼睛。
他想到黃經理說的話:「有同仁反應你否決他們的疑慮、要求加班、製造壓力。」
他想到大衛說的話:「我不確定那個壓力是你給的,還是整個環境給的。」
他想到副總說的話:「這個技術選型是志明全權決定的。我當時充分信任他。」
三句話。三個角度。三種「真相」。
黃經理的「真相」是:志明否決了疑慮、要求了加班、製造了壓力。
大衛的「真相」是:壓力很大,但不知道是誰給的。
副總的「真相」是:志明全權決定,副總只是信任他。
哪一個是真的?
也許都是。也許都不是。
志明睜開眼睛,看著天花板。日光燈管上面沒有飛蛾的屍體——那是上週六在辦公室看到的。這裡是辦公室,不是會議室。這裡的日光燈管是乾淨的。
他拿出手機,打開 Slack,看著大衛在十分鐘前傳的訊息:
> Zhi哥,不是我說的。
他回了:「我知道。」
然後他打了一行字:「但不管是誰說的,那些事情確實存在。」
他看著這行字,游標在發送鍵上停留了很久。
最後他刪掉了。
他把手機放下,打開筆電,開始寫信。不是給副總,不是給黃經理,不是給團隊。是給自己。
他打了一行字:
> 我不知道我是不是霸凌者。
然後他停下來,看著這行字,看了很久。
他想到黃經理說的「職場霸凌的定義」。持續性的冒犯、威脅、冷落、孤立、或過度要求。
他有沒有一直這樣做?還是只有在專案期間?
他「沒有阻止」大衛加班,是「冷落」嗎?
他「沒有採納」大衛的疑慮,是「冒犯」嗎?
他「沒有拒絕」副總的時程要求,是「過度要求」嗎?
還是說,這些都只是「管理」?只是「在壓力下做決定」?只是一個夾在上級和下屬之間的主管,在有限的資訊和時間裡面,做了他認為最好的選擇?
他不知道。
他只知道,當黃經理說「有同仁反應你否決他們的疑慮」的時候,他沒有辦法說「我沒有」。
他確實否決了。
不是用「不行」這種方式,而是用「先用了,有問題再說」這種方式。
而「先用了,有問題再說」這八個字,從他嘴裡說出來的時候,聽起來像是判斷。但現在回想起來,聽起來更像是——逃避。
逃避「如果要求延期,副總怎麼看我」這個問題。
逃避「如果承認有風險,我就不夠果決」這個恐懼。
逃避「如果停下來,所有人都會看到我在猶豫」這個想像。
他逃避了。然後他讓整個團隊跟著他一起逃避。
這算不算霸凌?
志明不知道。
他只知道,當副總說「我充分信任他」的時候,他感覺到的不是被信任,是被丟棄。而當黃經理說「有同仁反應你製造壓力」的時候,他感覺到的不是被指責,是困惑。
因為他從來沒有想過,自己的決定會影響到別人。
不是「知道但忽略」。是「從來沒有想過」。
他以為他在扛責任。但他只是在扛自己。
他以為他在保護團隊。但他只是在保護自己「看起來像一個好主管」的想像。
他以為「先用了,有問題再說」是務實。但現在看起來,那只是把問題留給別人。留給大衛、留給小琪、留給那 203 個被重複扣款的客戶。
志明把筆電蓋上。
他看了一眼時間。十一點四十分。距離下午兩點和副總的面談,還有兩個小時二十分鐘。
他站起來,走到茶水間。老張在那裡。
老張正在倒茶。他看到志明進來,沒有說話。
他們站在茶水間裡面,一個在倒茶,一個在倒水。飲水機的壓縮機在牆角嗡嗡地響。
「老張,」志明說。
老張沒有看他。
「上禮拜你說的那些,是對的。」
老張把保溫杯蓋上,轉過身,看了志明一眼。
那個眼神不是「我早就說了」。也不是「你現在才知道」。
那個眼神是一種很安靜的東西。像是一個已經把所有話都說完了的人,在等對方自己聽懂。
老張拿著保溫杯,走了。
志明站在茶水間,手握著紙杯,水已經涼了。
他低頭喝了一口。
水是溫的,不冰也不熱。
他站在那裡,聽著飲水機的壓縮機聲,聽著辦公室隱約的鍵盤聲,聽著自己的心跳。
然後他走回位子,坐下來,打開筆電。
下午兩點,他要去見副總。
他不知道副總要說什麼。但他知道,不管副總說什麼,他都會坐在那裡,聽完,點頭,然後走出來。
就像他這輩子做過的大部分事情一樣。
聽完。點頭。走出來。
然後繼續。
他打開 Slack,看著那個專案的群組。最後一則訊息是副總的:「技術檢討我們下週再安排。」
他打了一行字:
> 大家,對不起。
游標停在發送鍵上。
他看了五秒。
然後他刪掉了。
不是因為他不想說。是因為他不知道「對不起」之後要接什麼。
對不起,我做了錯誤的決定?
對不起,我沒有聽你們的?
對不起,我把你們拖下水了?
每一句都對。每一句都不夠。
他把 Slack 關上,靠在椅背上,閉上眼睛。
日光燈的光穿過眼皮,在他的視線裡形成一片模糊的橙紅色。
他想起雅婷上週說的話:「你在公司扛的那些東西,是真的必須扛的,還是你自己覺得必須扛的?」
他當時沒有回答。
現在他還是不知道怎麼回答。
但他開始想這個問題了。
這算不算一種改變?
他不知道。
他只知道,下午兩點,他要去見副總。而副總會說什麼,他已經知道了。
副總永遠有他的管理考量。
(第八章 完)