How the Opportunity Score Framework Calculates Customer Problem Priorities

The Opportunity Score framework calculates customer problem priorities by multiplying normalized Importance scores by the inverse of Satisfaction (1 − Satisfaction), ranking problems that are both critical to customers and currently underserved by existing solutions.

The Opportunity Score framework provides a quantitative method for product teams to prioritize opportunities within an Opportunity Solution Tree (OST). As documented in the phuryn/pm-skills repository, this calculation identifies which customer problems warrant immediate attention by combining two normalized dimensions: perceived importance and current satisfaction levels. The framework originates from Dan Olsen's The Lean Product Playbook and is formally defined in the repository's OST skill documentation.

The Opportunity Score Formula

The calculation rests on a simple linear relationship between two variables. According to the source definition in pm-product-discovery/skills/opportunity-solution-tree/SKILL.md, the formula is:


Opportunity Score = Importance × (1 − Satisfaction)

Both inputs must be normalized to a 0–1 scale before calculation.

Understanding the Input Dimensions

Importance represents how critical the problem is to the customer or the magnitude of impact if solved. A value of 0 indicates irrelevance, rendering the final score zero regardless of other factors, while 1 indicates maximum criticality.

Satisfaction measures how well existing solutions address the problem. A value of 1 means the need is fully met, which drives the Opportunity Score to zero, while 0 indicates complete dissatisfaction with current solutions.

Why the Formula Works

The multiplication creates a natural filter that eliminates two categories of low-value opportunities. Problems with low importance yield low scores regardless of satisfaction status. Conversely, high satisfaction drives the score toward zero even when importance is high, eliminating already-solved problems from consideration. This mathematical relationship surfaces only those opportunities that are simultaneously high-impact and poorly served by existing solutions.

Integrating the Calculation into the OST Workflow

The Opportunity Score operates within a four-step discovery process:

  1. Collect research data from interviews, surveys, and analytics to identify potential opportunities.
  2. Normalize ratings by converting qualitative assessments or 1–5 Likert scales to 0–1 decimal values.
  3. Calculate scores using the formula for each identified problem.
  4. Rank and prioritize opportunities to focus discovery efforts on the highest-value items before solution brainstorming.

Practical Implementation Examples

Python Function

def opportunity_score(importance: float, satisfaction: float) -> float:
    """
    Compute the Opportunity Score.
    Both inputs must be normalized to the range 0–1.
    """
    return importance * (1.0 - satisfaction)

# Example usage

importance = 0.9   # Very important problem

satisfaction = 0.2 # Poorly satisfied today

print(opportunity_score(importance, satisfaction))  # → 0.72

JavaScript Implementation

function opportunityScore(importance, satisfaction) {
  // importance & satisfaction are 0‑1 values
  return importance * (1 - satisfaction);
}

// Example
const score = opportunityScore(0.8, 0.3);
console.log(`Opportunity Score: ${score.toFixed(2)}`); // 0.56

Excel Formula

For spreadsheet-based prioritization, use a single-cell formula:


=A2*(1-B2)

Assuming column A contains Importance and column B contains Satisfaction as decimal values.

Summary

  • The Opportunity Score framework calculates priorities using the formula Importance × (1 − Satisfaction), as defined in SKILL.md within the phuryn/pm-skills repository.
  • Both input dimensions must be normalized to a 0–1 scale to ensure comparability across opportunities.
  • The calculation inherently filters out low-importance problems and already-satisfied needs, surfacing only high-value, underserved opportunities.
  • Implementation requires only simple multiplication, making it accessible across Python, JavaScript, Excel, or any computational environment.

Frequently Asked Questions

What does an Opportunity Score of 0 indicate?

An Opportunity Score of 0 occurs when either Importance equals 0 (the problem is irrelevant to customers) or Satisfaction equals 1 (the problem is fully solved by existing solutions). Both scenarios indicate that the opportunity should not be prioritized for product development.

How should I normalize Importance and Satisfaction ratings?

Convert qualitative ratings or Likert scales (such as 1–5) to decimal values between 0 and 1 by dividing by the maximum scale value. For example, a rating of 4 on a 5-point scale becomes 0.8. This normalization ensures the Opportunity Score formula produces consistent, comparable results across different research instruments.

Can the Opportunity Score formula be modified for weighted calculations?

While the standard framework uses simple multiplication, teams can adapt the calculation for specific contexts. However, modifying the core relationship between Importance and Satisfaction risks undermining the framework's intent to identify problems that are simultaneously critical and underserved. Any modifications should be documented and validated against customer outcomes.

Where is the Opportunity Score documented in the repository?

The exact formula and implementation guidance appear in pm-product-discovery/skills/opportunity-solution-tree/SKILL.md within the phuryn/pm-skills repository. This file cites Dan Olsen's The Lean Product Playbook as the source methodology and provides the complete calculation definition used in Opportunity Solution Tree workflows.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →