What the model knows (before you say anything)
"Build me a REST API with OAuth2" — It already knows Express, FastAPI, Spring Boot, Gin, Rails. It already knows JWT, sessions, PKCE, SAML, API keys. It already knows PostgreSQL, MongoDB, Redis, DynamoDB.

What it doesn't know
Which framework YOUR project uses. Which auth pattern YOUR system needs. Which database YOUR team chose.

The Gap Is Decisions, Not Knowledge

# ❌ Wasted spec lines (the model already knows this)
"Pagination divides results into pages for performance.
Use LIMIT and OFFSET in SQL queries."

# ✓ What your spec actually needs to say
Paginate with cursor-based pagination.
25 items per page, sorted by created_at DESC.
Return next_cursor in response body.

The model has read more code than any human ever will. REST APIs, React apps, CI pipelines, Dockerfiles, Kubernetes manifests, auth flows, database schemas. All baked into the weights.

Your job isn't teaching it to code. Your job is making decisions.

What This Means for Specs

# ❌ Don't explain HOW (it knows)
"To create a WebSocket connection, use the ws library
and handle the 'connection' event..."

# ✓ Specify WHAT and WHICH (it doesn't know)
WebSocket server on /ws.
Authenticate via JWT in the first message.
Broadcast to room members only.
Heartbeat every 30s, disconnect after 3 missed.

More Examples: Skip vs Specify

# ❌ Skip: Explaining how REST works
"REST APIs use HTTP verbs. GET retrieves data, POST creates,
PUT updates, DELETE removes. They should be stateless..."

# ✓ Specify: Your API decisions
GET /users/:id returns user + recent activity (last 10 items).
POST /users requires email, password, name (all required).
Rate limit: 100 req/hour per IP.
Auth: Bearer token in Authorization header.
# ❌ Skip: Database tutorials
"To query a database, write a SQL SELECT statement.
Use WHERE clauses to filter results..."

# ✓ Specify: Your schema and queries
Users table: id, email, created_at, subscription_tier.
Query users by tier: SELECT * WHERE subscription_tier = ?
Index on (subscription_tier, created_at) for performance.
# ❌ Skip: Framework explanations
"React components use hooks like useState for state.
Call useState at the top level, not in conditionals..."

# ✓ Specify: Your component requirements
UserProfile component: show avatar, name, bio, join date.
Fetch from /api/users/:id on mount.
Show loading spinner while fetching.
Error state: "User not found" with retry button.

Every line of spec should be a decision, not a tutorial. If you're explaining how a technology works, delete that line. The model already knows.

Peter Naur argued in Programming as Theory Building that the real program lives in the programmer's mind, not the code. LLMs now carry that theory across every paradigm. What's missing is your specific intent.