Vague tickets cost time twice
A ticket titled "Invoice work" with acceptance criteria only the person who wrote them understands gets picked up, half-built, and bounced back for clarification. That round trip costs more time than writing it properly the first time would have.
What it does
- Sorts by type first. Story, task, bug, or spike — and splits anything covering more than one deliverable into separate tickets, explicitly.
- Outcome-first titles. Under 80 characters, no ticket-speak, states what must be true when done.
- Checkable acceptance criteria. Written so someone who hasn't read the original notes can verify them.
- Out-of-scope line, when needed. If the notes hint at more than the ticket covers, that boundary gets stated — it's what stops scope drift.
- Contradictions raised, not resolved silently. A conflict in the notes becomes an open question, never a guess.
Example
Made up for illustration, not a real backlog.
from Slack: "can we stop duplicate invoice numbers being uploaded? also someone said the upload should show a progress bar, not sure if that's the same ticket"
Split into 2 tickets — different
deliverables.
TICKET 1
Type: Story
Title: Reject duplicate invoice
numbers on upload
Acceptance criteria:
- [ ] Upload rejects a duplicate
invoice number with a clear
error message
Out of scope: upload progress
indicator (see Ticket 2)
How it works with Claude
A 10-minute one-time install into your Claude account.
Paste the rough notes, emails or messages.
Get dev-ready tickets back, plus a suggested sequence.
FAQs
What makes a ticket title good?
It states the outcome, not the activity: "Reject duplicate invoice numbers on upload" tells a developer what must be true when it's done, where "Invoice work" tells them nothing.
Why does every ticket need an out-of-scope line?
Because rough notes often hint at more than one ticket actually covers, and writing that boundary down explicitly is what prevents scope drifting into the ticket during development.