## Definition A **Software Requirements Specification (SRS)** captures the "deep specifics of what the software needs to do" — the detailed, often technical statement of required behaviour. Tom Taulli draws this distinction in [[AI-Assisted Programming - Tom Taulli]], setting it against the PRD. ## SRS versus PRD The two documents answer different questions at different altitudes: | Document | Answers | Altitude | Audience | |---|---|---|---| | PRD | "What will the software *be and do*?" | Story / product level | Stakeholders, product | | SRS | "What *exactly* must it do?" | Behaviour / detail level | Engineers, QA | The PRD frames the product in language a stakeholder reads — features, users, value. The SRS sits beneath it, translating each product intention into precise, testable requirements. Confusing the two is a classic failure: a PRD written with SRS-level detail drowns stakeholders; an SRS written at PRD altitude leaves engineers guessing. ## The executable-spec reframe In [[Spec-Driven Development]] this two-layer structure reappears, made machine-readable. An executable spec is essentially an SRS expressed as runnable artifacts — a stack of [[Executable Acceptance Criterion]] — sitting beneath a still human-readable PRD. ``` PRD (human-readable intent) └── SRS (precise behaviour) └── executable acceptance criteria (machine-checkable) ``` The agent reads the lower layers as its contract; the humans negotiate the upper layer as their goal. The genius of SDD is collapsing the historical gap where the SRS was written, signed, and then quietly ignored — because now the SRS *runs*, so it cannot be ignored. ## Why detail level matters for agents An agent will fill any ambiguity with a plausible guess. A vague PRD line ("handle errors gracefully") gives it freedom to invent; an SRS-level criterion ("on a 429, retry up to 3 times with backoff, then surface the error") removes the guess. The SRS is where you spend specification effort precisely because it is where the agent would otherwise improvise. ## Deriving the SRS The SRS is not transcribed from the requester — it is *derived*, which connects to [[Deriving Scope from Goals]]. You move from goal (PRD) to precise behaviour (SRS) deliberately, not by writing down whatever solution the requester first proposed. ## Related - [[Spec-Driven Development]] - [[Executable Acceptance Criterion]] - [[Deriving Scope from Goals]] - [[AI-Assisted Programming - Tom Taulli]]