Ticket Writer
Pick the right ticket type, then fill in only the fields that type demands. A story is not a bug; an epic is not an initiative. Each type has a distinct audience, scope, and definition of done - mixing them produces vague, unactionable tickets that bloat backlogs.
Core Principles
| Principle |
Meaning |
| Type drives structure |
The type decides the required fields - never use a single template for everything |
| Outcomes over outputs |
Describe the change the work creates, not the activity performed |
| Small enough to finish |
Stories and subtasks fit a sprint; epics fit a quarter; initiatives span multiple quarters |
| Testable acceptance |
Every story, subtask, and bug has acceptance criteria that a reviewer can verify |
| Context, not prose |
Prefer tables, lists, and labelled sections over paragraphs - readers skim |
| One ask per ticket |
If a ticket has two unrelated goals, split it |
Type Hierarchy and Selection
Tickets form a hierarchy. Pick the highest level where the work still has a single, coherent purpose.
Initiative (multi-quarter strategic outcome)
Epic (quarter-scale goal, one product area)
Story (sprint-scale user-visible value)
Subtask (implementation slice of a story)
Bug (defect against current behaviour)
Issue (anything else - chore, spike, question)
When to Use Each Type
| Type |
Audience |
Scope |
Typical Duration |
Key Question |
| Initiative |
Execs, product leadership |
Cross-team strategic goal |
1-4 quarters |
What outcome do we want for the business or users? |
| Epic |
Product, engineering, design |
Single product area, multiple stories |
1 quarter |
What capability or experience are we delivering? |
| Story |
Dev team, QA, PM |
One user-facing change |
Fits in a sprint |
As a [user], what can I now do? |
| Subtask |
One developer |
Technical slice of a story |
Hours to 1-2 days |
What specific implementation step does this cover? |
| Bug |
Dev team, QA |
A deviation from intended behaviour |
Fix-sized |
What is broken, and how do I reproduce it? |
| Issue |
Dev team |
Chore, spike, question, tech debt, docs |
Variable |
What needs attention that isn't user-facing work? |
Type Decision Tree
- Is this a deviation from intended behaviour? -> Bug
- Is this a strategic goal spanning multiple teams or quarters? -> Initiative
- Is this a large body of work that needs to be broken down but belongs to one product area? -> Epic
- Is this user-visible value that fits in a sprint? -> Story
- Is this an implementation slice of an existing story? -> Subtask
- None of the above (chore, spike, investigation, tech debt, question)? -> Issue
Workflow
Phase 1: Type Selection
If the user provided a type as an argument, use it. Otherwise present a selectable menu (use AskUserQuestion or the platform's equivalent interactive prompt) listing the six types with their one-line descriptions from the table above. Never dump the full table as plain text - keep the menu compact.
If the user's intent is clear from context (e.g., they said "write a bug report" or "create an epic for checkout redesign"), skip the menu and confirm the inferred type with a single yes/no prompt.
Phase 2: Load the Type-Specific Reference
Read the matching reference file for the selected type:
| Type |
Reference |
| Story |
references/story.md |
| Subtask |
references/subtask.md |
| Issue |
references/issue.md |
| Bug |
references/bug.md |
| Epic |
references/epic.md |
| Initiative |
references/initiative.md |
Each reference contains:
- The required fields
- The optional fields
- A field-by-field questionnaire (questions, options, follow-ups)
- The output template
- Quality checks specific to that type
Phase 3: Run the Questionnaire
Ask only the questions the reference lists for the selected type. Follow these rules:
- Batch compatible questions (3-4 per prompt) when using an interactive menu tool. Use free-text prompts only when the answer is genuinely free-form (title, description, reproduction steps).
- Skip optional fields silently if the user says "skip" or leaves them blank - do not add empty placeholders.
- Follow-up on ambiguous answers - if the user says "it's slow", ask "slow compared to what, and by how much?"
- Never invent facts. If the user cannot provide environment info, reproduction steps, or metrics, leave those fields out and note the gap in a
## Open Questions section rather than fabricating values.
Phase 4: Assemble the Ticket
Use the type's output template. Apply these universal formatting rules:
- Title: Imperative mood for stories/subtasks/issues ("Add password reset via email"), descriptive for bugs ("Payment confirmation email not sent after successful charge"), outcome-oriented for epics/initiatives ("Reduce checkout abandonment by 30%").
- Body: Markdown with section headings. No emojis unless the user explicitly requests them.
- Labels: Suggest labels based on type and content (e.g.,
bug, severity:high, area:checkout).
- Links: Leave placeholders for parent epic / related tickets / PRs rather than inventing IDs.
Phase 5: Quality Check
Before showing the final output, run the checks listed in the type's reference file. Common failure modes to catch:
| Symptom |
Fix |
| Acceptance criteria describe implementation ("implement X service") |
Rewrite in terms of observable outcomes ("when user does X, system does Y") |
| Bug has no steps to reproduce |
Mark as "Open Questions" and ask the user to provide them |
| Epic has no success metric |
Add a metric or downgrade to a story |
| Story doesn't name a user ("we need to...") |
Rewrite with a concrete persona ("As a returning customer, I want...") |
| Initiative lists features instead of outcomes |
Reframe key results as measurable changes, not shipped features |
| Subtask is larger than its parent story |
Split the story or merge the subtasks |
Phase 6: Deliver
Show the final ticket to the user in a code block so they can copy-paste it. Then offer:
- Edit a field
- Change the type (if the content no longer fits)
- Write a related ticket (e.g., a story under the epic just written)
- Done
Quick Reference: Field Matrix
Which fields are required (R), optional (O), or not used (-) per type.
| Field |
Story |
Subtask |
Issue |
Bug |
Epic |
Initiative |
| Title |
R |
R |
R |
R |
R |
R |
| User persona |
R |
- |
O |
O |
O |
O |
| User story sentence |
R |
- |
O |
- |
O |
- |
| Problem statement |
O |
- |
O |
R |
R |
R |
| Acceptance criteria (Given/When/Then) |
R |
R |
O |
R |
O |
- |
| Steps to reproduce |
- |
- |
- |
R |
- |
- |
| Expected / actual behaviour |
- |
- |
- |
R |
- |
- |
| Environment |
- |
- |
- |
R |
- |
- |
| Severity |
- |
- |
- |
R |
- |
- |
| Priority |
O |
O |
O |
R |
O |
O |
| Scope / out of scope |
O |
- |
O |
- |
R |
R |
| Success metrics |
- |
- |
- |
- |
R |
R |
| Key results |
- |
- |
- |
- |
O |
R |
| Objective |
- |
- |
- |
- |
O |
R |
| Milestones |
- |
- |
- |
- |
O |
R |
| Parent link |
O |
R |
O |
O |
O |
- |
| Child list |
- |
- |
- |
- |
O |
O |
| Definition of done |
R |
R |
O |
R |
O |
- |
| Technical notes |
O |
O |
O |
O |
O |
- |
| Estimate |
O |
O |
O |
O |
O |
- |
| Dependencies |
O |
O |
O |
O |
O |
O |
Integration with Other Skills
| Situation |
Recommended Skill |
| Writing the PRD that the stories will flow from |
product-manager |
| Designing the architecture behind an epic |
architect |
| Writing acceptance criteria and test plans for a story |
qa-engineer |
| Planning sprints and setting sprint goals |
scrum |
| Tracking initiatives as part of a delivery plan |
project-manager |
| Writing the commit and PR for a story once implemented |
pr-message-writer |
| Kicking off the ticket workflow after writing |
ticket-workflow |
Reference Files
| Reference |
Contents |
| story.md |
User story fields, INVEST checklist, Given/When/Then acceptance criteria, full template and example |
| subtask.md |
Subtask fields, parent linkage rules, technical acceptance criteria, Definition of Done guidance |
| issue.md |
Generic issue template for chores, spikes, tech debt, questions, and docs tasks |
| bug.md |
Bug report fields, severity vs priority matrix, environment capture, reproduction rigor |
| epic.md |
Epic fields, problem statement, success metrics, in/out of scope, milestones, child stories |
| initiative.md |
Initiative fields, OKR alignment, objective and key results, outcome vs output, epic roll-up |
1---2name: ticket-writer3description: Interactive tool to write high-quality tickets of the right type - story, subtask, issue, bug, epic, or initiative - each with its own structure, required fields, and quality checks. Use when the user asks to write a ticket, draft a user story, file a bug report, scope an epic, define an initiative, break work into subtasks, or convert a rough idea into a well-formed backlog item. Runs an interactive type selection and field-by-field questionnaire, then outputs a clean Markdown ticket ready to paste into Jira, Linear, GitHub Issues, Azure DevOps, or any tracker.4---56# Ticket Writer78Pick the right ticket type, then fill in only the fields that type demands. A story is not a bug; an epic is not an initiative. Each type has a distinct audience, scope, and definition of done - mixing them produces vague, unactionable tickets that bloat backlogs.910## Core Principles1112| Principle | Meaning |13|---|---|14| **Type drives structure** | The type decides the required fields - never use a single template for everything |15| **Outcomes over outputs** | Describe the change the work creates, not the activity performed |16| **Small enough to finish** | Stories and subtasks fit a sprint; epics fit a quarter; initiatives span multiple quarters |17| **Testable acceptance** | Every story, subtask, and bug has acceptance criteria that a reviewer can verify |18| **Context, not prose** | Prefer tables, lists, and labelled sections over paragraphs - readers skim |19| **One ask per ticket** | If a ticket has two unrelated goals, split it |2021---2223## Type Hierarchy and Selection2425Tickets form a hierarchy. Pick the highest level where the work still has a single, coherent purpose.2627```28Initiative (multi-quarter strategic outcome)29 Epic (quarter-scale goal, one product area)30 Story (sprint-scale user-visible value)31 Subtask (implementation slice of a story)32 Bug (defect against current behaviour)33 Issue (anything else - chore, spike, question)34```3536### When to Use Each Type3738| Type | Audience | Scope | Typical Duration | Key Question |39|---|---|---|---|---|40| **Initiative** | Execs, product leadership | Cross-team strategic goal | 1-4 quarters | What outcome do we want for the business or users? |41| **Epic** | Product, engineering, design | Single product area, multiple stories | 1 quarter | What capability or experience are we delivering? |42| **Story** | Dev team, QA, PM | One user-facing change | Fits in a sprint | As a [user], what can I now do? |43| **Subtask** | One developer | Technical slice of a story | Hours to 1-2 days | What specific implementation step does this cover? |44| **Bug** | Dev team, QA | A deviation from intended behaviour | Fix-sized | What is broken, and how do I reproduce it? |45| **Issue** | Dev team | Chore, spike, question, tech debt, docs | Variable | What needs attention that isn't user-facing work? |4647### Type Decision Tree48491. Is this a deviation from intended behaviour? -> **Bug**502. Is this a strategic goal spanning multiple teams or quarters? -> **Initiative**513. Is this a large body of work that needs to be broken down but belongs to one product area? -> **Epic**524. Is this user-visible value that fits in a sprint? -> **Story**535. Is this an implementation slice of an existing story? -> **Subtask**546. None of the above (chore, spike, investigation, tech debt, question)? -> **Issue**5556---5758## Workflow5960### Phase 1: Type Selection6162If the user provided a type as an argument, use it. Otherwise present a selectable menu (use `AskUserQuestion` or the platform's equivalent interactive prompt) listing the six types with their one-line descriptions from the table above. Never dump the full table as plain text - keep the menu compact.6364If the user's intent is clear from context (e.g., they said "write a bug report" or "create an epic for checkout redesign"), skip the menu and confirm the inferred type with a single yes/no prompt.6566### Phase 2: Load the Type-Specific Reference6768Read the matching reference file for the selected type:6970| Type | Reference |71|---|---|72| Story | [references/story.md](references/story.md) |73| Subtask | [references/subtask.md](references/subtask.md) |74| Issue | [references/issue.md](references/issue.md) |75| Bug | [references/bug.md](references/bug.md) |76| Epic | [references/epic.md](references/epic.md) |77| Initiative | [references/initiative.md](references/initiative.md) |7879Each reference contains:80- The required fields81- The optional fields82- A field-by-field questionnaire (questions, options, follow-ups)83- The output template84- Quality checks specific to that type8586### Phase 3: Run the Questionnaire8788Ask only the questions the reference lists for the selected type. Follow these rules:89901. **Batch compatible questions** (3-4 per prompt) when using an interactive menu tool. Use free-text prompts only when the answer is genuinely free-form (title, description, reproduction steps).912. **Skip optional fields silently** if the user says "skip" or leaves them blank - do not add empty placeholders.923. **Follow-up on ambiguous answers** - if the user says "it's slow", ask "slow compared to what, and by how much?"934. **Never invent facts.** If the user cannot provide environment info, reproduction steps, or metrics, leave those fields out and note the gap in a `## Open Questions` section rather than fabricating values.9495### Phase 4: Assemble the Ticket9697Use the type's output template. Apply these universal formatting rules:9899- **Title:** Imperative mood for stories/subtasks/issues ("Add password reset via email"), descriptive for bugs ("Payment confirmation email not sent after successful charge"), outcome-oriented for epics/initiatives ("Reduce checkout abandonment by 30%").100- **Body:** Markdown with section headings. No emojis unless the user explicitly requests them.101- **Labels:** Suggest labels based on type and content (e.g., `bug`, `severity:high`, `area:checkout`).102- **Links:** Leave placeholders for parent epic / related tickets / PRs rather than inventing IDs.103104### Phase 5: Quality Check105106Before showing the final output, run the checks listed in the type's reference file. Common failure modes to catch:107108| Symptom | Fix |109|---|---|110| Acceptance criteria describe implementation ("implement X service") | Rewrite in terms of observable outcomes ("when user does X, system does Y") |111| Bug has no steps to reproduce | Mark as "Open Questions" and ask the user to provide them |112| Epic has no success metric | Add a metric or downgrade to a story |113| Story doesn't name a user ("we need to...") | Rewrite with a concrete persona ("As a returning customer, I want...") |114| Initiative lists features instead of outcomes | Reframe key results as measurable changes, not shipped features |115| Subtask is larger than its parent story | Split the story or merge the subtasks |116117### Phase 6: Deliver118119Show the final ticket to the user in a code block so they can copy-paste it. Then offer:1201. Edit a field1212. Change the type (if the content no longer fits)1223. Write a related ticket (e.g., a story under the epic just written)1234. Done124125---126127## Quick Reference: Field Matrix128129Which fields are required (R), optional (O), or not used (-) per type.130131| Field | Story | Subtask | Issue | Bug | Epic | Initiative |132|---|---|---|---|---|---|---|133| Title | R | R | R | R | R | R |134| User persona | R | - | O | O | O | O |135| User story sentence | R | - | O | - | O | - |136| Problem statement | O | - | O | R | R | R |137| Acceptance criteria (Given/When/Then) | R | R | O | R | O | - |138| Steps to reproduce | - | - | - | R | - | - |139| Expected / actual behaviour | - | - | - | R | - | - |140| Environment | - | - | - | R | - | - |141| Severity | - | - | - | R | - | - |142| Priority | O | O | O | R | O | O |143| Scope / out of scope | O | - | O | - | R | R |144| Success metrics | - | - | - | - | R | R |145| Key results | - | - | - | - | O | R |146| Objective | - | - | - | - | O | R |147| Milestones | - | - | - | - | O | R |148| Parent link | O | R | O | O | O | - |149| Child list | - | - | - | - | O | O |150| Definition of done | R | R | O | R | O | - |151| Technical notes | O | O | O | O | O | - |152| Estimate | O | O | O | O | O | - |153| Dependencies | O | O | O | O | O | O |154155---156157## Integration with Other Skills158159| Situation | Recommended Skill |160|---|---|161| Writing the PRD that the stories will flow from | `product-manager` |162| Designing the architecture behind an epic | `architect` |163| Writing acceptance criteria and test plans for a story | `qa-engineer` |164| Planning sprints and setting sprint goals | `scrum` |165| Tracking initiatives as part of a delivery plan | `project-manager` |166| Writing the commit and PR for a story once implemented | `pr-message-writer` |167| Kicking off the ticket workflow after writing | `ticket-workflow` |168169---170171## Reference Files172173| Reference | Contents |174|---|---|175| [story.md](references/story.md) | User story fields, INVEST checklist, Given/When/Then acceptance criteria, full template and example |176| [subtask.md](references/subtask.md) | Subtask fields, parent linkage rules, technical acceptance criteria, Definition of Done guidance |177| [issue.md](references/issue.md) | Generic issue template for chores, spikes, tech debt, questions, and docs tasks |178| [bug.md](references/bug.md) | Bug report fields, severity vs priority matrix, environment capture, reproduction rigor |179| [epic.md](references/epic.md) | Epic fields, problem statement, success metrics, in/out of scope, milestones, child stories |180| [initiative.md](references/initiative.md) | Initiative fields, OKR alignment, objective and key results, outcome vs output, epic roll-up |