writing-issues
riekelt/technical-writer
Write tracker items that survive without you—clear outcomes, testable acceptance criteria, and named owners.
What is writing-issues?
A skill for writing or refining tracker items (epics, stories, tasks, bugs, spikes) so they are self-contained and actionable. Use it whenever work enters a tracker, from rough discussion to polished acceptance criteria, to ensure every issue answers what outcome is expected, what decides Done, where the evidence is, and who owns open gaps.
- Apply the survives-without-you test: state outcomes (not steps), write independently testable acceptance checks, link evidence for decisions, and name owners of open items
- Use issue-type glossary (Epic, Story, Task, Bug, Spike) consistently with one-line definitions
- Fill story and task templates with Problem/Why, Outcome, Acceptance checklist, Out of scope, Open items, and Sources sections
- Write bug reports with symptom-first structure: Reproduction steps, Expected vs. Actual behavior, Environment, and Suspected cause (as hypothesis only)
- Detect and eliminate vagueness defects in acceptance criteria using the five defects from design-doc writing
How to install writing-issues
npx skills add https://github.com/riekelt/technical-writer --skill writing-issues- The `technical-writing` skill (hard rules, truth rules, style) is a required background
- Access to your team's issue tracker with existing issues to read and match conventions
How to use writing-issues
- 1.Read one or two recent issues of the same type in your tracker to match existing conventions
- 2.Identify the issue type (Epic, Story, Task, Bug, or Spike) and select the appropriate skeleton template
- 3.Fill in the required sections: for stories/tasks use Problem/Why, Outcome, Acceptance, Out of scope, Open items, Sources; for bugs use Symptom, Reproduction, Expected, Actual, Environment, Open items, Suspected cause
- 4.Write acceptance checks as independently testable statements (not vague goals); use Gherkin given/when/then format if your team does
- 5.Name an owner or role for every open item, or explicitly mark it unassigned; link evidence (repo paths, documents, URLs) behind every decision
- 6.Review the issue against the survives-without-you test: can a stranger understand the outcome, how to verify Done, where decisions came from, and who to ask about gaps?
Use cases
- Converting a discussion, review finding, or plan into properly structured tracker tickets
- Splitting work into epics and stories with clear acceptance criteria before estimation
- Filing bug reports with searchable symptoms and reproducible steps
- Writing spikes whose Done is a recorded decision, not exploratory code
- Refining rough verbal dumps into issues that team members can work from without asking clarifying questions
- Technical writers documenting work processes
- Engineering leads and project managers filing or reviewing tracker items
- Developers writing acceptance criteria for their own or others' work
- Teams adopting consistent issue-writing standards
writing-issues FAQ
Use this skill for writing tracker items and acceptance criteria. Use writing-design-docs when an issue needs a design argued; the issue then links the design doc and never inlines it. This skill covers the writing only, not design decisions.
File the issue with named gaps rather than blocking. Use the technical-writing checkpoint (kind, audience, purpose, non-goals) to identify what to ask about. Missing content details (repro steps, logs, prior-incident links) become explicitly owned open items inside the issue.
Yes, Gherkin format is accepted if your team uses it. The same testability bar applies: each check must be independently testable with a verifiable output, not vague goals like 'handle errors appropriately.'
No. The issue owns what and why; the plan in the repo owns how. Never maintain two live copies. Trust code and repository history over issue status, which goes stale fast.
A spike's Done is the decision recorded (see the recording-decisions skill), never 'looked into it.' The output is a decision, not code. You can then file an epic after the spike, or make the accepted design doc the first acceptance item of an epic.
Full instructions (SKILL.md)
Source of truth, from riekelt/technical-writer.
name: writing-issues description: Use when writing or refining tracker items - epics, stories, tasks, bug reports, spikes, or acceptance criteria - or when turning a discussion, review finding, or plan into tickets. Encodes the survives-without-you test, the issue-type glossary, and the story and bug skeletons. Use whenever work is written into a tracker, even from a rough verbal dump.
Writing issues
REQUIRED BACKGROUND: the technical-writing skill (hard rules, truth rules, style).
Overview
Core principle: write issues so they survive without you. State the outcome, include the acceptance check that decides Done, link the evidence behind every decision, and name the owner of every open part.
When to invoke, and not
Invoke when writing or editing tracker items, filing a bug, splitting work into tickets, or writing acceptance criteria. Do NOT invoke for weighing alternatives: when an issue needs a design argued, that is writing-design-docs; the issue links the design doc and never inlines it. This skill covers the writing only, not prioritization or workflow advice.
Read-first applies to the tracker: read up to two recent issues of the same type and match their conventions before filing. When the tracker holds fewer, read what exists and file anyway.
When the reporter is unavailable, file with named gaps rather than blocking. The technical-writing checkpoint (kind, audience, purpose, non-goals) is what you stop and ask about. Missing content details (a repro step, a log line, a prior-incident link) become explicitly owned open items inside the issue.
The survives-without-you test
Every issue answers four questions a stranger will ask:
- What outcome? The state of the world when this is done, not the steps to get there. Implementation belongs in the plan.
- What decides Done? A concrete, independently testable acceptance check. "Handle errors appropriately" decides nothing; "a failed upload shows the retry banner and logs at WARN" does.
- What is the evidence? Where a decision or constraint came from evidence, link the source: a repo path, a document, a URL.
- Who owns the open parts? "Still needs investigation" without a name or role is a banned vague owner; name one or mark the field explicitly as unassigned.
Issue types
One glossary per tracker, defined in one line each and used consistently:
| Type | Definition |
|---|---|
| Epic | A body of work; its description states the outcome and links the design doc |
| Story | Something with user-visible value, written from the user's seat |
| Task | Engineering work with no user-visible surface |
| Bug | A defect: current behavior contradicts intended behavior |
| Spike | A time-boxed investigation whose output is a decision, not code |
A spike's Done is the decision recorded (see recording-decisions), never "looked into it".
A decision followed by a body of work fits two shapes: a spike first with the epic filed after the decision, or an epic whose first acceptance item is the accepted design doc. Both are valid; pick one and say which.
Story and task skeleton
The issue description is the spec for what and why:
**Problem / Why:** [the observable problem, from the reader's seat, with numbers where they exist]
**Outcome:** [the state of the world when done; not the steps]
**Acceptance:**
- [ ] [independently testable check]
- [ ] [another]
**Out of scope:** [what this issue deliberately does not cover]
**Open items:** [each with a named owner or role, or an explicit "unassigned"]
**Sources:** [repo paths, documents, measurements behind the above]
Apply the five vagueness defects from writing-design-docs to the acceptance list: an acceptance check that fails "what without how" or "no verifiable output" is not testable.
Gherkin-style given/when/then is an accepted format for acceptance checks when the team uses it; the same testability bar applies either way. INVEST (independent, negotiable, valuable, estimable, small, testable) works as a sizing check for stories: a story failing "small" or "testable" splits before it is filed.
Bug report skeleton
Symptom first: the next reader arrives searching for the error.
**Symptom:** [verbatim error string or observable misbehavior, searchable]
**Reproduction:** [numbered steps, one action each, from a clean state]
**Expected:** [what should happen, with the source that says so, or an explicit "no written source found" rather than a fabricated reference]
**Actual:** [what happens]
**Environment:** [version, platform, config that matters]
**Open items:** [each with a named owner or role, or an explicit "unassigned"]
**Suspected cause:** [only if investigated; labeled as hypothesis, never stated as fact]
The title carries the symptom, not the diagnosis: "duplicate reminders at reminder time", not "race condition in scheduler", unless the cause is verified.
Rules
- One home. The issue owns what and why; the plan in the repo owns how. Never maintain two live copies.
- Ticket keys. They live in commits and planning docs, never in code, comments, test names, or user-facing strings.
- Trust code, not issue status. Self-reported state goes stale fast; before building on an imported or old issue, verify against the repository (grep the symbols, check the history).
- Append, do not rewrite. Scope changes on an in-flight issue are dated appended notes, not silent edits. Follow-up work found after completion is a new issue, never an edit to a closed one.
- Subtasks. Coarse reviewable slices, not every micro-step; the micro-steps live in the plan.
- Estimates. Labeled as estimates, with what they depend on.
- Closing an issue. It records the reason, especially for won't-fix and duplicates.
Related skills
More from riekelt/technical-writer and the wider catalog.

writing-postmortems
Write blameless, evidence-based postmortems and incident reports that outlive the crisis.

writing-runbooks
Write operational documentation—runbooks, setup guides, release procedures, migration guides—that people execute under time pressure.

diagramming-processes
Diagram business processes, workflows, and system interactions as maintainable source code.

documenting-contracts
Document HTTP APIs, message contracts, and file formats with exhaustive wire-level detail at the right abstraction level.

multiplayer-game
Pragmatic patterns for building multiplayer games with matchmaking, tick loops, realtime state, and validation.

rivet-actors
Actors: The primitive for agent orchestration.