由誰撰寫 Story#

雖然任何人都可以撰寫 User Story,但主要的撰寫責任在客戶身上。開發人員可以幫助客戶撰寫,特別是在蒐集 Story 的工作坊中,但客戶必須確保 Story 反映了真正的業務需求。

開發人員不應獨自撰寫 Story。即使開發人員提出了好的想法,也應該與客戶討論並由客戶認可。Story 代表的是客戶需要什麼,而非開發人員想做什麼。

撰寫好 Story 的原則#

從目標出發,而非從解決方案出發#

Story 應描述使用者的目標,而非具體的介面或技術實作。例如:

  • 好的寫法:「A user can search for a job.」
  • 不好的寫法:「A user can enter a keyword in a text field and click the Search button.」

加入使用者角色#

指明哪一種使用者需要這個功能,讓團隊更清楚 Story 的背景:

  • A Job Seeker can post a resume.」
  • A Recruiter can search resumes.」

寫出商業價值#

在可能的情況下,加入「so that…」來說明這個 Story 帶來的商業價值:

  • 「A Recruiter can post a job, so that she can find candidates.」

Story 的粒度#

Story 的大小應該適合規劃和估算。過大或過小都會造成問題:

  • Epic(史詩級故事):太大而無法在一個迭代內完成,需要拆分
  • 適當大小:可以在幾天內完成,團隊容易估算
  • 太小:拆得太細反而增加管理負擔

拆分 Story 的技巧#

當一個 Story 太大時,可以用以下方式拆分:

  1. 依資料邊界拆分:例如把「搜尋工作」拆成依地點搜尋、依職位搜尋
  2. 依操作拆分:例如把 CRUD 操作拆成建立、讀取、修改、刪除
  3. 移除橫切關注點:例如先做沒有安全性檢查的版本,再加入權限控制

約束條件(Constraints)#

有些需求不適合寫成 Story,而是以約束條件的形式表達。例如:

  • 「The system must be written in Java.」
  • 「The application must work on IE and Firefox.」

約束條件通常寫在一張獨立的卡片上,標註為「Constraint」。它們限制了系統的整體設計,但不需要獨立估算。

使用者介面需求#

在 Story 中應盡量避免過早指定使用者介面的細節。介面設計應在接近開發時,透過與客戶的對話來決定。

過早在 Story 中加入 UI 細節會限制設計空間,導致團隊無法探索更好的介面方案。