opportunity-solution-tree
π―SkillInstallation
npx skills add avelikiy/great_cto --skill opportunity-solution-treeRun it in a terminal; it asks which AI coding tools to install it for (Claude Code, Codex, Cursor and more).
Uses skills.sh Β· Node.js 22.20+
After installing
Ask for related work and the agent uses it on its own, or call it yourself.
/opportunity-solution-treeInstall by hand
Copy the whole skill folder from GitHub to the place below. Copying only SKILL.md can leave out files the skill uses.
Open the skill folder β- This project
.claude/skills/opportunity-solution-tree/ - All projects
~/.claude/skills/opportunity-solution-tree/
These paths are for Claude Code. For other tools, the command above puts it in the right place.
SKILL.md
View on GitHub βBuild an Opportunity Solution Tree (OST) to structure product discovery β map a desired outcome to customer opportunities, possible solutions, and experiments. Based on Teresa Torres' Continuous Discovery Habits. Use when the team is unclear what to build next, when multiple opportunities compete, or before writing a PRD for a complex feature space.
Opportunity Solution Tree (OST)
Structures product discovery by connecting a desired outcome β customer opportunities β solutions β experiments. Prevents jumping to solutions before validating the problem space.
Based on Teresa Torres, Continuous Discovery Habits (2021).
The 4-level structure
βββββββββββββββββββββββ
β DESIRED OUTCOME β β single measurable metric
ββββββββββββ¬βββββββββββ
βββββββββββββββββΌβββββββββββββββββ
ββββββββ΄ββββββ ββββββββ΄ββββββ ββββββββ΄ββββββ
βOpportunity β βOpportunity β βOpportunity β β customer pain/need
β A β β B β β C β
ββββββββ¬ββββββ ββββββββ¬ββββββ ββββββββββββββ
ββββββββ΄ββββ ββββββββ΄ββββ
βββββ΄βββ βββββ΄βββ βββββ΄βββ βββββ΄βββ
βSol 1 β βSol 2 β βSol 3 β βSol 4 β β possible solutions
βββββ¬βββ ββββββββ βββββ¬βββ ββββββββ
ββββββ΄βββββ βββββ΄βββββ
β Exp 1 β β Exp 2 β β fast experiments
βββββββββββ ββββββββββ
Key principles:
- One desired outcome at a time β don't try to solve everything
- Opportunities are customer problems/needs, never solutions
- Generate β₯3 solutions per opportunity before choosing one
- Experiments are the cheapest way to validate an assumption
- The tree is a living document β update weekly as you learn
How to build an OST
Step 1 β Define the desired outcome
Confirm or help the user articulate one measurable outcome at the top of the tree.
Good outcomes:
- "Increase 7-day retention from 20% to 35%"
- "Reduce time-to-first-value from 3 days to 1 day"
- "Increase conversion from free to paid from 2% to 5%"
Bad outcomes (reject these):
- "Build a better onboarding" β that's a solution
- "Improve the product" β unmeasurable
- "Launch feature X" β that's an output
If the user can't state a metric: ask "What would need to be true for you to consider this effort a success?"
Step 2 β Map opportunities from research
From customer interviews, analytics, support tickets, or NPS feedback, identify 3β7 customer opportunities (pain points, unmet needs, desires).
Frame each from the customer's perspective:
- β "I struggle to understand which plan is right for me"
- β "I can't find past purchases quickly"
- β "I feel anxious about whether my data is safe"
- β "Users need a better search" β that's a solution
Prioritise using Opportunity Score (Dan Olsen, The Lean Product Playbook):
Opportunity Score = Importance Γ (1 β Satisfaction)
Survey customers: rate each need on Importance (0β1) and current Satisfaction (0β1).
- High Importance + Low Satisfaction = highest score = best opportunity
- Plot on Importance vs Satisfaction chart β upper-left quadrant is the sweet spot
Step 3 β Generate solutions (diverge before converging)
For each top-priority opportunity, brainstorm β₯3 solutions from three angles:
- PM perspective: What UX/product change addresses this?
- Designer perspective: What interaction or visual change?
- Engineer perspective: What technical approach? (often the most creative)
Rules:
- Don't commit to the first idea β compare and contrast
- "Best ideas often come from engineers" β include technical solutions
- Solutions should be independent (different solutions for the same opportunity)
Step 4 β Design experiments
For the most promising solutions, design 1β2 fast experiments:
| Experiment | Assumption tested | Method | Success metric | Effort |
|---|---|---|---|---|
| <A/B test / fake door / prototype / interview> | <metric + threshold> | <1d / 3d / 1w> |
Assumption categories (prioritise in this order):
- Value: Will users want this? (most important to test first)
- Usability: Can users figure it out?
- Feasibility: Can we build it?
- Viability: Does the business case work?
Cheap experiment types:
- Existing product: A/B test, fake door, prototype, user interview, data analysis
- New product: XYZ hypothesis ("At least X% of Y will do Z"), landing page, concierge MVP
Step 5 β Visualise and document
Write docs/discovery/OST-<outcome-slug>.md:
# Opportunity Solution Tree: <Outcome>
**Desired outcome**: <metric> from <current> to <target> by <date>
**Last updated**: <date>
## Opportunity map
| # | Opportunity | Importance | Satisfaction | Opportunity Score | Priority |
|---|------------|-----------|-------------|-------------------|---------|
| A | <customer need> | 0.8 | 0.3 | 0.56 | 1st |
| B | <customer need> | 0.7 | 0.6 | 0.28 | 3rd |
| C | <customer need> | 0.6 | 0.2 | 0.48 | 2nd |
## Solutions for top opportunities
### Opportunity A: <name>
| Solution | Description | Experiment |
|---------|-------------|-----------|
| Sol A1 | <description> | <experiment> |
| Sol A2 | <description> | <experiment> |
| Sol A3 | <description> | <experiment> |
## Active experiments
| Experiment | Assumption | Status | Result |
|-----------|-----------|--------|--------|
| <name> | <assumption> | Running / Done | <result or pending> |
## Learning log
- <date>: Discovered <insight> from <source>. Killed <solution> / promoted <opportunity>.
Integration with /spec prd
Once an opportunity is validated and a solution is chosen:
β Run /spec prd with the validated opportunity as the problem statement
β The OST's Opportunity Score data feeds directly into PRD Β§3 (Success Metrics) and Β§4 (Target Users)
Anti-patterns
β Opportunity = solution in disguise: "Users need a search bar" is a solution. "Users can't find past purchases" is an opportunity.
β Skipping divergence: Picking the first solution for each opportunity. Always generate β₯3 before choosing.
β Experiments that take >1 week: If it takes longer than a week to learn, it's not an experiment β it's a feature.
β Updating the tree once: OST is a continuous practice. Update weekly as you learn.
β Too many outcomes: One outcome per tree. If you have multiple outcomes, run multiple trees or pick the highest priority.
More from this repository6
An open-source engineering OS for Claude Code that orchestrates 51 specialist agents including architect, PM, senior-dev, code-reviewer, QA, security, and DevOps roles. Covers 16 domain packs (voice-AI, clinical, HR-AI, fintech, and more) as a local-first alternative to Devin for solo CTOs.
Skill
Skill
Skill
Skill
A tool that runs Claude Code work in clear stages with reviews and checks, and can try the same with Codex. A local board shows your tasks, what ran, project documents and usage in one place.