Piling more detail into a prompt feels like the safe move, but past a certain point it makes output worse, not better. The reason is mechanical: extreme detail switches an AI from reasoning about a problem to transcribing your first draft of the answer, blind spots included.
The Details:
Code quality lives in small judgment calls: is this the right abstraction, does this edge case matter, is there a simpler design underneath. A spec that names exact data structures, exact function names, and step-by-step logic answers those questions for the AI before it ever considers them, so it just builds what was described instead of what was needed.
A useful instruction describes outcome and constraint: cache these responses, latency beats freshness, a minute of staleness is fine. A harmful one prescribes mechanism: this eviction policy, this exact TTL, this specific wrapper class. The mechanism version can't be questioned even when the underlying assumption, like whether caching was the right fix at all, is wrong.
Two signals reveal overreach. First, if a clarifying question makes you say "just follow the spec," thinking has already been replaced by instruction. Second, if a junior engineer could implement it without understanding the system, you wrote mechanism instead of intent, and cut yourself out of the moments where real decisions get made.
The fix is subtraction, not addition. Strip out anything describing how, not what, then hand over only the two or three conditions that would make you reject the result, letting the model ask the rest. The questions that come back usually expose gaps in your own thinking, not the model's, and that pause is where real bugs get caught before they're ever written.
Bottom Line: Uncertainty left visible in a spec is not a risk to eliminate. It is the mechanism that catches mistakes before they ship.
Enjoy this article?
Listen to the Claude Code Conversations radio show or join the community.