Docs/Requirements Philosophy

Requirements Philosophy

Why Formal Requirements

Requirements are the contract between what the user needs and what the code does. Without explicit requirements, developers guess, testers don't know what to verify, and reviewers can't assess completeness.

Principles

Behavior, Not Implementation

Requirements describe WHAT the system should do, not HOW. "Given a user with expired credentials, should prompt for re-authentication" — not "Given an expired JWT, should redirect to /login".

Jobs, Not UI

Focus on the job the user wants to accomplish and the benefit they expect — not on specific UI elements or interactions. The UI is an implementation detail that may change; the job persists.

Testable by Definition

Every requirement in "Given X, should Y" format is inherently testable. The "given" is the setup, the "should" is the assertion. If you can't test it, it's not a requirement — it's a wish.

Linked to Pain

Every requirement traces back to a user story, which traces back to a pain point. If a requirement doesn't reduce pain, question whether it's needed.