昨天講的派工分數,最早的版本是一份唯讀快照——固定時間把資料表抓一次、算一次分數,存起來給大家看。問題很快就出現:快照是上禮拜三的,這幾天案子進進出出,實際負載早就變了,分數卻還停在上禮拜,派工照著一份過時的分數在派,跟沒有這套系統比起來,只是多了一層「看起來很準」的假象。
要解決這件事,表面上只是「改成即時讀資料」,做下去才發現卡在一個技術限制:瀏覽器沒辦法直接打資料表服務的網址去抓資料,會被瀏覽器自己的安全機制擋下來;把資料表直接發布成公開頁面讀取又等於把客人資料整個公開,兩條路都走不通。最後能走的架構是中間多一層:寫一支程式常駐在雲端,由它去讀資料表、整理好再回傳給瀏覽器,瀏覽器不直接碰資料表本身。繞了一圈,但資料終於是即時的了。
這套東西原本只有主管自己在用,後來同事也想用,而且提出一個需求:希望自己能調整忙碌燈號、請假狀態、派工規則,不用每次都等人改程式。這部分另外開了一張設定用的表,同事自己填寫,程式只負責讀跟存這張表——原本那份客戶資料表,從頭到尾維持只讀,這條線沒有鬆動。
開放同事自己改規則之後,踩到一個最難抓的坑:資料表那邊的某個欄位選項改版過,新填的資料用新的標籤,但程式裡寫的規則比對的還是舊標籤,兩邊對不上,規則直接變成零命中——而且不會跳出任何錯誤,畫面照常顯示,只是這條規則從此形同虛設,沒有人會發現。
後來加了一塊診斷用的面板:規則清單旁邊多一欄「命中筆數」,零筆的直接標成警示色;另外做了一個小工具,輸入比對值就能立刻看到目前命中幾筆、是哪些客人,寫規則的人可以先在這裡試打一次,確定真的有命中才存檔。跟系列前面講過的同一句話呼應:安靜地失敗,比大聲地壞掉危險得多,這塊面板就是把原本看不見的死規則,逼它們自己跳出來講話。
這套工具從一個人用的唯讀快照,走到現在,每一步想解決的問題都不一樣:先是資料不夠新,再來是改規則要等人,最後是規則壞了沒人知道。沒有一步是一開始就設計好的,都是用了之後才發現下一個卡點在哪裡——如果你也打算做類似的內部工具,不用想著一次做完,先讓它能用,再讓它陪著真正的使用情況一起長。