roadmap
SKILL.md
Roadmap Skill
Plan project execution by creating milestones and organizing PRDs into an executable queue.
Workspace Mode Note
When running in workspace mode, all paths are relative to .aha-loop/ directory:
- Vision analysis:
.aha-loop/project.vision-analysis.md - Architecture:
.aha-loop/project.architecture.md - Roadmap:
.aha-loop/project.roadmap.json - PRD files:
.aha-loop/tasks/
The orchestrator will provide the actual paths in the prompt context.
The Job
- Read
project.vision-analysis.mdandproject.architecture.md - Decompose project into milestones
- Break each milestone into PRDs
- Order PRDs by dependencies
- Output
project.roadmap.json - Generate initial PRD files in
tasks/
Milestone Strategy
Standard Milestone Structure
| Milestone | Focus | Goal |
|---|---|---|
| M0: Foundation | Project scaffolding, CI/CD, tooling | Development environment ready |
| M1: MVP | Core features only | Minimal usable product |
| M2: Essential | Important features | Feature-complete for basic use |
| M3: Enhanced | Nice-to-have features | Polished product |
| M4: Optimization | Performance, UX polish | Production-ready |
Milestone Sizing
Each milestone should:
- Be completable in a reasonable timeframe
- Have 3-7 PRDs (avoid too many or too few)
- Deliver tangible, testable value
- Build on previous milestones
PRD Decomposition
From Features to PRDs
For each milestone, break down features into PRDs:
Milestone: M1 - MVP
├── PRD-001: Project Scaffolding
├── PRD-002: Database Schema
├── PRD-003: Core Data Models
├── PRD-004: Basic API Endpoints
└── PRD-005: Minimal UI
PRD Sizing
Each PRD should:
- Take 1-5 Aha Loop iterations (5-25 stories)
- Focus on one coherent feature area
- Be independently testable
- Not depend on unfinished PRDs
PRD Ordering
Order PRDs by dependencies:
- Infrastructure first - Project setup, database, auth
- Backend before frontend - APIs before UI that uses them
- Core before optional - Must-have before nice-to-have
- Data before presentation - Models before views
Roadmap JSON Structure
{
"version": 1,
"projectName": "[From vision]",
"status": "in_progress",
"currentMilestone": "M1",
"currentPRD": "PRD-002",
"createdAt": "[timestamp]",
"updatedAt": "[timestamp]",
"milestones": [
{
"id": "M0",
"title": "Foundation",
"description": "Project setup and development environment",
"status": "completed",
"completedAt": "[timestamp]",
"prds": [
{
"id": "PRD-001",
"title": "Project Scaffolding",
"description": "Initialize project structure, dependencies, and tooling",
"status": "completed",
"prdFile": "tasks/prd-scaffolding.md",
"stories": 5,
"completedAt": "[timestamp]"
}
]
},
{
"id": "M1",
"title": "MVP",
"description": "Minimum viable product with core functionality",
"status": "in_progress",
"prds": [
{
"id": "PRD-002",
"title": "Database Schema",
"description": "Design and implement database schema",
"status": "in_progress",
"prdFile": "tasks/prd-database.md",
"stories": 8,
"dependsOn": ["PRD-001"]
},
{
"id": "PRD-003",
"title": "Core API",
"description": "Implement core API endpoints",
"status": "pending",
"prdFile": "tasks/prd-core-api.md",
"stories": 12,
"dependsOn": ["PRD-002"]
}
]
},
{
"id": "M2",
"title": "Essential Features",
"description": "Complete essential features for basic use",
"status": "pending",
"prds": []
}
],
"changelog": [
{
"timestamp": "[timestamp]",
"action": "created",
"description": "Initial roadmap created from vision and architecture"
}
]
}
Roadmap Creation Process
Step 1: Analyze Requirements
From vision analysis, categorize features:
## Feature Categories
### M1: MVP (Must ship)
- [Feature 1]
- [Feature 2]
### M2: Essential (Should ship)
- [Feature 3]
- [Feature 4]
### M3: Enhanced (Nice to ship)
- [Feature 5]
Step 2: Create M0 Foundation
Every project starts with M0:
## M0: Foundation PRDs
### PRD-001: Project Scaffolding
- Initialize project with chosen tech stack
- Set up directory structure
- Configure linting and formatting
- Set up basic CI (if applicable)
- Create initial README
### PRD-002: Development Environment
- Database setup (if applicable)
- Environment configuration
- Development scripts
- Basic testing infrastructure
Step 3: Decompose Milestones into PRDs
For each milestone after M0:
- List all features for this milestone
- Group related features
- Order by dependencies
- Create PRD for each group
- Estimate stories per PRD
Step 4: Generate PRD Files
For each PRD, create a stub file in tasks/:
# PRD: [Title]
**ID:** PRD-XXX
**Milestone:** M[N]
**Status:** Pending
## Overview
[Brief description from roadmap]
## Context
[How this relates to previous PRDs and the overall project]
## Goals
- [Goal 1]
- [Goal 2]
## User Stories
[To be generated when this PRD becomes active]
## Dependencies
- PRD-XXX: [What it depends on]
## Acceptance Criteria
- [ ] [High-level criterion]
- [ ] [Another criterion]
---
*This PRD will be fully expanded when it becomes the active PRD.*
Dynamic Roadmap Updates
When to Update Roadmap
The roadmap should be updated when:
- PRD Completed - Mark as complete, update timestamps
- New Requirement Discovered - Add new PRD
- Scope Change - Modify or remove PRDs
- Better Approach Found - Restructure PRDs
- Milestone Complete - Update status, move to next
Update Process
{
"changelog": [
{
"timestamp": "2026-01-29T12:00:00Z",
"action": "prd_completed",
"prdId": "PRD-002",
"description": "Database schema implemented"
},
{
"timestamp": "2026-01-29T14:00:00Z",
"action": "prd_added",
"prdId": "PRD-007",
"description": "Added caching layer PRD based on performance research"
}
]
}
Automatic Triggers
The orchestrator should trigger roadmap review:
- After each PRD completion
- After each milestone completion
- When significant learnings are recorded
- When errors repeatedly occur
Integration with Orchestrator
Orchestrator Reads
# Get current PRD
jq '.currentPRD' project.roadmap.json
# Get PRD file path
jq -r '.milestones[].prds[] | select(.id == "PRD-002") | .prdFile' project.roadmap.json
Orchestrator Updates
After PRD completion:
# Update PRD status
jq '.milestones[].prds[] |= if .id == "PRD-002" then .status = "completed" else . end' project.roadmap.json
PRD Queue Management
Getting Next PRD
# Pseudocode for finding next PRD
def get_next_prd(roadmap):
for milestone in roadmap.milestones:
if milestone.status == "completed":
continue
for prd in milestone.prds:
if prd.status == "pending":
if all_dependencies_complete(prd):
return prd
return None # All complete or blocked
Handling Blocked PRDs
If a PRD's dependencies aren't met:
- Skip to next available PRD
- If no PRDs available, report blocking issue
- Consider if dependencies need reprioritization
Example Roadmap
Project: Personal Finance Tracker (from vision example)
{
"version": 1,
"projectName": "Finance Tracker",
"status": "in_progress",
"currentMilestone": "M0",
"currentPRD": "PRD-001",
"milestones": [
{
"id": "M0",
"title": "Foundation",
"status": "in_progress",
"prds": [
{
"id": "PRD-001",
"title": "SvelteKit Project Setup",
"description": "Initialize SvelteKit project with TypeScript, Tailwind, PWA support",
"status": "in_progress",
"prdFile": "tasks/prd-project-setup.md",
"stories": 6
}
]
},
{
"id": "M1",
"title": "MVP - Core Expense Tracking",
"status": "pending",
"prds": [
{
"id": "PRD-002",
"title": "Data Layer",
"description": "Implement IndexedDB with Dexie for expense storage",
"status": "pending",
"prdFile": "tasks/prd-data-layer.md",
"stories": 8,
"dependsOn": ["PRD-001"]
},
{
"id": "PRD-003",
"title": "Quick Expense Entry",
"description": "Fast expense input form (< 5 seconds goal)",
"status": "pending",
"prdFile": "tasks/prd-expense-entry.md",
"stories": 10,
"dependsOn": ["PRD-002"]
},
{
"id": "PRD-004",
"title": "Expense List View",
"description": "View and manage recorded expenses",
"status": "pending",
"prdFile": "tasks/prd-expense-list.md",
"stories": 8,
"dependsOn": ["PRD-002"]
}
]
},
{
"id": "M2",
"title": "Reports & PWA",
"status": "pending",
"prds": [
{
"id": "PRD-005",
"title": "Monthly Reports",
"description": "Auto-generated monthly expense reports",
"status": "pending",
"prdFile": "tasks/prd-reports.md",
"stories": 10,
"dependsOn": ["PRD-003", "PRD-004"]
},
{
"id": "PRD-006",
"title": "PWA Offline Support",
"description": "Full offline capability with service worker",
"status": "pending",
"prdFile": "tasks/prd-pwa.md",
"stories": 8,
"dependsOn": ["PRD-002"]
}
]
}
]
}
Checklist
Before completing roadmap:
- All milestones defined with clear goals
- PRDs created for at least M0 and M1
- Dependencies between PRDs mapped
- PRD stub files created in tasks/
- Roadmap JSON validates
- Current milestone and PRD set correctly
- Changelog initialized
- Saved to
project.roadmap.json
Weekly Installs
4
Repository
youglin-dev/aha-loopGitHub Stars
172
First Seen
Feb 2, 2026
Security Audits
Installed on
opencode4
gemini-cli4
codex4
antigravity3
claude-code3
github-copilot2