反模式:假設使用者只走 happy path
假設使用者只走 happy path 是指 UI 設計只覆蓋「一切順利」的情境 — 連線成功後打字、配對成功後連線、操作完成後返回 — 而忽略使用者在非順利情境下的需求。非順利情境包括:等待中想取消、失敗後想換方向、成功後想離開、中途想做其他事。
隱性假設如何產生
開發者設計 connected 狀態時,注意力在「終端機介面的功能」— 打字、特殊鍵、滾動。「使用者可能想離開 connected 狀態回到首頁」這個需求在 happy path 中不存在 — 如果一切順利,使用者為什麼要離開?
這個推論在使用者行為和開發者假設吻合時成立。但使用者可能想:
- 切換到配對畫面重新配對另一台裝置
- 暫時離開終端機處理其他事
- 遇到回應異常想從頭重新連線
- 覺得功能不符需求想回到首頁看其他選項
app_tunnel 的 Terminal 畫面五個狀態都沒有退出路徑。connected 狀態有打字和特殊鍵操作,但沒有「離開」操作;error 和 disconnected 有重連按鈕,但沒有「放棄重連、回首頁」的選項。開發者設計 error 狀態時的隱性假設是「使用者遇到錯誤會想重試」— 沒考慮「使用者可能想放棄」(U.C1)。
Happy path 偏差的擴散
Happy path 偏差不只發生在單一畫面。首頁只放 Connect Terminal 按鈕、沒放配對入口,是首頁層級的 happy path 偏差 — 假設使用者已經完成配對、只需要連線(U.C4)。
操作盤點的「前端引導」只描述顯示不描述操作和退出,是設計流程層級的 happy path 偏差 — 關注「順利時使用者看到什麼」,忽略「不順利時使用者能做什麼」。
從企劃到設計到實作,每一層的 happy path 偏差累積起來,最終產出的 app 在正常情境下運作良好,在任何偏離的情境下使用者都被困住。
用狀態矩陣防止
畫面狀態矩陣的四欄結構(顯示 / 可用操作 / 進入條件 / 退出路徑)強制設計者回答每個狀態的操作和退出問題。不需要預測使用者的所有行為,只需要機械式地對每個狀態填寫四欄 — 空白格自動暴露缺口。
具體的檢查規則:
退出路徑欄為空:需要補退出路徑。即使是 connecting 這種過渡狀態,使用者也應該能取消。
可用操作欄只有一個選項:使用者在這個狀態下只有一條路。如果這條路走不通(重連失敗),使用者被困住。至少考慮加一條替代路徑(返回、取消)。
進入條件是不可逆的:使用者無法自行觸發進入條件的反向操作(例如「連線成功」的反向操作「斷開連線」不存在)。這代表使用者進入後無法主動退出,只能等系統狀態變化。
狀態矩陣的價值在於機械式的完整性檢查。填完所有狀態的四欄是一個 10 分鐘的工作(以 5 個狀態的畫面為例),產出是一張可以直接轉為 test case 的表格,同時能在實作前發現所有退出路徑缺口。
矩陣的四欄定義和填寫步驟在畫面狀態矩陣的定義與填寫方法中完整展開。如果畫面設計從 BDD 操作盤點出發,從 BDD 操作盤點展開到狀態矩陣提供五步驟的展開流程。填完的矩陣可以直接轉成 widget test case — 具體方法見 testing 模組四 UI 自動化。
#ux-design #anti-pattern #happy-path #state-machine #navigation