前兩個專案,我都在處理資料。
把資料從一個地方拿出來、算一算、放到另一個地方。中間所有的東西都是文字和數字,程式看得懂。
第三個專案不是這樣。
公司的 ERP 有資料介面,所以我才做得出信用儀表板。客戶的額度、應收、逾期,我都抓得到。
但那是讀。
要寫進去是另一回事。建立一張單據、送出一筆資料,這些動作沒有開放的管道,官方給的路只有一條,打開那個系統,用滑鼠和鍵盤填。
我也不能改它的介面。那是外部廠商的套裝系統,欄位怎麼排、下拉選單怎麼開、按鈕在哪裡,都不是我能動的。
讀得到但寫不進去,我猜這是很多公司的實況。
資料的部分可以談、可以接、可以做儀表板。但只要是「要在系統裡完成一個動作」,就回到人工。
讓程式去做那個人會做的事,開視窗、點欄位、打字、按 Tab、選下拉。
這件事聽起來很笨,但在那個當下,它是唯一可行的。
我先拿自己每個月要填的一張單來試。那是一張代墊費用的請款單,表頭十幾個欄位,下面還要填三列分錄,每一列又有八九欄。
填一次大概十五分鐘,每個月都要填一次,內容幾乎一樣。
這種東西就是典型的候選,重複、規則清楚、而且錯了看得出來。
我以為難的部分是「讓程式找到那個欄位」。
結果完全不是。
我真正花掉時間的,是下面這些。
負號打不進去。 某一列的金額是負數。直接打減號加數字,系統會把減號吃掉,變成正數。把減號打在後面,整格變成零。最後可行的做法是,先雙擊把整格選起來,打完負數之後按一次 End,再按 Tab。那個 End 是關鍵,它的作用是先取消選取狀態,這樣離開欄位的時候才會把負號留住。
系統會自己幫我填一個錯的數字。 稅額那一欄,游標一離開它就自動帶出一個稅率算出來的值。但這張單的每一列都免稅,所以每一列都要手動把它改回零。不改也不會報錯,它就安安靜靜地留在那裡。
從最後一欄按 Tab 會多生一列。 填完一列的最後一格,手指的直覺是按 Tab 繼續,結果系統會當成我要新增,憑空多出一列空白。而多出來的空白列會讓總計對不起來。
最後一列的下拉打不開。 同一個下拉選單,在中間幾列點了就展開,在最後一列怎麼點都沒反應。後來發現只要旁邊先有一列空的,它就正常了。所以順序變成,先多開一列、把下拉設好、再回頭把那一列刪掉。
中文會貼成別的字。 備註欄要填中文,走剪貼簿貼進去,貼出來的常常是「登入」或「改單據」這種完全無關的詞。原因是那個系統自己會在某些時候把字串寫進剪貼簿,剛好蓋掉我要貼的東西。最後的做法是用打的,打完放大看一次,錯了就全選刪掉重打,第二次通常就對了。
備註旁邊就是另一個代號欄。 點錯一格,中文就會被填進代號欄位,然後跳出「代號不存在」。
我把它們列出來之後才看懂一件事。
這些全部都是真的規則,而且每一條都有人每個月在遵守,但沒有任何一個人說得出來。
會計填這張單的時候,不會在心裡想「我現在要按 End 才能留住負號」。他就是會這樣做,因為他打完之後看了一眼,發現負號不見了,於是手指自己換了一種打法,然後就記住了。
稅額那一欄也一樣。他不會想「系統會自動帶一個值」,他是看到那格冒出一個數字,覺得不對,就改掉。
人是看著畫面在反應,所以他不知道自己在遵守規則。
這跟前兩個專案完全不同。
前面那兩個,我要做的事是把別人已經訂好的規則找出來。逾期幾天要通知、額度怎麼算,這些都有人說得出口,就算說不清楚,至少知道它存在,知道該去問誰。
這一個沒有人可以問。規則不在文件裡,也不在誰的腦袋裡,它在系統預設中。
我後來的做法是,自己先把整張單慢慢填一次,而且邊填邊記。
不是記步驟,步驟很好記。我記的是每一個「咦」的瞬間 。
負號不見了,咦。稅額自己跑出來,咦。多了一列,咦。
每一個咦的後面都藏著一條規則,而那條規則之所以沒有被寫下來,正是因為它每次出現的時候,人都已經順手處理掉了。
填完一次,我手上多了一份清單。那份清單才是這個專案真正的規格書,它比任何一份 SOP 都長,因為 SOP 寫的是「要做什麼」,而我需要的是「哪裡會出錯,出錯的時候長什麼樣子」。
寫到這裡我想到 Day 17 的那個問題。那篇在講我訂了規則卻沒有人審。
這一篇剛好倒過來,這裡的規則早就存在,只是從來沒有被寫下來過。