Ticket Breakdown
Overview
Systematic approach to decomposing large feature specifications into focused, independent issues. Creates a structured set of issue files that enable parallel work by multiple agents while maintaining clear dependencies.
When to Use
Use this skill when:
- Asked to "break down a ticket" or "create issues"
- Given a large feature specification (TICKET.md, feature doc)
- Need to split work into parallelizable units
- Starting implementation of multi-component features
- Project uses issues/ directory for work tracking
Don't use when:
- Feature is already small enough for single implementation session
- No formal issue tracking structure needed
- Working on ad-hoc fixes or single-file changes
- Ticket has fewer than 3 distinct implementation steps
Core Pattern
Without this skill:
User: "Break down this ticket"
Agent: Creates files ISSUE-001.md, ISSUE-002.md...
Prescriptive implementation instructions
No clear dependencies or sequence
Incompatible with issue-management expectations
With this skill:
User: "Break down this ticket"
Agent: 1. Read and understand ticket requirements
2. Consult architecture docs
3. Design issue structure with phases
4. Create issues/ directory structure
5. Write README.md with dependencies
6. Create individual ISSUE-*.md files
7. Focus on WHAT and WHY, not HOW
8. Lint/format with rumdl
Breakdown Process
Step 1: Understand Requirements
Read the ticket thoroughly:
- What is the feature or capability?
- What are the acceptance criteria?
- What are the technical constraints?
- What existing patterns should be followed?
Consult architecture documentation:
- Read
AGENTS.mdfor repository conventions - Check
docs/architecture/for system design - Review
docs/guides/for implementation workflows - Look at similar existing implementations as reference
Step 2: Design Issue Structure
Identify natural boundaries:
- Database changes (migrations, schema)
- API contracts (protobuf, REST definitions)
- Implementation layers (datastore, domain, request handlers)
- Each layer includes its own tests
- Service wiring and integration
- Includes integration/end-to-end tests
- Documentation updates
Do NOT create separate testing issues. Testing is part of implementing each layer, not a separate phase.
Common issue structure pattern:
Phase 1: Foundation
├── Database migration
└── API definitions (protobuf/contract)
Phase 2: Implementation Layers
├── Datastore layer (SQL queries + tests)
├── Domain layer (business logic + tests)
├── Request handlers (validation/coordination + tests)
└── Service layer (wiring + integration tests)
Phase 3: Documentation
└── Documentation updates
CRITICAL: Tests are NOT separate issues. Each implementation issue includes writing and verifying tests for that layer. The agent implementing a feature should write tests when writing the implementation code, following test-driven development practices.
Define clear dependencies:
- Each issue should list what it depends on
- Dependencies should form a DAG (no cycles)
- Document which issues can be done in parallel
Step 3: Create Directory Structure
Required files:
issues/
├── README.md # Overview, phases, dependencies
├── .status.json # DO NOT CREATE - issue-management skill creates this
├── ISSUE-001-name.md # Individual issues
├── ISSUE-002-name.md
└── ...
CRITICAL: Do not create .status.json
The issue-management skill expects to create and own the .status.json file. Creating it yourself
will cause conflicts. The issue-management skill will initialize it when an agent first works on an
issue.
Step 4: Write README.md
README.md structure:
# [Feature Name] Implementation Issues
## Overview
[Brief description of overall feature]
## Implementation Order
[List all issues with phases and dependencies]
### Phase 1: [Phase Name]
1. **[ISSUE-001: Title](ISSUE-001-file.md)**
- [One-line description]
- **Depends on**: Nothing / ISSUE-XXX
### Phase 2: [Phase Name]
...
## Key Features
[Bullet list of what the feature provides]
## Design Decisions
[Important architectural or technical choices]
## Testing Strategy
[How the feature will be tested]
## Common Patterns
[Existing patterns this follows]
## Acceptance Criteria
[Overall completion criteria with checkboxes]
Key points:
- Clear overview of the entire feature
- Sequential numbering with descriptive filenames
- Explicit dependency declarations
- Group related issues into phases
- Link to each issue file
Step 5: Write Individual Issue Files
Each ISSUE-*.md structure:
# ISSUE-XXX: [Clear Title]
## Summary
[One-sentence description of what this issue accomplishes]
## Context
[Why this work is needed, how it fits into the larger feature]
## Requirements
[High-level requirements this issue must satisfy]
[Include testing requirements - tests must be written with implementation]
## Key Information
[Technical details, schemas, APIs, patterns to follow]
[References to existing code or documentation]
[Data structures, algorithms, validation rules]
## Technical Notes
[Implementation hints without being prescriptive]
[Commands to run, tools to use]
[Files to look at as examples]
## Related Files
[Files that will be created or modified]
[Existing files to reference]
## Acceptance Criteria
- [ ] [Implementation complete]
- [ ] [Tests written and passing]
- [ ] [All existing tests pass]
- [ ] [Linting passes]
Focus on WHAT and WHY, not HOW:
❌ Too prescriptive (BAD):
## Implementation Steps
1. Create a file called `create.go` in `requests/`
2. Define a struct: `type Create struct { pool dbx.Transactor }`
3. Add method: `func (c Create) Handle(ctx context.Context...`
✅ Information-focused (GOOD):
## Key Information
Request handlers coordinate validation and transactions:
- Validate input from protobuf messages
- Begin database transaction
- Call domain logic and datastore methods
- Return protobuf response types
See existing example: `internal/locations/requests/create.go`
## Technical Notes
- Request handlers live in `internal/*/requests/`
- Use `dbx.Transactor` for transaction management
- Follow existing patterns from Locations service
Let programmers discover the implementation approach by:
- Providing context and requirements
- Pointing to architectural documentation
- Referencing similar existing code
- Explaining patterns and conventions
- Describing validation rules and business logic
Step 6: Ensure Testing Integration
CRITICAL: Every implementation issue must include testing.
When writing issue files, ensure acceptance criteria explicitly require tests:
## Acceptance Criteria
- [ ] Implementation complete
- [ ] Unit tests written for all new code
- [ ] All tests passing (including existing tests)
- [ ] Code formatted and linted
Never create issues like:
- ❌ "ISSUE-007: Write Unit Tests"
- ❌ "ISSUE-008: Add Integration Tests"
- ❌ "ISSUE-009: Test Coverage"
Instead, integrate testing into implementation issues:
- ✅ "ISSUE-004: Implement Domain Layer" (includes unit tests in acceptance criteria)
- ✅ "ISSUE-006: Service Layer Wiring" (includes integration tests in acceptance criteria)
Rationale: Agents should write tests when they write implementation code, following test-driven development. Separating testing into its own issue creates technical debt and encourages writing tests after the fact, which is less effective.
Step 7: Format with rumdl
After creating all markdown files:
rumdl issues/*.md
This lints and formats the markdown files to ensure consistency.
Issue Naming Conventions
Filename format: ISSUE-XXX-descriptive-name.md
- Sequential numbering (001, 002, 003...)
- Descriptive kebab-case name
- Reflects what the issue does
Examples:
- ✅
ISSUE-001-database-migration.md - ✅
ISSUE-003-datastore-layer.md - ✅
ISSUE-007-unit-tests.md - ❌
ISSUE-001.md(not descriptive) - ❌
issue-1-db.md(wrong format)
Title format: ISSUE-XXX: [Action Verb] [Object]
- ✅
ISSUE-001: Create Asset Table Migration - ✅
ISSUE-004: Implement Domain Layer - ❌
ISSUE-001: Asset Table(no action)
Compatibility with issue-management Skill
The issue-management skill expects:
- issues/ directory with README.md and ISSUE-*.md files ✅
- README.md with overview, phases, and dependencies ✅
- Clear dependencies between issues documented ✅
- Acceptance criteria in each issue for verification ✅
- No .status.json file initially - issue-management creates this ✅
Your issues must include:
- Explicit "Depends on" declarations in README.md
- Acceptance criteria checkboxes in each issue
- Clear, testable outcomes
- References to verification commands (tests, linting)
Do NOT include:
.status.jsonfile (issue-management creates and owns this)- Status tracking in issue files (tracked separately)
- Prescriptive implementation steps (let programmers discover)
Common Mistakes
| Mistake | Fix | | ------------------------------------ | ------------------------------------------------------ | | Creating .status.json yourself | Don't create it - issue-management skill owns this | | Too prescriptive about code | Focus on requirements, context, and what to reference | | No clear dependencies | Explicitly state dependencies in README.md | | Mixing multiple layers in one issue | Separate by architectural layer or component | | Missing acceptance criteria | Include testable checkboxes for verification | | No reference to architecture docs | Always consult and reference docs/ | | Generic "implement X" without detail | Provide schemas, APIs, validation rules, context | | Skipping rumdl formatting | Always lint/format markdown files | | Separate testing issues | Tests must be part of implementation issues, not separate |
Quick Reference
Read ticket + architecture docs
↓
Design phases and dependencies
↓
Create issues/ directory
↓
Write README.md (overview, phases, dependencies)
↓
Write ISSUE-*.md files (WHAT/WHY, not HOW)
↓
Run rumdl for formatting
↓
Commit and push
Example Issue Dependencies
## Implementation Order
### Phase 1: Foundation
1. **[ISSUE-001: Database Migration](ISSUE-001-database-migration.md)**
- Create asset table
- **Depends on**: Nothing
2. **[ISSUE-002: Protobuf Definitions](ISSUE-002-protobuf-definitions.md)**
- Define API contract
- **Depends on**: Nothing (parallel with ISSUE-001)
### Phase 2: Implementation
3. **[ISSUE-003: Datastore Layer](ISSUE-003-datastore-layer.md)**
- SQL queries and DB operations with database tests
- **Depends on**: ISSUE-001 (needs table schema)
4. **[ISSUE-004: Domain Layer](ISSUE-004-domain-layer.md)**
- Business logic with unit tests
- **Depends on**: ISSUE-003 (needs datastore interface)
5. **[ISSUE-005: Request Handlers](ISSUE-005-request-handlers.md)**
- Request validation and coordination with unit tests
- **Depends on**: ISSUE-004 (needs domain layer)
6. **[ISSUE-006: Service Layer](ISSUE-006-service-layer.md)**
- Service wiring with integration tests
- **Depends on**: ISSUE-005 (needs handlers)
### Phase 3: Documentation
7. **[ISSUE-007: Documentation](ISSUE-007-documentation.md)**
- Update guides and architecture docs
- **Depends on**: ISSUE-006 (needs complete implementation)
Brainstorming Before Breakdown
CRITICAL: Before creating any issues, use the brainstorming skill to think through the design:
- What are the major components?
- How do they interact?
- What are the dependencies?
- What are potential issues or edge cases?
- What existing patterns should be followed?
This planning ensures a coherent breakdown that makes sense architecturally.
After Creating Issues
Commit the work:
git add issues/
git commit -m "Break down [Feature Name] ticket into implementation issues"
git push
Report to user:
- Number of issues created
- Phases identified
- Note that they can start work with "work on the next issue"
Do NOT:
- Start implementing issues immediately
- Create .status.json file
- Mark issues as started or in progress
The breakdown is complete. Implementation happens separately using the issue-management skill.