open-weight/skills/writing-tickets/SKILL.md
Use when writing, reviewing, or improving software tickets, user stories, or issue descriptions that need clear requirements, acceptance criteria, and scope boundaries.
npx skillsauth add jon23d/skillz writing-ticketsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
A good ticket communicates who needs what and why, defines "done" precisely so any developer can pick it up cold, and explicitly states what is out of scope to prevent assumption-driven expansion.
Format: As a [persona], when I [context/trigger], I want to [action] so that [benefit].
admin, new customer, mobile user on a slow connection.Bad: As a user, I want a button so that things work. Good: As a checkout customer, when I've filled out my cart, I want to apply a discount code so that I pay the promotional price without contacting support.
Use Given / When / Then for each criterion:
Rules:
Every ticket must include an explicit Out of Scope section. This prevents reviewers, developers, and stakeholders from assuming adjacent work is included.
A ticket should be completable within a single sprint. If writing the acceptance criteria reveals more than ~6 criteria covering very different concerns, split the ticket. Link the child tickets to a parent epic or story.
Vague persona — "As a user…" gives no context about permissions, goals, or constraints. Name the role.
Missing benefit — Dropping "so that…" removes the business justification. If the benefit is obvious, write it anyway — it prevents gold-plating.
Untestable criteria — "The UI should be intuitive" cannot be checked off. Rewrite as observable behavior.
No Out of Scope section — Without it, developers fill gaps with assumptions. Gaps become scope creep.
One giant ticket — If a ticket takes more than one sprint, it's an epic. Break it down.
Implementation detail in disguise — Acceptance criteria that mention database fields, API endpoints, component names, or architectural choices are implementation specs, not behavioural specs. If a criterion could only be written by someone who has already designed the solution, rewrite it from the user's point of view. The test: could a QA engineer verify this criterion without reading the code? If not, reframe it as observable behaviour.
Title: Apply discount code at checkout
User Story: As a checkout customer, when I have items in my cart and am on the payment step, I want to enter a discount code so that the discount is applied to my total before I complete my purchase.
Acceptance Criteria:
Out of Scope:
development
Use when adding or modifying environment variable handling in TypeScript projects or monorepos — especially when using process.env directly, missing startup validation, sharing env schemas across packages, or encountering "undefined is not a string" errors at runtime from missing env vars.
testing
Use when creating a new skill, editing an existing skill, writing a SKILL.md, or verifying a skill works before deployment.
development
React UI design principles and conventions. Load when building or modifying any user interface or React components. Covers application type detection, visual standards, component design and structure, Mantine (business apps) and Tailwind (consumer apps), accessibility, responsiveness, state management, data fetching, testing, and in-app help patterns.
development
Use when setting up ESLint and/or Prettier in a TypeScript project, adding linting to an existing TypeScript codebase, or configuring typescript-eslint, eslint-config-prettier, or related packages.