with one click
ln-230-story-prioritizer
// RICE-scores Stories with market research and generates prioritization table. Use when Stories need business priority ranking for sprint planning.
// RICE-scores Stories with market research and generates prioritization table. Use when Stories need business priority ranking for sprint planning.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | ln-230-story-prioritizer |
| description | RICE-scores Stories with market research and generates prioritization table. Use when Stories need business priority ranking for sprint planning. |
| license | MIT |
Paths: File paths (
references/,../ln-*) are relative to this skill directory.
Type: L3 Worker Category: 2XX Planning
Evaluate Stories using RICE scoring with market research. Generate consolidated prioritization table for Epic.
Use this skill when:
Do NOT use when:
| Parameter | Required | Description | Default |
|---|---|---|---|
| epic | Yes | Epic ID or "Epic N" format | - |
| stories | No | Specific Story IDs to prioritize | All in Epic |
| depth | No | Research depth (quick/standard/deep) | "standard" |
depth options:
quick - 2-3 min/Story, 1 WebSearch per typestandard - 5-7 min/Story, 2-3 WebSearches per typedeep - 8-10 min/Story, comprehensive researchdocs/market/[epic-slug]/
└── prioritization.md # Consolidated table + RICE details + sources
MANDATORY READ: Load references/planning_worker_runtime_contract.md, references/coordinator_summary_contract.md
MANDATORY READ: Load references/researchgraph_mcp_usage.md when Stories cite H/G/run IDs or project researchgraph evidence can change priority confidence.
Runtime family: planning-worker-runtime
Identifier:
epic-{epicId}Phases:
PHASE_0_CONFIGPHASE_1_DISCOVERYPHASE_2_LOAD_STORY_METADATAPHASE_3_ANALYZE_STORIESPHASE_4_GENERATE_PRIORITIZATIONPHASE_5_WRITE_SUMMARYPHASE_6_SELF_CHECKSummary contract:
summary_kind=story-prioritization-workerepic_id, depth, stories_analyzed, priority_distribution, top_story_ids, prioritization_path, warningssummaryArtifactPath.hex-skills/runtime-artifacts/runs/{parent_run_id}/story-prioritization-worker/ln-230--{identifier}.jsonTable columns (from user requirements):
| Priority | Customer Problem | Feature | Solution | Rationale | Impact | Market | Sources | Competition |
|---|---|---|---|---|---|---|---|---|
| P0 | User pain point | Story title | Technical approach | Why important | Business impact | $XB | [Link] | Blue 1-3 / Red 4-5 |
| Input | Required | Source | Description |
|---|---|---|---|
epicId | Yes | args, kanban, user | Epic to process |
Resolution: Epic Resolution Chain. Status filter: Active (planned/started)
MANDATORY READ: Load references/environment_state_contract.md, references/storage_mode_detection.md, references/input_resolution_pattern.md
Extract: task_provider = Task Management → Provider
| Tool | Purpose | Example Query |
|---|---|---|
| WebSearch | Market size, competitors | "[domain] market size {current_year}" |
| mcp__Ref | Industry reports | "[domain] market analysis report" |
| hex-research | Local hypothesis, goal, and benchmark evidence | find_hypotheses, inspect_goal, find_runs for explicit H/G/run context |
| Task provider | Load Stories | IF linear: list_issues / ELSE: Glob story.md |
| Glob | Check existing | "docs/market/[epic]/*" |
Objective: Validate input and prepare context.
Process:
Resolve epicId: Run Epic Resolution Chain per guide.
Load Epic details:
get_project(query=epicId)gh issue view {epicId} -R {REPO} --json number,title,bodyRead("docs/tasks/epics/epic-{N}-*/epic.md")Auto-discover configuration:
docs/tasks/kanban_board.md for Team IDCheck existing prioritization:
Glob: docs/market/[epic-slug]/prioritization.md
Create output directory:
mkdir -p docs/market/[epic-slug]/
Output: Epic metadata, output path, existing check result
Objective: Build Story queue with metadata only and prepare rough scoring inputs for all Stories.
Process:
Query Stories from Epic: IF task_provider == "linear":
list_issues(project=Epic.id, label="user-story")
ELSE IF task_provider == "github":
gh api /repos/{O}/{R}/issues/{epic_num}/sub_issues --jq '.[].number'
→ for each: gh issue view {num} -R {REPO} --json number,title,state,labels
→ filter: label "user-story"
ELSE (file mode):
Glob("docs/tasks/epics/epic-{N}-*/stories/*/story.md")
Extract metadata only:
Filter Stories:
Build processing queue:
Output: Story queue (ID + title + minimal context), ~50-80 tokens/Story
Objective: Score all Stories cheaply first, then spend deep research only on candidates where it changes the decision.
Critical: Keep maximum context to one full Story at a time even during deep research.
If a researchgraph layout exists, run local graph checks only for Stories whose priority depends on hypothesis status, goal coverage, benchmark evidence, or implementation readiness. Local graph evidence can change RICE confidence and risk; it does not replace market-size or competitor research.
For each Story, load only enough detail to estimate:
IF task_provider == "linear":
// configured tracker provider: getStory(id=storyId)
ELSE IF task_provider == "github":
gh issue view {storyId} -R {REPO} --json number,title,body,state,labels
ELSE (file mode):
Read("docs/tasks/epics/epic-{N}-*/stories/us{NNN}-*/story.md")
Extract from Story:
Use Story + Epic context to assign:
ReachImpactEffortConfidenceMark one of:
full_research_requiredrough_estimate_okborderline_needs_reviewSend to Pass B only if:
Only for Stories selected in Pass A, run full external research.
WebSearch queries (based on depth):
"[customer problem domain] market size TAM {current_year}"
"[feature type] industry market forecast"
mcp__Ref query:
"[domain] market analysis Gartner Statista"
Extract:
Confidence mapping:
WebSearch queries:
"[feature] competitors alternatives {current_year}"
"[solution approach] market leaders"
Count competitors and classify:
| Competitors Found | Competition Index | Ocean Type |
|---|---|---|
| 0 | 1 | Blue Ocean |
| 1-2 | 2 | Emerging |
| 3-5 | 3 | Growing |
| 6-10 | 4 | Mature |
| >10 | 5 | Red Ocean |
RICE = (Reach x Impact x Confidence) / Effort
Reach (1-10): Users affected per quarter
| Score | Users | Indicators |
|---|---|---|
| 1-2 | <500 | Niche, single persona |
| 3-4 | 500-2K | Department-level |
| 5-6 | 2K-5K | Organization-wide |
| 7-8 | 5K-10K | Multi-org |
| 9-10 | >10K | Platform-wide |
Impact (0.25-3.0): Business value
| Score | Level | Indicators |
|---|---|---|
| 0.25 | Minimal | Nice-to-have |
| 0.5 | Low | QoL improvement |
| 1.0 | Medium | Efficiency gain |
| 2.0 | High | Revenue driver |
| 3.0 | Massive | Strategic differentiator |
Confidence (0.5-1.0): Data quality (from Step 3.2)
Data Confidence Assessment:
For each RICE factor, assess data confidence level:
| Confidence | Criteria | Score Modifier |
|---|---|---|
| HIGH | Multiple authoritative sources (Gartner, Statista, SEC filings) | Factor used as-is |
| MEDIUM | 1-2 sources, mixed quality (blog + report) | Factor ±25% range shown |
| LOW | No sources, team estimate only | Factor ±50% range shown |
Output: Show confidence per factor in prioritization table + RICE range (optimistic/pessimistic) to make uncertainty explicit.
Effort (1-10): Person-months
| Score | Time | Story Indicators |
|---|---|---|
| 1-2 | <2 weeks | 3 AC, simple CRUD |
| 3-4 | 2-4 weeks | 4 AC, integration |
| 5-6 | 1-2 months | 5 AC, complex logic |
| 7-8 | 2-3 months | External dependencies |
| 9-10 | 3+ months | New infrastructure |
| Priority | RICE Threshold | Competition Override |
|---|---|---|
| P0 (Critical) | >= 30 | OR Competition = 1 (Blue Ocean monopoly) |
| P1 (High) | >= 15 | OR Competition <= 2 (Emerging market) |
| P2 (Medium) | >= 5 | - |
| P3 (Low) | < 5 | Competition = 5 (Red Ocean) forces P3 |
full-research or rough-estimateOutput per Story: Complete row for prioritization table with confidence tier
Objective: Create consolidated markdown output.
Process:
Sort results:
Generate markdown:
Save file:
Write: docs/market/[epic-slug]/prioritization.md
Output: Saved prioritization.md
Objective: Display results and recommendations.
Output format:
## Prioritization Complete
**Epic:** [Epic N - Name]
**Stories analyzed:** X
**Time elapsed:** Y minutes
### Priority Distribution:
- P0 (Critical): X Stories - Implement ASAP
- P1 (High): X Stories - Next sprint
- P2 (Medium): X Stories - Backlog
- P3 (Low): X Stories - Consider deferring
### Top 3 Priorities:
1. [Story Title] - RICE: X, Market: $XB, Competition: Blue/Red
### Saved to:
docs/market/[epic-slug]/prioritization.md
### Next Steps:
1. Review table with stakeholders
2. Run ln-300 for P0/P1 Stories first
3. Consider cutting P3 Stories
| Depth | Per-Story | Total (10 Stories) |
|---|---|---|
| quick | 2-3 min | 20-30 min |
| standard | 5-7 min | 50-70 min |
| deep | 8-10 min | 80-100 min |
Time management rules:
Loading pattern:
Memory management:
Position in workflow:
ln-210 (Scope → Epics)
↓
ln-220 (Epic → Stories)
↓
ln-230 (RICE per Story → prioritization table) ← THIS SKILL
↓
ln-300 (Story → Tasks)
Dependencies:
references/tracker_provider_contract.mdDownstream usage:
Structured worker output:
summaryArtifactPath is providedstory-prioritization-worker summary returnedsummaryArtifactPath is providedBasic usage:
ln-230-story-prioritizer epic="Epic 7"
With parameters:
ln-230-story-prioritizer epic="Epic 7: Translation API" depth="deep"
Specific Stories:
ln-230-story-prioritizer epic="Epic 7" stories="US001,US002,US003"
Example output (docs/market/translation-api/prioritization.md):
| Priority | Customer Problem | Feature | Solution | Rationale | Impact | Market | Sources | Competition |
|---|---|---|---|---|---|---|---|---|
| P0 | "Repeat translations cost GPU" | Translation Memory | Redis cache, 5ms lookup | 70-90% GPU cost reduction | High | $2B+ | M&M | 3 |
| P0 | "Can't translate PDF" | PDF Support | PDF parsing + layout | Enterprise blocker | High | $10B+ | Eden | 5 |
| P1 | "Need video subtitles" | SRT/VTT Support | Timing preservation | Blue Ocean opportunity | Medium | $5.7B | GMI | 2 |
Optional reference: load references/meta_analysis_protocol.md only when the user asks for post-run meta-analysis or protocol-formatted run reflection.
Skill type: planning-worker. When requested, run after all phases complete. Output to chat using the planning-worker format.
references/environment_state_contract.mdreferences/storage_mode_detection.mdreferences/research_tool_fallback.md| File | Purpose |
|---|---|
| prioritization_template.md | Output markdown template |
| rice_scoring_guide.md | RICE factor scales and examples |
| research_queries.md | WebSearch query templates by domain |
| competition_index.md | Blue/Red Ocean classification rules |
Version: 2.0.0 Last Updated: 2026-04-05