把流程丟進背景 job 之後,系統表面上會變快,但如果沒有狀態設計,實際上只是把不確定性往後丟。
我現在幾乎把狀態當成背景工作的基本配件,而不是可有可無的附加功能。至少要回答三件事:
至少要回答三件事
- 現在跑到哪一步
- 如果失敗,是哪個階段失敗
- 使用者下一步該等、該重試,還是該聯絡人
pending / success / failed 不夠用
很多系統只留 pending / success / failed 三種狀態。這種做法在 demo 階段夠用,但一旦流程稍微複雜,例如資料匯入、影片轉檔、寄送批次通知,就會很快失去資訊。
比較好的方式是把流程拆成可以對外描述的狀態,例如:
uploadedvalidatingprocessingfinishedfailed_validationfailed_processing
狀態是共同語言
這不只是為了 UI 好看,而是為了讓工程師、客服與使用者看到同一套語言。當每個人都能說出同一個流程狀態,問題排查會快很多。
狀態命名最重要的不是完整,而是可用。不要把內部技術細節全暴露出來,但要讓人知道「現在正在發生什麼」。