Skip to content
PKResources
Course outline

Agentic Engineering: the hands-on course · Module 3: Planning & task design

Writing task briefs with acceptance criteria

A brief is a contract. Learn the six parts of a brief that works, and how to write acceptance criteria the agent can check on its own.

Lesson 10 / 24 · ⏱ 8 min

In Module 1 you wrote a four-part brief: goal, context, a “done when” check, and a “don’t” line. That works for small tasks. For anything bigger, the part that makes or breaks the result is the “done when”, and it deserves more care.

A brief is a contract. The acceptance criteria are the clauses you can actually enforce.

Anatomy of a brief

1 · Goalwhat and why, one sentence2 · Contextfiles, examples, docs3 · Constraintspatterns, limits, no new deps4 · Acceptance criteriaobservable · checkable · ideally a command5 · Out of scopewhat not to touch6 · Report backwhat to tell you at the end
Six parts. The acceptance criteria are the heaviest block: they tell the agent when to stop, and tell you what to check.

Not every brief needs all six at full length. A small task can have one line per part. But when a result disappoints me, I can almost always trace it to a missing part, usually 4 or 5.

What makes a criterion checkable

A good acceptance criterion is something either you or the agent can verify without asking anyone. The best ones are a command with an expected result. The next best are observable behavior. The worst are adjectives.

✕ Vague

  • –The export works well
  • –Code is clean
  • –Handles edge cases
  • –Fast enough

✓ Checkable

  • +GET /reports/export?format=csv returns a CSV with a header row and one line per order
  • +The linter and type checker pass with no new warnings
  • +An empty date range returns a header-only file, and a range over 366 days returns a 400
  • +Export of 10,000 orders completes in under 2 seconds in the existing perf test

Notice the right column names the edge cases instead of hoping the agent guesses them. Writing them down is also how I find out I hadn’t decided what should happen.

A full brief

Goal
Add CSV export to the orders report so finance can stop copy-pasting
from the screen.

Context
- Report endpoint: src/api/reports/orders.ts
- Follow the existing PDF export in src/api/reports/pdf.ts for structure
- CSV helper already exists: src/lib/csv.ts

Constraints
- No new dependencies
- Reuse the report's existing query; don't write a new one

Acceptance criteria
- GET /reports/orders/export?format=csv returns text/csv
- Header row matches the columns shown on screen, same order
- Empty range → header-only file; range > 366 days → 400 with a message
- New tests cover these three cases; full test suite passes
- Linter and type checker pass

Out of scope
- The UI button (separate task)
- Changing the PDF export

Report back
- Files changed, and any decision you made that isn't in this brief

Check yourself

🧠 Briefs and acceptance criteria

Score: 0 / 4

  1. 1. Which acceptance criterion is the most checkable?

  2. 2. Why include an “out of scope” section?

  3. 3. You can’t write a checkable criterion for a task. What does that usually mean?

  4. 4. What’s the point of asking the agent to report decisions that weren’t in the brief?

Before you move on

✅ Key takeaways

0 / 4 completed