Use this when you need to connect a desired product outcome to the opportunities (user needs), solution ideas, and assumption tests that will get you there. Based on Teresa Torres' Continuous Discovery Habits framework. The tree gives the team a shared map of the problem space and helps make informed bets on what to build next.
Before you start: If you have raw research data (interview notes, survey results, support tickets), run
/research-synthesizefirst. Its output -- themes with supporting evidence -- feeds directly into this skill as opportunities. Use/assumption-mapto identify and prioritize assumptions behind your solutions before committing to experiments.
Framework attribution: The Opportunity Solution Tree is from Teresa Torres, Continuous Discovery Habits.
Process
Step 1: Gather inputs
Ask the user:
- Desired outcome — What measurable business or product outcome are you working toward? (e.g., "Reduce onboarding drop-off from 60% to 30%" or "Increase weekly active usage by 20%.")
- Available research — What do you know about users in this space? Provide any of:
/research-synthesizeoutput (themes become opportunities directly)- Interview notes, survey results, or support ticket patterns
- Existing personas or JTBD analyses
- Assumptions the team currently holds
- Current solutions — What has the team already tried or considered? (Prevents re-inventing and grounds the tree in reality.)
- Constraints — Any known limitations? (Technical, budget, timeline, regulatory.)
Step 2: Identify which personas this outcome serves
Before building the tree, prompt the user:
Persona check: Which user personas are affected by this outcome? The tree will be stronger if each opportunity is tagged to a specific persona. If you have defined personas (from
/persona-createor/persona-draft), name them. If not, briefly describe the key user types involved.Different personas experience the same outcome differently. A "reduce onboarding drop-off" outcome might create different opportunities for a "New PM" persona vs. an "Engineering Lead" persona.
Step 3: Map opportunities from research
Extract opportunities (user needs, pain points, unmet desires) from the provided research. If /research-synthesize output was provided, map themes directly to opportunities.
## Opportunity Solution Tree — (Outcome)
**Desired Outcome:** (Measurable outcome statement)
**Date:** (Date)
**Owner:** (User's name/role)
---
### 🎯 Outcome
(Restate the outcome with measurable target and timeframe)
---
### Opportunities
Opportunities are user needs, pain points, or desires discovered through research. Each one is a potential path to the outcome.
#### Opportunity 1: (Opportunity name — concise description of the user need)
- **Persona(s) affected:** (Which personas experience this need)
- **Evidence:** (Where this came from — research theme, quote, data point)
- "(Direct quote or data point)" — Source
- "(Supporting evidence)" — Source
- **Strength of evidence:** Strong / Moderate / Weak
- **Connection to outcome:** (How addressing this need moves the outcome metric)
#### Opportunity 2: (Opportunity name)
- **Persona(s) affected:** (Personas)
- **Evidence:**
- "(Evidence)" — Source
- "(Evidence)" — Source
- **Strength of evidence:** Strong / Moderate / Weak
- **Connection to outcome:** (How this connects)
#### Opportunity 3: (Opportunity name)
(Same format — aim for 3-6 opportunities)
Step 4: Generate solutions per opportunity
For each opportunity, brainstorm solution ideas. Solutions must be tied to specific opportunities, no floating ideas.
Hard rule: Generate a minimum of 3 solutions per opportunity before evaluating any of them. The first idea is never the best idea. When the team says "we can't think of more solutions," use constraints as creative prompts: "What would you build if you had half the budget? Double the timeline? No engineers? Only one day?" Creativity loves constraints.
### Solutions
#### Opportunity 1: (Name)
| Solution | Description | Effort Estimate | Risk Level | Assumption to Test |
|---|---|---|---|---|
| **S1.1:** (Solution name) | (What the team would build or change) | Low/Medium/High | Low/Medium/High | (The riskiest assumption — what must be true for this to work) |
| **S1.2:** (Solution name) | (Description) | Low/Medium/High | Low/Medium/High | (Riskiest assumption) |
| **S1.3:** (Solution name) | (Description) | Low/Medium/High | Low/Medium/High | (Riskiest assumption) |
#### Opportunity 2: (Name)
| Solution | Description | Effort Estimate | Risk Level | Assumption to Test |
|---|---|---|---|---|
| **S2.1:** (Solution name) | (Description) | Low/Medium/High | Low/Medium/High | (Riskiest assumption) |
| **S2.2:** (Solution name) | (Description) | Low/Medium/High | Low/Medium/High | (Riskiest assumption) |
(Continue for each opportunity)
Step 5: Design assumption tests per solution
For each solution's riskiest assumption, propose a lightweight test. Favor speed over precision — the goal is to learn quickly, not to prove definitively.
### Assumption Tests
#### S1.1: (Solution name) → Assumption: "(Riskiest assumption)"
- **Test type:** (Prototype test / Fake door / Interview question / Data analysis / Concierge / A/B test)
- **What to do:** (Specific steps to run this test)
- **Success signal:** (What result would increase confidence in this assumption?)
- **Failure signal:** (What result would decrease confidence?)
- **Effort to run:** (Hours/days — not weeks)
- **Data needed:** (What you need before you can run this test)
#### S2.1: (Solution name) → Assumption: "(Riskiest assumption)"
- **Test type:** (Test type)
- **What to do:** (Steps)
- **Success signal:** (Expected positive result)
- **Failure signal:** (Expected negative result)
- **Effort to run:** (Time)
- **Data needed:** (Prerequisites)
(Continue for each solution's primary assumption)
Step 6: Recommend next experiment
Based on the full tree, recommend which experiment to run first:
### Recommended Next Step
**Run this experiment first:** (Test name — e.g., "S1.1 prototype test")
**Why this one:**
- **Opportunity strength:** (Is the underlying opportunity well-evidenced?)
- **Assumption risk:** (How likely is this assumption to be wrong? Higher risk = more value in testing early.)
- **Speed to learn:** (Can you get a signal in days, not weeks?)
- **Impact if true:** (If the assumption holds, how much does it move the outcome?)
**What you'll learn:** (Regardless of the result — what does this experiment teach you about the tree?)
**If the test succeeds:** (What to do next — build an MVP? Test the next riskiest assumption?)
**If the test fails:** (What to do — pivot to a different solution? Reframe the opportunity? Dig deeper with research?)
Step 7: Present the tree structure
Provide a text-based tree view showing the hierarchy:
### Tree Overview
🎯 (Outcome)
├── 💡 Opportunity 1: (Name) [Persona: X, Y]
│ ├── 🔧 S1.1: (Solution) → Test: (Test type) ⭐ RECOMMENDED FIRST
│ ├── 🔧 S1.2: (Solution) → Test: (Test type)
│ └── 🔧 S1.3: (Solution) → Test: (Test type)
├── 💡 Opportunity 2: (Name) [Persona: Z]
│ ├── 🔧 S2.1: (Solution) → Test: (Test type)
│ └── 🔧 S2.2: (Solution) → Test: (Test type)
├── 💡 Opportunity 3: (Name) [Persona: X]
│ ├── 🔧 S3.1: (Solution) → Test: (Test type)
│ └── 🔧 S3.2: (Solution) → Test: (Test type)
Step 8: Review and validate
Ask the user:
- Outcome check: Is the outcome truly measurable? Could the team agree on whether it's been achieved?
- Opportunity coverage: Are the opportunities comprehensive? Are there user needs you've observed that aren't captured?
- Evidence quality: Are the opportunities grounded in real research, or are some based on assumptions? (Flag assumption-based opportunities — they need research before you invest in solutions.)
- Solution creativity: Did the tree generate solutions you hadn't considered? Or are they all things you already planned?
- Assumption risk: Are you testing the riskiest assumption first? (Teams often test the easiest assumption, not the most important one.)
- Persona coverage: Does every opportunity have at least one persona tag? If an opportunity doesn't clearly serve a persona, it might be a team assumption, not a user need.
Adjust as needed. The tree is a living artifact — update it as you learn from experiments.
Related skills
/research-synthesize— run this first to turn raw research into themes. Themes map directly to opportunities in the tree./interview-plan— if you need more research before building the tree, plan interviews to fill evidence gaps./experiment-design— for assumption tests that need more rigor (especially A/B tests), hand off to/experiment-designfor full experiment planning./persona-draft— if you don't have defined personas, draft them before building the tree. Persona tags on opportunities are far more useful with real personas./jtbd-analysis— if you're framing opportunities as jobs-to-be-done, a JTBD analysis provides the language and structure.
Output location
Present the full tree (opportunities, solutions, assumption tests, recommendation, and tree overview) as formatted text in the conversation. The user copies the tree into their project wiki, Notion, or engagement documentation. The tree should be updated as experiments are run and learning accrues.
Example Output
Input
- Company & context: Meridian Health, a mid-sized regional health system offering a patient portal (web + mobile) for scheduling, lab results, and care messaging
- Desired outcome: Increase the percentage of patients who complete a follow-up appointment booking within 7 days of receiving lab results, from 22% to 45%, over the next two quarters
- Available research: Exit survey data showing 61% of patients who didn't book cited "didn't know what to do next"; 8 patient interviews revealing anxiety around interpreting results and fear of "bothering" their doctor; support ticket analysis showing 340 tickets/month tagged "confused by results"
- Current solutions considered: A generic "Book a follow-up" banner already exists on the results page but has a 3.1% click-through rate; the care team proposed a templated results-explanation PDF
- Constraints: No changes to the EHR (Epic) backend; engineering team of 4 with a 10-week runway; HIPAA compliance required for any messaging feature
Output (abbreviated)
Opportunity Solution Tree — Follow-Up Booking After Lab Results
Desired Outcome: Increase follow-up appointment completion within 7 days of lab results delivery from 22% → 45% Date: 2024-11-04 Owner: Sr. Product Manager, Patient Experience
🎯 Outcome
Increase the percentage of patients who book a follow-up appointment within 7 days of receiving lab results from 22% to 45% by Q2 2025, measured via portal booking event tied to a results-delivery timestamp.
Opportunities
Opportunity 1: Patients don't know whether their results require action
- Persona(s) affected: First-Time Patient (post-diagnosis), Chronic Condition Manager
- Evidence:
- "I saw my numbers were off but I had no idea if that was serious or just like… a little off." — Interview P3
- 61% of non-bookers in exit survey cited "didn't know what to do next" — Exit Survey, Oct 2024
- Strength of evidence: Strong
- Connection to outcome: Patients who can't self-triage won't self-initiate booking; removing this ambiguity is the most direct lever on the funnel
Opportunity 2: Patients feel social friction around contacting their care team
- Persona(s) affected: First-Time Patient, Aging/Low-Digital-Literacy Patient
- Evidence:
- "I didn't want to waste her time if it turned out to be nothing." — Interview P6
- "I kept waiting for them to call me." — Interview P1
- Strength of evidence: Moderate
- Connection to outcome: Reduces patient-initiated booking even when they suspect they should follow up; addressing perceived permission barriers could recover a portion of hesitant non-bookers
Opportunity 3: The booking action is not surfaced at the moment of peak motivation
- Persona(s) affected: All portal users
- Evidence:
- Existing "Book Follow-Up" banner CTR = 3.1% (portal analytics, Sep 2024)
- 340 support tickets/month tagged "confused by results" suggest patients are re-engaging the portal seeking guidance they didn't get at first view — Support Ticket Analysis, Q3 2024
- Strength of evidence: Strong
- Connection to outcome: A low-friction, contextually placed booking prompt tied to results interpretation could directly lift the 7-day booking rate
Solutions
Opportunity 1: Patients don't know whether their results require action
| Solution | Description | Effort Estimate | Risk Level | Assumption to Test |
|---|---|---|---|---|
| S1.1: Plain-language result summary | Auto-generate a 2–3 sentence lay-language interpretation alongside each result, written by care content team and mapped to common result ranges | Medium | Medium | Patients will trust and act on a system-generated plain-language summary rather than waiting for provider confirmation |
| S1.2: Triage indicator badge | Add a color-coded "Action Recommended / No Action Needed / Provider Will Reach Out" badge to each result, set by care team protocol rules | Low | Medium | A simple categorical signal is sufficient to drive booking behavior without causing anxiety or over-triggering calls |
| S1.3: Inline care team video explainer | Short (60–90 sec) pre-recorded video from the ordering provider explaining what the result category means and what to do next | High | High | Patients will watch a video before deciding whether to book, and video will outperform text in driving action |
Opportunity 2: Patients feel social friction around contacting their care team
| Solution | Description | Effort Estimate | Risk Level | Assumption to Test |
|---|---|---|---|---|
| S2.1: Explicit permission prompt | Add copy beneath results stating "Your care team expects to hear from you — booking a follow-up is always appropriate after receiving results" with a direct booking CTA | Low | Low | Normalizing language meaningfully reduces hesitation vs. a generic button |
| S2.2: Asynchronous results Q&A via secure message | Allow patients to submit one free-text question about their results before committing to an appointment; surfaced as a lower-stakes alternative to booking | Medium | Medium | Offering a lower-commitment action increases overall engagement and funnels into booking rather than replacing it |
| S2.3: "Your doctor flagged this for follow-up" personalized trigger | When a provider marks a result as requiring follow-up in Epic, push a personalized portal notification: "Dr. Chen has noted this result warrants a conversation." | Medium | High | Personalized provider attribution is technically feasible via existing Epic webhook and meaningfully outperforms generic prompts |
Opportunity 3: The booking action is not surfaced at the moment of peak motivation
| Solution | Description | Effort Estimate | Risk Level | Assumption to Test |
|---|---|---|---|---|
| S3.1: Contextual inline booking module | Replace static banner with an inline scheduling widget embedded directly in the results detail view, pre-filtered to the ordering provider's availability | Medium | Medium | Patients who intend to book abandon due to navigation friction, not lack of intent — removing navigation steps will lift conversion |
| S3.2: Push notification at results delivery | Send a HIPAA-compliant push notification ("Your results are ready — see what to do next") that deep-links to results + booking | Low | Low | Opt-in rates for portal push notifications are high enough to make this channel impactful at scale |
| S3.3: 72-hour re-engagement nudge | If patient viewed results but did not book, send a single follow-up message at 72 hours: "Still have questions? Your care team has availability this week." | Low | Medium | A single timed nudge increases booking without generating patient complaints about feeling pressured |
Assumption Tests (Selected)
S1.1 → Assumption: "Patients will trust and act on system-generated plain-language summaries"
- Test type: Prototype test (moderated usability)
- What to do: Build a static mockup of 3 results screens with plain-language summaries. Recruit 6 patients via the existing portal research panel. Ask: "After reading this, what would you do next?" Observe whether booking is the first-mentioned action.
- Success signal: 4 of 6 participants say they would book or contact care team unprompted
- Failure signal: Participants express distrust ("I'd want my doctor to explain this") or confusion about the source of the summary
- Effort to run: 3 days (recruiting 2 days, sessions 1 day)
- Data needed: 3 representative results scenarios (normal, borderline, abnormal) from clinical content team
S3.2 → Assumption: "Opt-in rates are high enough to make push notifications impactful at scale"
- Test type: Data analysis + fake door
- What to do: Audit current push notification opt-in rate from portal analytics. If <30%, run a fake door: add "Enable result alerts" prompt post-login for one week, measure click-through without building the full feature.
- Success signal: Opt-in rate ≥40% of active portal users, or fake door CTR ≥25%
- Failure signal: Opt-in rate <20% — channel reach too small to move the outcome metric meaningfully
- Effort to run: 2 days (1 day analytics pull, 1 day fake door implementation)
- Data needed: Current portal push notification opt-in rate from mobile analytics dashboard