背景工作流程,最好都有看得見的狀態

只要一個流程改成背景執行,就該順手設計狀態,而不是只留下成功或失敗。

把流程丟進背景 job 之後,系統表面上會變快,但如果沒有狀態設計,實際上只是把不確定性往後丟。

我現在幾乎把狀態當成背景工作的基本配件,而不是可有可無的附加功能。至少要回答三件事:

至少要回答三件事

  • 現在跑到哪一步
  • 如果失敗,是哪個階段失敗
  • 使用者下一步該等、該重試,還是該聯絡人

pending / success / failed 不夠用

很多系統只留 pending / success / failed 三種狀態。這種做法在 demo 階段夠用,但一旦流程稍微複雜,例如資料匯入、影片轉檔、寄送批次通知,就會很快失去資訊。

比較好的方式是把流程拆成可以對外描述的狀態,例如:

  • uploaded
  • validating
  • processing
  • finished
  • failed_validation
  • failed_processing

狀態是共同語言

這不只是為了 UI 好看,而是為了讓工程師、客服與使用者看到同一套語言。當每個人都能說出同一個流程狀態,問題排查會快很多。

狀態命名最重要的不是完整,而是可用。不要把內部技術細節全暴露出來,但要讓人知道「現在正在發生什麼」。