12 March 2026 / Product specification

Build the searchable specification before the application gets expensive

When requirements are spread across PDFs, email and meeting notes, every piece of implementation starts with rediscovering the product. I'd pull the source material into a searchable specification and keep each decision linked to the evidence behind it.

A designer drawing a building by hand at a desk.
Photo: Ryan Ancill (opens in a new tab)

When the requirements for a product are spread across PDFs, email threads and meeting notes, every piece of implementation starts with someone rediscovering what the product is supposed to do. I'd build an index of what the product should do, how the parts relate and where each statement came from, so a developer, reviewer or agent can answer a narrow question without reopening the whole project archive (it doesn't have to be one giant requirements file).

Start by collecting whatever is actually carrying product decisions at the moment: approved documents, change requests, diagrams, meeting records, data definitions and integration notes. Before pulling any requirements out, write down each source's title, date, owner, status and location. Status matters more than it looks, because a draft proposal and an approved change can say opposite things and search will happily return both. Mark superseded material and link it to whatever replaced it. And don't treat a lot of email as authority (a recent message might clarify one edge case without changing the agreed rule). If everyone talks about "the import rules" and nothing actually defines them, record that as a gap instead of writing a tidy requirement nobody agreed to.

Each requirement then needs a subject, a condition and an expected behaviour. "Managers can handle approvals" isn't enough to build from. Which manager role can approve which record, in which states, and what changes afterwards? Give it a stable identifier and attach the source links, status, affected roles, data and interfaces, plus a few acceptance examples where the boundaries matter. Unknowns go in as questions with an owner, like "Can a rejected submission be reopened by support?", which is far more useful as project state than a guessed answer buried in a ticket.

When the team settles an ambiguity or changes a rule, write a short decision record with the question, the decision, the date, the owner and the requirement identifiers it affects, link it back to the evidence and update the current requirement. Keep the previous version, because someone will later wonder why existing code behaves differently (especially with permissions, calculations and integrations). For search, keyword search is a fine place to start. Add semantic search if people keep asking the same thing in different words, but keep filters for status, role, component, date and source authority. If an AI assistant summarises several records, it should cite each material claim and show sources that conflict.

Then connect the work to it. A coding task should say which requirement it implements or changes, and pull requests and acceptance tests can carry the same identifiers. That gives the reviewer something concrete to compare against. It helps with agents too: give a coding agent the relevant requirements and sources instead of the whole archive, and ask it to report contradictions or missing decisions instead of picking whichever passage sounds most specific.

Requirements spread across PDFs, email threads and meeting notes are where this started. The searchable specification is there so each requirement and decision points back to the source that controls it, and each piece of work points at the requirement, instead of every task starting with someone rediscovering the product. I'd pick one workflow that's already expensive to rediscover, build its source inventory, write the current requirements, connect the open decisions and test five real implementation questions against search, things like which role can perform an action or what field gets sent to an integration. If a new developer can't follow those answers back to the sources, that's the gap I'd close before more of the application gets built on top of it.

Got a take on this?

Share it on X. I read the replies.

All blogs