Add capability for organizing backlog into shippable business capabilities using value-based milestones (not time-based phases). Components: - milestone-planning skill: Value-based framework, vertical slice test, one active milestone - create-milestones skill: Orchestrator (Haiku) for analyzing and grouping issues - milestone-planner agent: Groups issues into capabilities autonomously (Haiku) Core Principles: - Milestone = shippable business capability (not phase) - One active milestone at a time (preserves focus) - 5-25 issues per milestone (right-sized) - Value labels: value/high, value/medium, value/low - Risk labels: risk/high (optional) - Vertical slice test (can be demoed independently) - No dates (capability-based, not time-based) Workflow: /create-milestones reads existing Gitea issues → analyzes capability boundaries → groups into milestones → creates in Gitea → assigns issues → applies labels → user manually activates ONE milestone Co-Authored-By: Claude Code <noreply@anthropic.com>
4.9 KiB
name, description, user-invocable
| name | description | user-invocable |
|---|---|---|
| milestone-planning | Value-based milestone planning: milestones as shippable capabilities, not phases. One active milestone, vertical slices, value/risk labels. Use when planning milestones or organizing backlog by capability. | false |
Milestone Planning
Value-driven milestone framework: milestones represent shippable business capabilities, not time-based phases.
Core Principle
If you don't deliver by date, milestones must represent value slices, not time.
Milestone = A shippable business capability
Not a phase. Not "MVP". Not "Auth".
What Makes a Good Milestone
Each milestone should answer one business question:
"What new capability exists for the user once this is done?"
Good Examples
✓ Customer can register and authenticate ✓ Order can be placed and paid ✓ Admin can manage products ✓ Audit trail exists for all state changes
Bad Examples
✗ MVP (what capability?) ✗ Backend (technical layer, not user value) ✗ Auth improvements (vague, no completion criteria) ✗ Phase 1 (time-based, not value-based)
Test: If it can't be demoed independently, it's too vague.
Mapping DDD Issues to Milestones
DDD building blocks → issues
- Aggregates
- Commands
- Events
- Read models
- Policies
End-to-end capability → milestone
- Spans multiple aggregates
- Commands + invariants + events
- Read models for visibility
- Maybe UI/API glue
Value is cross-cutting by nature.
A milestone usually includes:
- Multiple aggregates working together
- Commands that achieve user goal
- Events connecting aggregates
- Read models for user feedback
- UI/API to trigger capability
One Active Milestone at a Time
Rule: Exactly one open milestone = current value focus
Why:
- Preserves focus
- Avoids parallel half-value
- Forces completion
- Makes priority explicit
Practice:
- Everything else stays unassigned
- When done → close it → pick next highest-value milestone
- Multiple open milestones = accidental roadmap
Priority Without Dates
Since Gitea milestones have no ordering, use labels:
Minimal label set:
value/high- Highest business valuevalue/medium- Moderate business valuevalue/low- Nice to haverisk/high- Technical risk or uncertainty
Issues have:
- Always: value label
- Sometimes: risk label
You now have:
- Milestone → what capability
- Label → why now
Sizing Guidelines
A value milestone should:
- Be completable in days to a few weeks
- Deliver observable user value
- Contain 5-25 issues
If it keeps growing:
- You discovered multiple capabilities
- Split into separate milestones
Vertical Slice Test
Before creating a milestone, verify:
Can this be demoed independently?
Test questions:
- Can a user interact with this capability end-to-end?
- Does it produce observable results?
- Is it useful on its own (not just foundation)?
- Can we ship this and get feedback?
If NO to any → not a value slice yet.
Label Strategy
Value labels (always):
- Reflect business priority
- Based on user impact, revenue, strategic alignment
- Applied to every issue in milestone
Risk labels (optional):
- Flag technical uncertainty
- Flag new patterns/technologies
- Flag complex integrations
- Helps sequence work (derisk early)
Anti-Patterns
"We just deliver highest value first" Only works if:
- Value is explicit (labels)
- Scope is bounded (milestones)
- Work is finishable (vertical slices)
Without milestones, "value-first" quietly becomes "interesting-first".
Multiple open milestones:
- Splits focus
- Encourages context switching
- Hides incomplete work
- Prevents shipping
Technical milestones:
- "Backend" is not a capability
- "API layer" is not demoable
- "Database migration" might be necessary but not a milestone
Phase-based milestones:
- "MVP" → what can user do?
- "Phase 1" → what capability?
- "Q1 goals" → what ships?
When NOT to Use Milestones
Don't use milestones when:
- Single capability with <5 issues (just label it)
- Exploratory work (use spike label instead)
- Refactoring without user-visible change (use technical debt label)
- Everything ships together (waterfall project)
Milestones enforce discipline around value slices.
Workflow Summary
- Issues exist (from DDD analysis or backlog)
- Group by capability (milestone-planner agent)
- One milestone open (current value slice)
- Label for priority (value/risk)
- No dates (capability-based, not time-based)
- Close ruthlessly (finish before starting next)
Tips
- Start with 3-5 milestones defined, 1 active
- Keep unassigned issues in backlog
- Move issues between milestones if capability boundaries change
- Split milestones that grow beyond 25 issues
- Close milestone when capability is demoable
- Review value/risk labels regularly
- Active milestone = team's current focus