INVEST 原則#

Bill Wake 提出了好 Story 的六個準則,縮寫為 INVEST

  • Independent(獨立的)
  • Negotiable(可協商的)
  • Valuable(有價值的)
  • Estimable(可估算的)
  • Small(大小適中的)
  • Testable(可測試的)

Independent:獨立的#

Story 之間應盡量避免相互依賴。依賴關係會讓排定優先順序和迭代規劃變得困難,因為一個 Story 的排程會牽動另一個。

當兩個 Story 有依賴關係時,嘗試:(1)將它們合併為一個 Story;或(2)用不同的方式拆分,使依賴消失。

Negotiable:可協商的#

Story 不是合約,而是對話的邀請。Story 卡片上的文字只是提醒,細節應在開發前透過對話來確定。

如果 Story 被當成不可更改的需求規格書,就失去了敏捷的核心精神——擁抱變化。

Valuable:有價值的#

每個 Story 都必須對客戶或使用者有明確的價值。以下是常見的錯誤:

  • 「建立資料庫連線池」——這是技術任務,不是 Story
  • 「撰寫 API 文件」——對使用者沒有直接價值

Story 應該穿越系統的所有層級(就像一塊「蛋糕切片」),而非只處理某一層(如只做資料庫或只做 UI)。這樣每個 Story 完成後都能為使用者帶來實際可用的功能。

Estimable:可估算的#

開發人員必須能夠估算 Story 的大小。無法估算通常代表:

  • 對領域不了解:需要進行探索性工作(Spike)
  • Story 太大:需要拆分
  • Story 太模糊:需要與客戶進一步討論

Small:大小適中的#

Story 不應太大也不應太小:

  • 太大(Epic):難以估算,無法在一個迭代內完成
  • 太小:不值得單獨追蹤和管理,容易被忽略

一般而言,一個迭代內應安排 5-15 個 Story。若 Story 過大,按照前面介紹的技巧拆分。

Testable:可測試的#

Story 必須能夠被驗證。如果寫不出驗收測試,表示 Story 描述不夠具體。

  • 不可測試:「使用者覺得軟體好用」
  • 可測試:「使用者可以在 30 秒內完成搜尋和下單」

非功能性需求(如「系統必須很快」)也需要轉化為可測試的約束條件(如「80% 的搜尋回應時間 < 2 秒」)。