面對眾多需求方法,為什麼要選擇 User Story?本章探討 Story 的核心優勢以及潛在的局限性。

強調口頭溝通#

書面文字容易製造精確的假象。人們以為把需求寫下來就能消除歧義,但實際上書面文字充滿多義性。

Story 的目標不是鉅細靡遺地記錄功能需求,而是寫下幾句簡短的佔位句,提醒開發者和客戶之後需要進行的對話。

口頭對話的優勢:

  • 提供即時的回饋循環,減少誤解
  • 不會產生書面文件「虛假的精確感」
  • 促進相互理解,而非單方面的文件傳遞

人人都能理解#

IEEE 830 文件常包含過多的技術術語,讓使用者難以閱讀。Use Case 雖然比較好,但初次接觸的人仍需學習其格式(前置條件、延伸情境等)。

Story 因為簡短且以使用者價值為導向,任何人——業務人員和開發人員——都能輕鬆理解。

研究發現,人們對以「故事」形式組織的資訊有更好的記憶力,連未明確提到的行動都更容易回想起來。

大小恰到好處#

  • IEEE 830 的需求陳述:太小(數千條「系統應…」的陳述難以排定優先順序)
  • Use Case 和情境:太大(只有幾十個,排序意義不大)
  • User Story恰到好處——適合規劃、開發和測試

適合迭代開發#

Story 天生適合迭代開發:

  • 可以先寫出粗略的 Epic Story,之後再逐步拆分
  • 不需要在開始寫程式前就寫完所有 Story
  • 容易隨著專案的演進增刪和修改

鼓勵延遲細節#

Story 鼓勵團隊在適當的時機才深入細節:

  • 初期只需要高層級的 Story 來估算和規劃
  • 接近開發時才透過對話補充具體細節
  • 避免過早投入時間在可能被捨棄的功能上

支援機會主義開發#

Parnas 和 Clements 早在 1986 年就指出,軟體開發不可能完全自上而下,因為:

  • 使用者通常不完全知道自己要什麼
  • 許多細節要在開發過程中才會浮現
  • 即使所有細節都已知,人類也無法理解那麼多資訊
  • 人會犯錯

Story 承認這個現實,讓團隊能在高層級需求和低層級細節之間自由切換。

鼓勵參與式設計#

Story 讓使用者成為設計軟體行為的積極參與者,而非被動的需求提供者。這與經驗式設計(Empirical Design)形成對比——後者透過觀察使用者來設計,但使用者不直接參與。

累積默會知識#

面對面的對話促進團隊內默會知識(Tacit Knowledge)的累積。開發人員和客戶越常交談,彼此的理解就越深。

Story 的局限性#

Story 並非萬能,以下情境需要注意:

  • 大型專案:數以百計的 Story 可能難以管理其關聯性。可使用角色分類和保持高層級 Story 來緩解
  • 追溯性需求:如果組織要求從需求到測試的追溯性,Story 需要額外的文件補充
  • 大型團隊:面對面對話無法完全取代書面文件的規模化優勢