Obvious/Help Center

Spec Anti-Patterns and Constraint Language

Published May 22, 2026 · Last updated May 22, 2026 · 3 min read

Most failed Autobuild runs trace back to a spec problem, not a code problem. The agent writes exactly what you describe — which means how you write the spec determines what gets built. This article covers the five most common spec mistakes and the language conventions that help agents interpret your intent accurately.

Common Failure Modes

"Just build it" specs

What goes wrong: A one-line request forces the agent to make every decision—product, UX, and technical—during implementation.

What to do instead: Provide a product spec with the user problem, desired outcome, and success criteria.

Product specs that are feature lists

What goes wrong: A feature list tells the agent what to build, but not why or what success looks like. The agent builds faithfully but may not solve the underlying problem.

What to do instead: Lead with the outcome — an observable change in user behavior — then list features that serve it.

UX specs that describe instead of show

What goes wrong: Prose like "The notification panel should appear on the right side" is insufficient. Agents interpret literally, inventing missing details like edge states and error handling.

What to do instead: Build actual prototype components. A prototype artifact with real data, states, and edge cases serves as a spec.

Technical specs grounded in assumptions, not code

What goes wrong: Assumptions like "The WebSocket service probably lives in the API layer" lead to PRs targeting wrong files and CI failures.

What to do instead: Read the code. Name actual files, services, schemas, and routes. Cite evidence, not expectations.

Monolithic specs

What goes wrong: A single document mixing product intent, UX decisions, and technical architecture is hard to review and forces the agent to parse all three phases simultaneously.

What to do instead: Keep each phase in its own document. Separate files let specs evolve independently and let the agent load only relevant context.

Writing for the Agent

Autobuild agents read specs literally — they implement what's written, not what you intended. These conventions close the gap.

Use the constraint language spectrum

Your word choice binds the agent's behavior:

TierWordsHow the agent treats it
Hard constraintmust, must not, always, neverHard acceptance criterion; agent will not deviate.
Soft guidanceshould, prefer, ideallyTreated as guidance; agent may deviate if simpler.
Dangerouscould, consider, might, probablyTreated as optional; agent often skips entirely.

When something matters, use "must." When something is genuinely flexible, "should" is fine. Avoid "could" and "consider" for anything you actually care about.

Name things consistently

Call it a "notification" in the product spec, UX spec, and technical spec. Don't switch between "notification," "alert," "message," and "update."

Reference artifacts by ID

Use art_xyz, not "the notification panel design." The agent opens artifacts by ID directly.

State negative requirements explicitly

'Do not persist notifications to localStorage' is more useful than assuming the agent will avoid it. Agents optimize for the simplest solution.

Keep each phase in its own document

Three focused documents let the agent load only context relevant to the current phase. A single monolithic spec increases misinterpretation risk.

Was this helpful?