## 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]]