跳至主要内容

第八章〈幫手〉

港版 v2


地點:鏡界・翠鏡島 時間:1023年10月—12月 主角:林昭明


CTO走咗之後,辦公室有一種奇怪嘅靜。

唔係安靜。係繼續運作嘅靜。Email繼續入。會議繼續開。有人繼續喺白板前面示範嘢,有人繼續問「Action item係乜」。一個零件被換走,機器繼續轉。

林昭明坐喺新樓層嘅hot-desk,望住自己副眼鏡嘅private view。

嗰張地圖。佢喺中介島畫嘅。加上模擬嘅結果。Null pointer嘅位置。Pattern嘅分佈。

CTO見過。走咗。Firmware工程師見過部分。走咗。

而家知道嗰張地圖存在嘅人,剩番佢一個。

佢望住個螢幕,諗咗好耐。

如果冇人再見到呢張地圖,佢就會變成一個人嘅幻覺。一個推斷。冇任何人可以覆核嘅推斷。

佢需要多一對眼。


佢揀咗阿文。

做測試嘅。林昭明同佢合作過幾次。佢問嘅問題係準嘅——唔係問嚟填場嘅問題,係睇過嘢先問嘅。喺例行會議上面靜靜地聽,但偶爾插一句,切到要害。

林昭明搵佢,唔係明刀明槍話「我要你幫我查」。佢話:「整理緊一啲數據,想多對眼睇吓有冇問題。」

阿文聽完,問咗一個問題:「邊方面嘅數據?」

「Symptom distribution同firmware嘅correlation。」

阿文企喺茶水間,攪緊佢杯咖啡。湯匙停咗一秒。

「好。幾時?」


第一個禮拜。一間細會議室。嗰種book唔到半日但可以用一陣嘅房。

林昭明喺牆上掉出symptom distribution。掉出timeline。掉出firmware spec嗰一頁——initialization sequence嗰段,佢標記過嘅。

阿文睇得仔細。

問咗幾個問題,每個建立喺上一個嘅基礎上。好似行一條路咁。

「呢個symptom,分佈係規律嘅定係散嘅?」阿文望住個投影。

「規律嘅。唔係random。有pattern。」

「Pattern同firmware版本有冇關係?」

「有。某個版本之後symptom形狀改變咗。你可以睇到。」

阿文伸手,用指頭喺投影上面點咗兩個位——嗰兩個位正正就係版本切換嘅節點。

佢睇到咗。

林昭明嗰一刻嘅感覺,係好耐冇試過嘅嘢。好似你攞住一張地圖,行咗好耐,終於有人企喺你隔離,指住同一個位,問同一個問題。

「如果呢個pattern係真嘅,」阿文講嘢嘅時候冇望住佢,係望住牆上嘅數據,「咁root cause唔喺供應商嗰邊。」

「係。」

阿文冇再講。企喺度望咗好一陣。

嗰陣,林昭明覺得係有可能嘅。


散會之後,阿文行去門口,然後停住。

好似想講乜,又好似係整理自己嘅諗法。

「呢個嘢你查咗幾耐?」

「正式嚟講,返嚟之後。但中介島嗰陣已經開始記嘢咯。」

「幾耐?」

「差唔多一年。」

阿文聽完,冇即刻反應。然後佢轉過身嚟,望住林昭明。唔係睇資料嗰種望法。係另一種。

「知道呢樣嘢嘅人呢?」

「兩個走咗。CTO,同埋一個做firmware嘅。」

「而你係最後知道嘅人。」

「係。」

阿文企喺門口。走廊嘅燈光射入嚟,佢背光嘅面睇唔清楚表情。

「你拉我入嚟。」阿文講。唔係問句。係確認。

「係。」

「好。」佢行咗出去。


第二個禮拜,阿文帶咗一個人嚟。

冇事先問林昭明。

嗰個人叫佩珊。PM出身,識睇硬件log。林昭明識佢——喺一個review會議上面,佢曾經當眾指出一份數據嘅formatting問題。係講得出點解嘅人。

林昭明嗰日行入會議室,見到佩珊已經坐喺度。阿文坐喺佢隔離。

「我同佩珊講咗個大概。」阿文話。「佢識睇hardware log。多個角度好啲。」

林昭明停咗一下。

佢注意到一樣嘢:阿文同佩珊坐埋嘅方式。冇嗰種第一次一齊開會嘅距離。佩珊嘅袋放喺枱角,好自然,好似呢個房間佢嚟過好多次。阿文同佢講嘢嘅時候,用「你上次講嗰個」——上次。

佢哋識。唔係因為林昭明嘅邀請先識。係之前就識。

林昭明冇追問。多一對眼就係多一對眼。邊個帶嚟嘅唔重要。

佢開始講。由頭講。由symptom distribution講到firmware correlation,講到initialization sequence,講到null pointer。

佩珊聽完,問嘅第一個問題係:「呢個symptom distribution,有冇seasonal factor?即係唔同月份有冇差異?」

係合理嘅問題。

只係林昭明已經排除過seasonal factor。佢喺中介島嗰八個月做嘅第一件事就係排除。

「排除咗。唔係seasonal。Pattern跟firmware版本走,唔跟月份走。」

佩珊點點頭。「嗯。但我哋要確認吓。」

確認。佢已經確認過。

但佢冇再講。因為多一對眼嘅意思就係:人哋要用佢哋自己嘅方式睇。


第三個禮拜。阿文帶多咗一個人。

呢次佢有問林昭明。但唔係問「可唔可以」,係話「我諗加多一個人——老廖。廠商出身,識睇供應商嗰邊嘅嘢。你覺得呢?」

老廖。入行耐嘅人。由供應商嗰邊轉過嚟品牌廠。佢識廠商嘅視角——唔係從文件入面識,係做過嘅人識。

「好。」林昭明話。

但佢心入面有一樣嘢微微動咗。

阿文帶人入嚟。每次都有理由。每個理由都係好嘅。但林昭明開始留意到:每加一個人,傾偈嘅方向就闊咗一啲。每闊一啲,佢嗰條線就退咗一啲。

第一個禮拜,得佢同阿文,全部時間都喺firmware correlation上面。

第二個禮拜,加咗佩珊,開始有人講seasonal factor,講testing protocol,講環境變數。

第三個禮拜——

老廖坐落嚟,靜靜地睇住供應商嗰幾份FIR。睇咗好一陣。

「嗰個廠商好幾年嘅FIR都係呢個類型。」老廖話。

然後佢靜咗。

嗰個靜,林昭明覺得佢識嘢。係喺消化。

但阿文即刻接上:「係,所以廠商嗰邊嘅procedure有冇改過,呢個係要check嘅。佩珊,你可以去問嗎?」

「可以。我同佢哋PM有聯絡。」

就係咁。老廖嗰句話,喺空氣入面停咗唔夠五秒,就被接住、被裝入另一個方向。

「好幾年嘅FIR都係呢個類型」——呢句話可以指向兩個方向。一個係「廠商procedure有問題」。另一個係「問題唔喺廠商嗰邊,但被寫成廠商嘅問題,持續咗幾年」。

阿文接嘅係第一個方向。

林昭明望住老廖。老廖冇再講。


呢個pattern,林昭明用咗兩個禮拜先確認唔係自己多心。

每次佢拉返去initialization sequence,就有人接住佢嘅話,然後帶去另一條路。

唔係粗暴嘅。唔係「你錯咗」。係好專業嘅、有道理嘅、每一步都講得通嘅。

林昭明講:「如果睇symptom分佈,initialization sequence嗰一段——」

阿文:「係,嗰點好重要。記低咗。」然後:「但同時間我哋要check埋testing 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係因為後台入唔到。」

「係。」

「而進入到後台嘅人,走咗。」

老廖望住佢幾秒。幾秒入面有好多嘢——林昭明唔確定佢讀到咩,但佢確定有嘢。

「你知唔知,」老廖將杯放喺枱面,聲仲低咗一啲,「佩珊同阿文,喺你搵佢哋之前,已經識咗幾年?」

「我知。」

「你知唔知佢哋同呢度啲人嘅關係?」

林昭明冇答。

「我唔係話佢哋有乜陰謀。」老廖話。「冇。真係冇。但你拉佢哋入嚟,佢哋帶住嘅嘢唔淨止係佢哋嘅專業。」

「帶住乜?」

「規則。邊啲字可以用,邊啲唔可以。邊啲嘢寫得落去,邊啲唔寫得。呢啲規則唔係有人教嘅。係做耐咗就知嘅。」

老廖行咗。

林昭明企喺茶水間。咖啡機嘅聲。低嘅,連續嘅。

佢開始明白一樣嘢。但嗰樣嘢仲未有名。


佢再試過一次。

下一次開會,佢攞住佢嘅analysis。重新整理過。由firmware角度睇嘅symptom distribution。佢能夠有嘅最清楚版本。

佢講完。

阿文話:「呢個analysis好清楚。我建議放入去附錄,作為supporting material。」

附錄。

「我嘅意思係,呢個唔係supporting material。呢個係指向root cause嘅evidence。」

阿文望住佢。好平靜。「昭明。你嘅analysis係你嘅interpretation。冇後台log support,呢個喺正式文件入面只能係附錄。你明嘅。」

interpretation。

去年佢做嗰個模擬嘅時候,喺螢幕上面見到null pointer嘅時候,嗰個唔係interpretation。嗰個係佢親眼見到嘅。但係「佢自己嘅模擬環境」同「production system」之間,有一道講唔清楚嘅gap。呢道gap,喺呢個房間入面,被叫做interpretation。

佢望住阿文。阿文眼都冇眨。

佩珊冇出聲。老廖低住頭。

「好。」林昭明話。「附錄。」


嗰個禮拜之後,佢再開份doc,想check一啲嘢。

佢留意到timeline嗰一頁有改動。

佢記得自己寫嘅版本:某個firmware release嘅日期係三月十七。佢對照過官方記錄嘅。

而家嗰度寫嘅係三月二十四。

差七日。

佢去check edit history。係佩珊改嘅。冇comment。冇解釋。

七日。喺大多數人眼入面乜都唔係。但林昭明知道:三月十七到三月二十四之間,有一次firmware hotfix。如果用三月二十四嘅日期,個hotfix就喺之前,symptom pattern嘅轉折點就對唔上firmware release。如果用三月十七,對得上。

佢對得上。

有人改咗佢對得上嘅嘢。

林昭明坐喺嗰度。佢嘅手指停喺keyboard上面。佢可以改返。佢有權限。改一個數字。七日。

但如果佢改返,佩珊會見到。阿文會見到。然後呢?然後佢成為嗰個「執著於一個日期」嘅人。然後每一次discussion,佢嘅名都會帶住呢個標籤:嗰個改人哋嘢嘅人。嗰個唔肯放低嘅人。

佢望住個螢幕。

佢冇改。


三個禮拜後,report嘅雛形出嚟。阿文send俾大家。「大家睇下有冇補充。」

林昭明坐落嚟,讀。

每一句係真嘅。測試數據係真嘅。投訴記錄係真嘅。廠商回覆係真嘅。時間線係真嘅——用咗佩珊改過嘅日期。

佢搵initialization sequence嗰一節。喺第七頁。夾喺十六個factor中間。

「固件層面存在初始化邏輯複雜性,或影響部分邊緣狀況下嘅判斷準確性。建議廠商進一步測試以確認影響範圍。」

佢讀完。讀多一次。

「或影響。」「部分邊緣狀況。」「建議廠商進一步測試。」

換句話講:可能係問題,可能唔係。繼續測。

份report問嘅問題,同佢嗰張地圖問嘅問題,唔係同一個問題。

佢嗰張地圖問:根本原因係乜。

份report答:綜合情況係咁,建議多方面跟進。

唔係兩個矛盾嘅故事。係兩個關於唔同事嘅故事,用同一批名詞。睇完之後,人哋會以為係同一件事。


嗰個禮拜。林昭明喺大群組睇到一份名單。

裁員名單。大陸QC嘅部分,幾個位置被cut。

其中一個名字,係佢聯絡過嘅。對供應商嗰幾年嘅FIR record好熟。佢試過問過幾個問題,對方答得準——係睇過原始report再答嘅人。

幾個月前,呢個人仲會覆佢嘅email。上個月,已讀不回。佢以為係忙。

而家個名字喺裁員名單上面。理由:「業務調整,相關職能重新規劃。」

林昭明望住嗰個名字。

CTO。走咗。 Firmware工程師。走咗。 大陸QC。裁咗。

每一個走嘅人,都有一個合理嘅原因。每一個原因,獨立睇,都係正常嘅。

佢係唯一一個同時睇見三個消失嘅人。

佢關掉個view。


然後係一封全team email。

「電源管理優化項目完成。透過測試流程改進及系統功能精簡,整體良率較Q1基準提升。供應商投訴率降低。感謝相關team嘅努力。」

林昭明坐喺hot-desk,讀住封email。

「系統功能精簡。」

佢知道呢四個字嘅意思。有幾個功能被關掉咗。Null pointer觸發嘅條件減少咗。「電池有問題」嘅判斷少咗——唔係因為電池冇問題,係因為觸發嗰個判斷嘅門被移走咗。

供應商投訴跟住少咗。

投訴少咗唔係因為問題修正咗。係因為偵測嗰道門被拆咗。

Email入面冇一句係:「我哋發現咗一個問題。問題係initialization嘅null pointer。我哋修正咗。」

因為承認有null pointer,就等於承認之前所有寫住「供應商組件異常」嘅report,全部嘅「原因」欄都係錯嘅。幾年嘅文件。幾百份report。

所以冇人承認。

功勞寫成:「系統功能精簡,流程改進。」

林昭明讀到最後一句——「感謝相關team嘅努力。」

佢諗:佢係咪「相關team」。定係嗰張地圖上面嗰個人。定係附錄B入面嗰個名字。


嗰日下午,佢搵阿文。茶水間。

阿文喺揀咖啡。林昭明行過去,企喺佢隔離。

「你睇到封email?」

「睇到。」阿文冇望佢,係望住個機器。

「『系統功能精簡』——你知道呢四個字嘅意思。」

阿文停咗一停。咖啡機嘅聲填咗嗰幾秒。

「我知。」

「你知。佢哋靜靜關掉嘅功能,同null pointer觸發嘅功能,係同一啲嘢。」

「昭明。」阿文攞好杯,轉過嚟。面上冇任何攻擊性嘅嘢。冇敵意。冇閃避。係一個做咗好多年嘅人嘅平靜。「你嘅推斷我理解。第一個禮拜你畀我睇嗰張地圖,我就知你指嘅方向。」

「咁你點解——」

「因為知道同寫得出係兩件事。」阿文拎住杯。「你冇後台log。你嘅推斷放入正式文件,出咗事你頂。唔係頂推斷嘅後果——係頂『寫咗一個冇data support嘅結論入report』嘅後果。你嘅名喺上面。我嘅名喺上面。」

「所以做得到嘅,就係——」

「附錄。你嗰份analysis喺附錄度。係在嘅。」

「人哋會睇附錄?」

阿文冇答。飲咗啖咖啡。

「你覺得我錯咗?」林昭明問。

「我覺得你冇錯。」阿文望住佢。「但冇錯同寫得出係兩件事。」

佢行咗。

林昭明企喺茶水間。窗外係低雲。好厚嘅嗰種。


嗰晚,林昭明返到屋企。

老婆喺廳。眼鏡戴住,睇緊嘢。見到佢入嚟,摘低。

「咁早?」

「開完會冇乜嘢做。」佢放低袋。坐喺佢隔離。

「食飯未?」

「未。你想食乜?」

「你揀。」

佢訂外賣。坐住。廳好靜。

「你最近做緊嘅嗰個嘢,」老婆話,「上次你話好複雜。搵到未?」

「出咗份report。」

「即係完咗?」

「唔係完。係出咗份文件。」

老婆轉過嚟望住佢。佢識佢。「你嘅version同份文件唔一樣?」

「唔一樣。但我嘅version冇辦法confirm。冇後台嘅log。」

靜咗一陣。

「咁你查咗咁耐——」

「我嘅analysis喺附錄度。」

老婆望住佢:「人哋會睇附錄?」

林昭明冇答。

兩秒。三秒。

老婆話:「你唔開心。」

「唔係唔開心。」佢諗咗一陣。「係奇怪。你搵人嚟一齊睇一件事。出嚟嘅嘢——唔係你以為會出嚟嘅嘢。但係佢哋唔係呃你。每個人做嘅嘢都係——」

佢停咗。

「你冇事就好。」老婆話。

外賣到咗。佢哋去食飯。飯桌上面傾嘅係另一件事。


夜晚。老婆瞓咗。

林昭明坐喺書房。燈暗暗嘅。窗外係海嘅方向。黑色嘅。

佢冇開電腦。

佢諗起第一個禮拜。阿文喺牆上面用指頭點咗兩個位。嗰兩個位正正係firmware版本切換嘅節點。佢睇到咗。佢真係睇到咗。

然後佢帶咗佩珊嚟。然後老廖嚟。然後佩珊將佢嘅breakdown搬到附錄。然後日期被改咗七日。然後阿文將每一個有指向性嘅詞換成冇指向性嘅詞。然後report出嚟——十六個factor並列,每一個都係「或影響」,冇一個係root cause。

係一個過程。由一到十六。

唔係有人坐低開咗個會話「嚟,我哋一齊掩蓋」。

係每一個人帶住佢哋嘅規則入嚟。邊啲字寫得。邊啲唔寫得。邊啲嘢放正文。邊啲放附錄。呢啲規則唔係為咗呢件事而存在。係一直都存在嘅。只係佢以前唔知道。

老廖講嘅——「佢哋帶住嘅唔淨止係專業。係規則。」

規則。

佢搵人嚟。搵嘅係眼。嚟嘅係眼,加規則。規則比眼大。所以出嚟嘅嘢,係規則能夠裝住嘅嘢。

佢嗰張地圖,規則裝唔住。

所以地圖去咗附錄B。

每一個人做咗佢哋能夠做嘅嘢。冇人騙佢。冇人指住佢嗰張地圖話係假嘅。只係每一個人做完佢哋能做嘅嘢之後,加起嚟,張地圖消失咗。

唔係被刪除。係被稀釋。喺十六個factor入面。喺「或影響」入面。喺「建議進一步測試」入面。喺附錄B入面。

地圖仲係存在嘅。附錄B入面有佢嘅名。有佢嘅analysis。有佢花咗一年做嘅嘢。

只係冇人會翻到附錄B。

而嗰封email——「系統功能精簡,良率提升」——呢個先係會留低嘅故事。日後有人翻返呢件事,翻出嚟嘅係report。Report話:綜合問題,多方面跟進,良率已改善。

冇一句話係錯嘅。

佢坐喺書房。窗外好靜。連浪聲都冇。

佢第一個禮拜以為嘅嘢——「至少有人見過嗰張地圖」——呢個係真嘅。有人見過。阿文見過。第一日,佢用手指點咗嗰兩個節點。佢見到嘅嘢同林昭明見到嘅一樣。

但見過之後,寫落嚟嘅,係另一件事。

佢帶入嚟嘅人,係做完佢哋嘅嘢之後出去嘅人。佢哋出去嘅時候,帶走咗佢嘅數據、佢嘅breakdown、佢嘅timeline,然後將呢啲嘢裝入一個佢唔認得嘅形狀。嗰個形狀叫做「正式報告」。

正式報告入面嘅每一個字都能defend。

只係defend嘅對象,唔係真相。係文件。

林昭明坐喺暗嘅書房,冇動。好耐好耐。


「最精密嘅掩蓋,係讓你自己把調查嘅人帶進來,然後讓嗰啲人,帶住佢哋嘅規則,將你嘅地圖翻譯成一份佢哋嘅語言能夠講到嘅文件。冇人騙你。冇人刪你嘅嘢。只係翻譯完之後,嗰張地圖,喺附錄B入面,等住一個永遠唔會翻到嗰頁嘅人。」