Professional Agentic Product Engineering

Tier 1

Tier 1 — Professional Prompting: Write prompts the agent can act on, to get the right result the first time

Reach for this tier when the agent keeps doing almost the right thing — vague asks get literal, wrong results. The single request is your cheapest lever: say what you want so it can't guess wrong.

1. Hand over the outcome, not a file list.

Instead of: "Create these 15 files for auth."

Prefer: "Implement JWT auth following the architecture in @src/auth. No new libraries."

2. Be specific — vagueness is now taken literally.

Instead of: "Clean up the auth code."

Prefer: "Extract token refresh in @src/auth/session.ts into the existing RetryPolicy class."

3. Say what to do, not what to avoid.

Instead of: "Don't be verbose."

Prefer: "Write for senior engineers — lead with the technical specifics."

4. Give the reason; motivation makes it generalize.

Instead of: "Use tabs."

Prefer: "Use tabs — our linter rejects spaces in this repo."

5. Specify the output shape, not just the goal.

Instead of: "Build an auth API."

Prefer: "POST /login and /refresh, Zod validation, a consistent {error, code} envelope."

6. Show examples instead of describing style.

Instead of: "Make the tone professional."

Prefer: "Match these 3 examples: <example>…</example>" (3–5 work best).

7. Follow the house style, don't invent one.

Instead of: "Write a date parser."

Prefer: "Parse dates using the pattern already in @utils/date.ts."

8. Show, don't tell — use the input channels.

Instead of: describing a layout bug in prose.

Prefer: paste the screenshot + @Component.tsx; pipe the raw logs straight in.

9. Invite uncertainty instead of forcing an answer.

Instead of: "Implement the caching layer."

Prefer: "Implement caching. List your assumptions first; if a choice is genuinely ambiguous, stop and ask."

10. Paste raw errors, don't paraphrase them.

Instead of: "It throws some null error."

Prefer: paste the full stack trace → "diagnose the root cause before changing anything."

11. Constrain scope — over-engineering is a frontier-model failure mode.

Instead of: "Fix this bug and improve the code."

Prefer: "Fix only this bug. Don't refactor, comment untouched code, or add handling for cases that can't occur."

12. Narrow the edit surface — a small diff is a reviewable diff.

Instead of: "Refactor authentication."

Prefer: "Change only the middleware layer in @src/mw/auth.ts."

13. Dial effort; don't beg for thoroughness.

Instead of: "Think really hard and be exhaustive."

Prefer: leave it at high (the 4.8 default); add ultrathink for one gnarly turn; /effort ultracode for big async jobs.

14. Front-load turn 1 instead of hand-holding across many.

Instead of: a vague opener followed by ten corrections.

Prefer: one rich brief — goal + constraints + definition of done + "work autonomously; stop only at a real fork."