第八章〈幫手〉
港版 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入面,等住一個永遠唔會翻到嗰頁嘅人。」