Problem
“That's not what I asked for” is almost always a spec problem
If you've said “that's not what I asked for” more than once in the last six months, the problem probably isn't your engineering team — it's the gap between what your specs say and what they imply. Engineers aren't building the wrong thing to frustrate you. They're making the most technically straightforward interpretation of an ambiguous document, and that interpretation is almost never the same as the business intent you had in your head when you wrote it.
The ambiguity in a spec is usually invisible to the person who wrote it. When you write “users should be able to filter results,” you have a mental image of what that looks like. The engineer reading that sentence has a different mental image. Without the context you carry from product meetings, customer calls, and competitive research, the engineer is making decisions from a much smaller information set. Every decision they make without guidance from the spec is a place where what gets built might not match what you intended.
The cost of spec ambiguity compounds over the build cycle. When an engineer makes an assumption in week one that turns out to be wrong, every subsequent piece of work that touched that assumption also has to be revisited. By the time you see the build in a review, you're looking at a structure built on a misunderstood foundation — and the rework required isn't just changing the surface, it's unwinding decisions that were logically correct given the wrong assumption. The cheapest time to catch spec gaps is before a line of code is written.
Requirements
What you need to understand first
A specification describes what to build. A brief describes the problem to solve and the outcome to achieve. Most founder-written specs are hybrids that do neither fully: they prescribe a specific solution without explaining the underlying problem, and they describe the happy path without addressing edge cases. The result is an engineer who knows what buttons to build but not why they exist, and who has no guidance when users do something the spec didn't anticipate.
Engineers fill spec gaps by making the simplest technically correct interpretation. This is rational and professional behavior — it's not the engineer's job to invent business logic that isn't specified. When you leave a gap, you get the minimal viable interpretation of that gap. That's often not what you wanted, but it's what the spec asked for. Understanding this behavior changes how you approach spec gaps: every ambiguity in your spec is a delegation of a business decision to someone who doesn't have the business context to make it well.
Process
The four questions every spec must answer before build starts
A good spec answers four questions before any code is written. What problem does this solve for the user — in their words, not the product framing? What does success look like in measurable terms, so the engineer knows when it's actually done? What are the edge cases, and how should each one be handled explicitly? And what is explicitly out of scope? The last question is as important as the first three. Engineers often build more than you asked for because the scope boundary was unclear — which sounds good until you realize that “more than asked for” means untested features, additional surface area to maintain, and a build cycle longer than estimated.
Edge cases are where most spec rework originates. “What happens if the user doesn't complete the flow?” “What if the API call fails?” “What does the user see if there's no data to display?” If your spec doesn't answer these, an engineer will answer them — usually with a sensible default that might not match your product intent. A user-facing error message written by an engineer is rarely the error message your brand voice would produce. An empty state that defaults to a blank screen is technically correct but probably not what you wanted.
The most useful habit for improving spec quality is reading your spec as if you've never seen the product before. Anywhere you find yourself thinking “well, obviously it should do X,” write down X. The things that feel obvious to you are the things that will be built wrong, because what's obvious to someone who's been living with the product for months is not obvious to someone reading a document.
Structure
The spec gaps that cause 80% of the rework
Missing edge case handling is the most common gap. Every feature has states the user can reach that aren't the intended path: partial form completion, session expiry mid-flow, network errors, empty data sets, and invalid inputs. Each of these needs an explicit answer in your spec. “Handle gracefully” is not an answer. Absent error states are the second most common gap: when something fails, what does the user see, what do they do next, and who gets notified? Performance requirements are the third: if you haven't specified that a page should load in under two seconds, you'll get a page that loads in whatever time makes the code clean.
The most underused spec element is the negative requirement: what should this explicitly not do? Without a negative requirement, scope expands in whatever direction is technically convenient. A negative requirement sounds like: “This version does not support bulk operations,” or “The notification should not be dismissible.” Negative requirements prevent the build from accumulating capabilities you didn't ask for, didn't test, and now have to support. A minimal-viable spec that covers the four core questions, names the most likely edge cases, specifies error states, and includes two or three negative requirements will eliminate most of the surprises that make product reviews frustrating.
Learn this properly, not just for one decision
In-depth courses and books that teach you to think like an engineer — not a one-off answer you'll need to look up again next time.
Frequently asked questions
How detailed should a product spec be?
Detailed enough that an engineer you've never worked with before could build it without asking you a single clarifying question. That's a high bar, but it's the right mental model. In practice, for features with meaningful complexity, that means two to four pages covering the user problem, success criteria, edge cases and their handling, error states, explicit out-of-scope items, and any performance requirements. One-paragraph specs work only for genuinely simple, low-stakes work where the right answer is obvious from context.
Should product specs be written by the founder, a PM, or the engineering team?
The initial draft should come from whoever owns the product decision — founder or PM. But the spec isn't done until the engineering lead has read it and confirmed that every decision a developer would encounter while building is either answered in the spec or explicitly deferred. The spec is a collaboration document, not a handoff document. The most useful thing an engineer can do when reviewing a spec is mark every assumption they'd make if the spec didn't tell them what to do — those marks are your gaps.