第八章〈幫手〉
台版 v1
地點:鏡界・翠鏡島 時間:1023年10月—12月 主角:林昭明
CTO走了之後,辦公室有一種奇怪的靜。
不是安靜。是繼續運作的靜。Email繼續進來。會議繼續開。有人繼續在白板前面示範東西,有人繼續問「Action item是什麼」。一個零件被換走,機器繼續轉。
林昭明坐在新樓層的hot-desk,看著自己副眼鏡的private view。
那張地圖。他在中介島畫的。加上模擬的結果。Null pointer的位置。Pattern的分布。
CTO見過。走了。韌體工程師見過部分。走了。
現在知道那張地圖存在的人,只剩下他一個。
他看著螢幕,想了很久。
如果沒有人再見到這張地圖,它就會變成一個人的幻覺。一個推斷。沒有任何人可以覆核的推斷。
他需要多一雙眼睛。
他選了阿文。
做測試的。林昭明跟他合作過幾次。他問的問題是準確的——不是問來填場的問題,是看過東西再問的。在例行會議上靜靜地聽,但偶爾插一句,切到要害。
林昭明找他,不是開門見山說「我要你幫我查」。他說:「在整理一些數據,想多一雙眼睛看看有沒有問題。」
阿文聽完,問了一個問題:「哪方面的數據?」
「Symptom distribution跟firmware的correlation。」
阿文站在茶水間,攪著他的咖啡。湯匙停了一秒。
「好。什麼時候?」
第一個禮拜。一間小會議室。那種訂不到半天但可以用一陣的房間。
林昭明在牆上掛出symptom distribution。掛出timeline。掛出firmware spec那一頁——initialization sequence那一段,他標記過的。
阿文看得仔細。
問了幾個問題,每個建立在上一個的基礎上。像是走一條路一樣。
「這個symptom,分布是規律的還是分散的?」阿文看著投影。
「規律的。不是隨機。有pattern。」
「Pattern跟firmware版本有沒有關係?」
「有。某個版本之後symptom的形狀改變了。你可以看到。」
阿文伸手,用指頭在投影上點了兩個位置——那兩個位置正正就是版本切換的節點。
他看到了。
林昭明那一刻的感覺,是很久沒有過的東西。像是你拿著一張地圖,走了很久,終於有人站在你旁邊,指著同一個位置,問同一個問題。
「如果這個pattern是真的,」阿文說話時沒有看他,是看著牆上的數據,「那root cause不在供應商那邊。」
「是。」
阿文沒有再說。站在那裡看了好一陣子。
那時候,林昭明覺得是有可能的。
散會之後,阿文走向門口,然後停住。
像是想說什麼,又像是在整理自己的想法。
「這個東西你查了多久?」
「正式來說,回來之後。但在中介島那時候已經開始記錄了。」
「多久?」
「差不多一年。」
阿文聽完,沒有立即反應。然後他轉過身來,看著林昭明。不是看資料的那種看法。是另一種。
「知道這件事的人呢?」
「兩個走了。CTO,還有一個做韌體的。」
「而你是最後知道的人。」
「是。」
阿文站在門口。走廊的燈光射進來,他背光的臉看不清楚表情。
「你把我拉進來了。」阿文說。不是 問句。是確認。
「是。」
「好。」他走出去。
第二個禮拜,阿文帶了一個人來。
沒有事先問林昭明。
那個人叫佩珊。PM出身,懂看硬體log。林昭明認識她——在一個review會議上,她曾經當著眾人指出一份數據的formatting問題。是說得出為什麼的人。
林昭明那天走進會議室,看到佩珊已經坐在那裡。阿文坐在她旁邊。
「我跟佩珊說了個大概。」阿文說。「她懂看hardware log。多個角度比較好。」
林昭明停了一下。
他注意到一件事:阿文跟佩珊坐在一起的方式。沒有那種第一次一起開會的距離。佩珊的包放在桌角,很自然,像是這個房間她來過很多次。阿文跟她說話的時候,用「你上次說的那個」——上次。
他們認識。不是因為林昭明的邀請才認識。是之前就認識了。
林昭明沒有追問。多一雙眼睛就是多一雙眼睛。誰帶來的不重要。
他開始說。從頭說。從symptom distribution說到firmware correlation,說到initialization sequence,說到null pointer。
佩珊聽完,問的第一個問題是:「這個symptom distribution,有沒有季節性因素?就是說不同月份有沒有差異?」
是合理的問題。
只是林昭明已經排除過季節性因素了。他在中介島那八個月做的第一件事就是排除。
「排除了。不是季節性的。Pattern跟firmware版本走,不跟月份走。」
佩珊點了點頭。「嗯。但我們要確認一下。」
確認。他已經確認過了。
但他沒有再說。因為多一雙眼睛的意思就是:人家要用他們自己的方式看。
第三個禮拜。阿文又帶了一個人來。
這次他有問林昭明。但不是問「可不可以」,是說「我想再加一個人——老廖。廠商出身,懂看供應商那邊的東西。你覺得呢?」
老廖。入行很久的人。從供應商那邊轉過來品牌廠。他懂廠商的視角——不是從文件裡懂,是做過的人懂。
「好。」林昭明說。
但他心裡有一件事微微動了。
阿文帶人進來。每次都有理由。每個理由都是好的。但林昭明開始注意到:每加一個人,討論的方向就寬了一點。每寬一點,他那條線就退了一點。
第一個禮拜,只有他跟阿文,全部時間都在firmware correlation上。
第二個禮拜,加了佩珊,開始有人說季節性因素,說testing protocol,說環境變數。
第三個禮拜——
老廖坐下來,靜靜地看著供應商那幾份FIR。看了好一陣子。
「那個廠商好幾年的FIR都是這個類型。」老廖說。
然後他靜了。
那個靜,林昭明覺得他是懂的。是在消化。
但阿文立刻接上:「是,所以廠商那邊的procedure有沒有改過,這個要check。佩珊,你可以去問嗎?」
「可以。我跟他們PM有聯絡。」
就這樣。老廖那句話,在空氣中停了不到五秒,就被接住、被裝進另一個方向。
「好幾年的FIR都是這個類型」——這句話可以指向兩個方向。一個是「廠商procedure有問題」。另一個是「問題不在廠商那邊,但被寫成廠商的問題,持續了好幾年」。
阿文接的是第一個方向。
林昭明看著老廖。老廖沒有再說。
這個pattern,林昭明用了兩個禮拜才確認不是自己多心。
每次他拉回去initialization sequence,就有人接住他的話,然後帶到另一條路。
不是粗暴的。不是「你錯了」。是很專業的、有道理的、每一步都說得通的。
林昭明說:「如果看symptom分布,initialization sequence那一段——」
阿文:「是,那點很重要。記下來了。」然後:「但同時我們要check測試protocol那邊的variable。」
林昭明說:「如果追根本原因,initialization sequence——」
佩珊:「你的分析是很重要的input。我們要加進去整體的picture。」
整體picture。
林昭明開始聽到這個詞。
每次他指向一個具體的方向,就有人說「加進去整體的picture」。然後那個方向就融化了,變成十幾個方向裡面的一個。
他又試了一次。帶了一份新的分析——symptom跟firmware release date的correlation。他能夠用現有數據做的最緊的correlation。
講完,沉默了一下。
阿文看著螢幕。「這個correlation有意思。但correlation不是causation。」
「是。但排除了其他主要factor之後——」
「怎麼排除?你有後台log支持排除了什麼?」
林昭明停了。
「我沒有後台log。但symptom pattern——」
佩珊接上:「如果沒有log,嚴格來講不能說排除了。」
「我不是說排除。我是說pattern指向——」
「Pattern可以有很多解釋。」
沉默。冷氣的聲音。
他看著他們兩個。每一句都是對的。Correlation不是causation,是對的。沒有log不能說排除,是對的。Pattern可以有很多解釋,是對的。
每一句都是對的。但加起來的效果是:他那張地圖,在這個房間裡,走不到下一步。
有一天下午,林昭明早了幾分鐘到會議室。
阿文跟佩珊已經在裡面。門虛掩。他走到門口,聽到裡面的聲音。
佩珊的聲音:「……昭明那個firmware correlation,如果真的寫進report,誰去defend?」
阿文的聲音:「他有data,但沒有log。沒有log的東西寫進report,到時候出問題——」
停了。
林昭明站在門口。沒有進去。等了幾秒,然後走開,去了茶水間倒水。等到正式時間再回來。
他走進會議室,阿文跟 佩珊已經坐好了。
阿文看著他,笑了一下:「來了。今天我們繼續對齊testing protocol那邊的timeline。」
繼續。一切繼續。
那個禮拜尾,林昭明在公用的工作台看到阿文開著一份collaborative doc。草稿。
「你來看一下吧。」阿文說。
他坐下,看著阿文寫。
那一段是說廠商的測試紀錄。阿文打了一句:「廠商測試數據顯示,錯誤類型集中於——」然後停住。看著自己那句。刪掉「集中於」。改成「包含」。
「為什麼改?」林昭明問。
阿文沒有看他,是看著螢幕。「『集中於』有指向性。但我們現在到不了說有一個單一方向。『包含』是中性的。」
林昭明看著那個字。「包含」。沒有指向。沒有方向。
阿文繼續寫。下一段。「韌體初始化邏輯存在——」停住。刪。改成「韌體層面存在初始化邏輯複雜性」。
「複雜性」。不是「問題」。不是「缺陷」。不是「錯誤」。是「複雜性」。
林昭明看著那個字的時候,他明白了一件事:這份文件不是他的調查報告。這份文件是另一樣東西。他的調查,在這份文件裡,正在被翻譯成另一種語言。
他沒有出聲。坐在那裡,繼續看。
但這個還不是最壞的事。
最壞的事發生在禮拜三。
他打開collaborative doc。他有權限——阿文早就share給他了。他記得自己兩天前放了一份symptom distribution的breakdown進去。是他做的,他親手放的,放在第五頁,initialization sequence那一節下面。
他翻到第五頁。
那份breakdown不在那裡了。
他往下找。找到了。在第十二頁。附錄B。
有人搬過去了。
他看edit history。佩珊。昨天下午。沒有留comment。沒有問過他。
他繼續看。
那份breakdown的數字沒有改 。但表格下面,被加了一行:「以上數據作為參考。正式結論以綜合分析為準。」
這行字是新的。edit history:阿文。昨天傍晚。
一份數據從正文搬到附錄。加了一行disclaimer。兩個動作。兩個人。前後幾個小時。沒有人通知他。
林昭明坐在hot-desk,看著螢幕。
他那張地圖——他花了一年畫的地圖——正在被搬到一份文件的角落。不是被刪除。是被搬到一個大多數人不會翻到的地方。
他去找老廖。
不是在會議室。是茶水間。等到老廖一個人的時候。
「你覺得initialization的問題是真的嗎?你自己的判斷。」
老廖拿著杯子。停了好一陣子。
「是有問題的。」聲音很低。
「但是——」
「但我們能寫的,是我們能寫的東西。」
「我知道。我是問你自己的判斷。」
老廖看著他。「我自己的判斷,你那張地圖有根據。但我自己的判斷在文件裡是沒有用的。文件要data support。」
「沒有data support是因為後台進不去。」
「是。」
「而進得了後台的人,走了。」
老廖看著他幾秒。幾秒裡面有很多東西——林昭明不確定他讀到了什麼,但他確定有東西。
「你知不知道,」老廖把杯子放在桌面,聲音又低了一點,「佩珊跟阿文,在你找他們之前,認識了幾年?」
「我知道。」
「你知不知道他們跟這裡的人的關係?」
林昭明沒有回答。
「我不是說他們有什麼陰謀。」老廖說。「沒有。真的沒有。但你把他們拉進來,他們帶著的東西不只是他們的專業。」
「帶著什麼?」
「規則。哪些字可以用,哪些不可以。哪些東西寫得下去,哪些寫不得。這些規則不是有人教的。是做久了就知道的。」
老廖走了。