核心原則

「可決定」與「該先確認」的分界線是「使用者會看到嗎」。 純技術實作細節(用 grid 或 flex、用 ResizeObserver 或 setInterval)可以自決;但只要結果會在 UI 上出現(數字、順序、文字、配色),就要先給選項讓使用者點頭。


為什麼要分這條線

商業邏輯

執行者自決所有事 = 強迫使用者用「視覺驗收」做決定 — 看到結果才能說「這不對」、不對就要重做。

把「使用者會看到的決定」拉出來事先確認 = 在實作前讓使用者參與決策、避免實作後被退回。

但所有事都要確認 = 對話成本爆炸、使用者疲勞、效率低。

兩者的平衡點:只把使用者實際在乎的決定攤出來確認、技術細節不打擾


這次任務的實際情境

觀察

我自決後被肯定或否定的決定:

決定應該的處理實際處理
Filter sidebar breakpoint = 1400px該確認 — 使用者視窗大小不確定自決寫死
Filter 順序 type → tag該確認 — UX 偏好自決寫死、後被肯定
Scope-h 預設值 = 56px該確認 — 視覺差異明顯自決寫死、後被否定
Filter 寬度 400px使用者已給數值直接用
用 absolute 定位而非 grid純技術選擇自決、無需確認
用 ResizeObserver 而非 setInterval純技術選擇自決、無需確認

可以看出規則:使用者會看到的視覺結果(breakpoint 對應的 viewport 行為、順序對應的閱讀體驗、預設值對應的初始視覺)都該確認;底層工具選擇(grid / flex / absolute、ResizeObserver / setInterval)可以自決。

判讀

判斷標準是「這個決定會在 UI 上產生使用者能感知的差異嗎」:

維度該先確認可自決
Visible 數字breakpoint、預設尺寸、初始值內部 calculation 細節
順序filter 排序、選單排序DOM tree 排序(不影響視覺)
文字UI 標籤、訊息內部變數名
配色 / 視覺樣式使用者看得到不適用
技術選擇不適用grid / flex / observer 等

執行:自決前的兩問

每個決定執行前先問:

  1. 這個決定在 UI 上會產生使用者能感知的差異嗎?
  2. 是不是有多個合理選項、選不同會影響使用者體驗?

兩個都「是」 → 該確認。

兩個都「否」或只有一個「是」 → 可自決。


確認的格式:給選項而非開放問

較差的問法

「Breakpoint 應該設多少?」

開放問題、使用者要自己想出答案。

較好的問法

「Breakpoint 我預估三個選項:

  • 1280px:物理上能放下、但邊緣情境可能擠壓
  • 1400px:較安全、有 120px 餘裕
  • 1564px:完全不溢出 body padding、最保守

我會選 1400px 作為平衡。OK 嗎?或要其他?」

給選項 + 推薦 + 開放修改空間 — 使用者可以「OK」「換 1280」「再放寬到 1600」三種回應。對話成本低。


內在屬性比較:四種決策模式

模式對話成本重做風險適用情境
全部自決0純技術實作細節
全部確認0不適用、太煩
自決技術細節、確認 visible 決定一般情境
列選項 + 推薦讓使用者選最低涉及 UX 偏好的決定

優先「自決技術細節 + 列選項確認 visible 決定」 — 對話成本低、重做風險低。


「使用者會看到嗎」的測試

當不確定某個決定該確認還是自決時、用三個測試:

1. UI 變動測試

「不同選擇會在 UI 上看到差異嗎?」

結論
用 grid 還是 flex 排兩欄否(最終視覺一樣)自決
Breakpoint 1280 vs 1400是(不同 viewport 下行為不同)確認

2. UX 偏好測試

「選不同會讓使用者覺得體驗不同嗎?」

結論
Filter 順序 type 在前 vs tag 在前是(掃描成本不同)確認
用 ResizeObserver 還是 setInterval否(使用者感知不到差異)自決

3. 不可逆測試

「這個決定寫進 commit 後、之後改成本高嗎?」

結論
Section 名稱(content/report/)是(改動要 redirect、broken link)確認
內部 helper function 名稱否(rename 一行 grep)自決

三個測試任一個「是」 → 確認。


設計取捨:決定權分配的策略

四種做法、各自機會成本不同。這個專案選 A(visible 決定先確認 + 技術自決 + 給選項)當預設、其他做法在特定情境合理。

A:Visible 決定先確認、技術自決、確認時給選項(這個專案的預設)

  • 機制:使用者會看到的數字 / 順序 / 文字先列選項給使用者選;純技術實作(grid / flex / observer)自決
  • 選 A 的理由:對話成本低(只確認該確認的)+ 重做風險低(visible 決定使用者參與)
  • 適合:所有客製情境
  • 代價:執行者要主動分辨「visible vs 技術細節」、給選項時要先想出選項

B:全部自決

  • 機制:執行者自己決定所有事
  • 跟 A 的取捨:B 對話成本 0、A 適度;B 容易做到使用者不要的東西
  • B 才合理的情境:純內部工具、執行者就是使用者;或時間極緊、優先求動

C:全部確認

  • 機制:每個決定都先問
  • 跟 A 的取捨:C 重做風險 0、A 適度;C 對話成本爆炸、使用者疲勞
  • C 才合理的情境:完全不熟悉的領域、執行者沒有判斷能力(罕見、應透過學習脫離此狀態)

D:開放問題、不給選項

  • 機制:直接問「breakpoint 應該設多少」
  • 跟 A 的取捨:D 把分析負擔丟給使用者、A 執行者先做分析給選項
  • D 才合理的情境:使用者已經有明確答案、只需要傳達 — 否則 A 的「給選項 + 推薦」更有效率

判讀徵兆

訊號應該的行動
即將寫死一個 visible 數字(padding、margin、breakpoint)列選項確認、不要自決
即將決定一個 visible 順序(filter、選單)列選項確認
即將寫使用者會看到的文字(label、訊息)確認措辭
即將選擇技術實作(grid / flex / observer)自決
即將命名內部 helper / 變數自決

核心原則:能影響使用者體驗的決定屬於使用者、能影響執行者效率的決定屬於執行者。分清楚就不會把該確認的事自決、也不會把該自決的事拿去煩使用者。

第三輪指令類型現有五類:空間(#16)/ 相對位置(#17)/ 隔離(#18)/ 決定權(本卡 #21)/ 篩選(#58)。前四類缺幾何 / 邊界 / 拍板資訊、第 5 類缺操作層級資訊。