Your country

Tools that support it use your country for local currency, number formats, units and paper size. Your choice is saved only in this browser.

Type a name or a two-letter code. Use the up and down arrow keys to move through the countries, Enter to choose one and Escape to close.

UI/UX Design  Module 3 – From research to insight

Framing problems and choosing what to solve

Write problem statements and HMW questions that leave room, test risky assumptions first, prioritise with impact, RICE and Kano, and set metrics with HEART.

  • Intermediate
  • 20 minutes
  • Examples run with Node.js 24.21.0, Python 3.14.8 and Pyodide 314.0.7
  • By MySmartCoPilot
Free lesson, Pro answers: 20 minutes
Free: the whole lesson. With a pass: the model answers to its 2 interview questions.

What you will learn

  • Write problem statements and How might we questions that leave the solution space open
  • Map assumptions by importance and evidence and plan a test for the riskiest ones first
  • Compare impact-effort, RICE, Kano and HEART and choose one for a prioritisation decision
  • Set goals, signals and metrics for a design change with HEART

Before you start

What you’ll learn · Before you start

What you will learn

  • Write problem statements and How might we questions that leave the solution space open
  • Map assumptions by importance and evidence and plan a test for the riskiest ones first
  • Compare impact-effort, RICE, Kano and HEART and choose one for a prioritisation decision
  • Set goals, signals and metrics for a design change with HEART

Before you start

On this page

MealBox’s quarterly workshop ended with 12 ideas on a board, and the CEO wants 3 of them shipped before the quarter closes. Prioritisation now has to turn into a conversation about numbers nobody has measured yet, and about the risk of spending a quarter on the wrong three. Four tools help, in the order a team usually needs them: write the problem worth solving, map the beliefs inside it, score what is left, and name the signals that say whether a shipped answer worked.

Six invented MealBox opportunities thread through: a pause-flow, a served-area check, a skip-day control, a meal swap, a referral and a nutrition label. You will write problem statements from a few insights, place assumptions on an importance-by-evidence grid, score the opportunities with RICE and watch one halved estimate reorder the top of the list, and finish with a HEART worksheet that turns a goal into measurable signals.

A problem statement names three things, in one sentence

A problem statement: A one-sentence summary of a problem to solve, naming the user, their need and the evidence that the need is real; written before any solution is chosen. is a short sentence with three parts: the user, their need and the evidence behind it. Each of the three is a test an idea has to pass before any quarter is spent on it, so a statement missing one of them is unfinished.

Take MealBox’s pause-flow. “People cannot pause a subscription” is a complaint, not a statement. “New subscribers who travel in week one need a way to skip a delivery, so that a short trip does not cost them a plan (eight of eight cancellers interviewed mentioned a trip)” is the finished shape. The user is named (new subscribers who travel), the need is named (skip a delivery), and the evidence is named (eight of eight cancellers interviewed). A reader can disagree about any one of the three, and that is exactly what makes the sentence useful.

Part What it names A quick test it is finished
User Who has the need, specifically A different team could picture them
Need What they want to do or avoid It is a goal, not a solution
Evidence Why the need is believed to be real It cites research, not a hunch

A how might we: A short, open question in the form 'How might we...' that frames a design task without naming a particular solution, so several answers remain possible. question opens the problem into answers without smuggling one of them in. Its three words carry the frame: “how” says we do not know yet, “might” says we are not committing, “we” says a team will go after it. “How might we let subscribers skip a week they will be away?” leaves room for ten answers; “how might we add a Pause button to the plan screen?” leaves room for one, and the button is already chosen before any research is read.

Watch for the solution words in HMW questions

Button, screen, popup, email, notification and modal are the words that most often sneak the answer into the question. If a word in your HMW already names what the team would build, rewrite the question until it could still have ten plausible answers.

Three insights from invented interviews, with the problem statement each one supports and a HMW that still has room:

Insight (research) Problem statement from it HMW that still has room
8 of 8 cancellers interviewed travelled in week one (i1) New subscribers who travel in week one need a way to skip a delivery (i1). How might we let subscribers skip a week they will be away?
Pausing is buried; cancelling is one tap (i3) Subscribers who want a break need pausing to be as reachable as cancelling (i3). How might we make pausing as reachable as cancelling?
Reminders never say the next date (i4) Subscribers who count on a day cannot see which day comes next (i4). How might we show the next delivery date in every reminder?

Key idea

A problem statement names a user, a need and the evidence behind it; a HMW question opens that problem into answers without naming what the team will build.

Checkpoint

Check: Problem statements and HMW questions

  1. Question 1 of 2 Which three parts does a finished problem statement name?

    Choose one answer.

    Show the answer: Question 1 of 2

    Answer: A user, a need and the evidence behind the need

    "New subscribers who travel in week one need a way to skip a delivery, so that a short trip does not cost them a plan (eight of eight cancellers interviewed mentioned a trip)" names the user, the need and the evidence; drop any one and the sentence stops being a test an idea has to pass.

  2. Question 2 of 2 Which "How might we" question still leaves the solution space open?

    Choose one answer.

    Show the answer: Question 2 of 2

    Answer: How might we let subscribers skip a week they will be away?

    Keep the HMW at the level of what the user needs to do, not what the team would build; solution words such as button, screen, popup, email and notification are the ones that smuggle a drawing into the question.

Map your assumptions before you score anything

Every problem statement rests on beliefs the team has not tested yet. assumption mapping: A grid that places beliefs by how important they are to a plan and how strong the evidence for them is, used to decide which ones to test first., a common workshop technique, places those beliefs on two axes: how important the belief is to the plan (vertical) and how strong the evidence for it is (horizontal). The four quadrants decide what the team does next with each belief.

Top-left (high importance, weak evidence) is the quadrant to test first, because a plan rests on it and no measurement supports it yet. Top-right (high importance, strong evidence) is known risk: build on it, with a check in beta that the pattern still holds. Bottom-right (low importance, strong evidence) is given: no test earns its cost. Bottom-left (low importance, weak evidence) is ignore-for-now: tests go to top-left first, and come back only when a different plan surfaces.

Step through four invented MealBox beliefs behind the pause-flow plan, each landing in the quadrant its importance and evidence put it:

Interactive · step by step Four assumptions on an importance-by-evidence grid Step through four MealBox beliefs. Each lands where its importance and the evidence put it.
Four assumptions on an importance-by-evidence grid, step 5 of 5. Showing Monthly billing, Pause reach, Travel cancels, Nutrition info. In focus: Nutrition info.Monthly billingPause reachTravel cancelsNutrition info

The drawing shows the whole scene; its 5 steps are listed below.

Every step as text
  1. Four beliefs to place. The MealBox team has four beliefs behind its pause-flow plan. The grid places each one by two questions: how important the belief is to the plan (top row high, bottom row low) and how strong the evidence for it already is (left column weak, right column strong). The top-left square is where the risky work lives, because an important belief with weak evidence is the one that can derail a plan.
  2. 1: billing preference. The first belief sits bottom-right. "Subscribers prefer monthly billing" is supported by months of billing data: 92 per cent of plans in the billing export were monthly, so the evidence is strong. For the pause-flow plan the belief is low importance: pausing works the same whether billing is weekly or monthly, so no test is needed.
  3. 2: pause reaches cancellers. The second belief sits top-left. "A visible pause control reaches the subscribers who would otherwise cancel" is important to the plan and weakly evidenced: nobody knows yet which subscribers see the control. Top-left is the quadrant to test first, because the plan depends on it and no measurement supports it. A five-user prototype test is the next step.
  4. 3: travel causes cancels. The third belief sits top-right. "Travel in the first week drives new-subscriber cancellations" is important to the plan and backed by eight of eight cancellers interviewed mentioning a trip. Top-right is known risk: the team can build on it, with a check in beta that the pattern holds for a wider sample.
  5. 4: nutrition info. The fourth belief sits bottom-left. "Nutrition information matters more than meal swaps" is weakly evidenced and low importance for the pause-flow plan. Bottom-left is the ignore-for-now quadrant: tests go to the top-left first and come back to this one only when a different plan surfaces.

The payoff of the grid is in the top-left square. On this plan the top-left belief is “a visible pause control reaches the subscribers who would otherwise cancel”, and it decides whether the whole quarter’s work is worth doing. A five-user prototype test of a pause control on the MealBox plan page settles the question in two days; without the test the team could sketch, build and ship a flow that nobody meets at the moment they would have left.

Write the test next to the belief, not later

Beside every top-left belief, write the smallest test that could prove it wrong: who you will show the prototype to, on which task, and what outcome would change your mind. The test turns the belief into a decision anyone on the team can read.

The GOV.UK Service Manual asks for the same discipline when it tells teams that an opinion or suggestion which does not come from users is an assumption, one that has “to be proven by doing research” (Learning about users and their needs, Service Manual). The grid is one way to pick which to test first.

Checkpoint

Check: Importance-by-evidence assumptions

  1. One question On an importance-by-evidence grid, which quadrant does a team test first?

    Choose one answer.

    Show the answer: One question

    Answer: High importance, weak evidence (top-left)

    The top-left square is where the risky work lives. A five-user prototype can prove or kill the belief in two days, and the team either builds on it or walks away before a quarter is spent.

Prioritise with impact-effort, RICE and Kano, honestly

Once the top-left beliefs are tested, several opportunities are still competing for the quarter. Four tools help a team compare them, each answering a different question. The table below walks the four against the questions a team usually has:

Interactive · answer and compare Which prioritisation tool fits the question? Answer the three questions about your decision; the table then says which tools still fit.
How much time do you have for the decision?
Where in the loop are you?
Do you want one score or a conversation?

Answer the questions above: the table then marks what fits your case and says why the rest does not.

Four prioritisation tools against estimation effort, team maturity and the kind of question you have.
Prioritisation tool Estimation effort Team maturity needed Fit for the question
Impact-effort grid What it answers: what to start on today Good two estimates per item in a workshop; cheap Good a new team can produce it in an afternoon Mixed picks the cheap-and-high; thin on reach and confidence
RICE What it answers: best score for the quarter Mixed four estimates per item; label every one an estimate Mixed needs a team that will not inflate its own guesses Good compares opportunities for the quarter with one score
Kano What it answers: qualities that keep or delight users Poor a survey of two questions per quality, then analysis Mixed needs a researcher who can read the response pairs Good separates must-be qualities from delight features
HEART What it answers: did a shipped change help users Good no scoring; names signals and the metrics to collect Mixed needs analytics and research to make the metrics real Good answers whether a shipped change moved the right numbers
How the answers decide
  • “How much time do you have for the decision?” An afternoon: rules out Kano. Kano needs a survey of two questions per quality and analysis of the response pairs, which an afternoon cannot carry. Keep it on the shelf for a planned round of research instead.
  • “Where in the loop are you?” After a change has shipped: rules out Impact-effort grid, RICE and Kano. Impact-effort, RICE and Kano are tools for choosing what to work on. After a change has shipped the question becomes whether it moved the right numbers, which HEART is built for.
  • “Where in the loop are you?” Before anything is built and “Do you want one score or a conversation?” One number to compare items: adds a caveat to RICE. RICE gives one comparable score across opportunities, which is both its point and its risk. Label the four inputs as estimates and record who guessed each one, so a later disagreement finds the number.
  • “Do you want one score or a conversation?” A talk about signals and risks: adds a caveat to Impact-effort grid and HEART. Impact-effort invites a workshop talk about effort against value; HEART invites one about signals and metrics for a shipped change. Neither hands back a single ranked number.

An impact-effort grid works for a workshop: two estimates per item, in an afternoon, and the top-right corner wins. It is cheap and honest about being cheap. RICE score: Intercom's opportunity score for prioritisation: reach x impact x confidence / effort, with each input written as an estimate. (reach × impact × confidence / effort), the Intercom formula, pays for its extra inputs by comparing opportunities on one score, which is what a quarter-ahead decision usually asks for. The six MealBox opportunities below are scored on invented reach, impact, confidence and effort estimates, so that the ranks and the shift when one estimate is halved come from the formula alone:

RICE for six MealBox opportunities, with one estimate halved Python · rice-and-heart/rice_and_heart.py
"""
MealBox opportunities: RICE scores and a HEART worksheet.

Six invented MealBox opportunities from a workshop are scored with RICE
(reach x impact x confidence / effort), the Intercom formula. One reach
estimate is then halved to show how a small change in a number nobody
has measured yet reorders the top of the list. A HEART worksheet
(Rodden, Hutchinson and Fu, CHI 2010) for the top opportunity closes
the program, by turning one goal into signals and measurable metrics.

Numbers invented for this lesson.
"""


def rice(reach: float, impact: float, confidence: float, effort: float) -> float:
    """RICE = Reach x Impact x Confidence / Effort (Intercom)."""
    return reach * impact * confidence / effort


opportunities = {
    "pause-flow": {
        "label": "Pause a subscription for a week",
        "reach": 4000, "impact": 2.0, "confidence": 0.8, "effort": 2.0,
    },
    "served-area-check": {
        "label": "Check served area before plan choice",
        "reach": 5000, "impact": 1.0, "confidence": 0.5, "effort": 1.0,
    },
    "skip-day": {
        "label": "Skip one delivery day",
        "reach": 3000, "impact": 1.0, "confidence": 0.7, "effort": 1.0,
    },
    "meal-swap": {
        "label": "Swap one meal for an alternative",
        "reach": 2500, "impact": 0.5, "confidence": 0.6, "effort": 0.5,
    },
    "nutrition-info": {
        "label": "Show nutrition info beside each meal",
        "reach": 3000, "impact": 0.5, "confidence": 0.3, "effort": 1.0,
    },
    "referral": {
        "label": "Refer a friend, both get a week off",
        "reach": 1500, "impact": 1.0, "confidence": 0.4, "effort": 1.5,
    },
}


def rank(opps: dict) -> list:
    scored = [
        (k, round(rice(v["reach"], v["impact"], v["confidence"], v["effort"])))
        for k, v in opps.items()
    ]
    return sorted(scored, key=lambda p: p[1], reverse=True)


def print_table(name: str, order: list, opps: dict) -> None:
    print(f"=== {name} ===")
    print(f"{'rank':<6}{'opportunity':<20}{'RICE':>6}  reach  impact  confidence  effort")
    for i, (k, score) in enumerate(order, start=1):
        o = opps[k]
        print(
            f"{i:<6}{k:<20}{score:>6}  {o['reach']:>5}  {o['impact']:>6}"
            f"  {o['confidence']:>10}  {o['effort']:>6}"
        )
    print()


def main() -> None:
    print("MealBox opportunities: RICE scores\n")
    original = rank(opportunities)
    print_table("Original estimates", original, opportunities)

    print("Sensitivity: halve one reach estimate")
    print("  pause-flow reach 4000 -> 2000 (what if only half the subscribers see it?)\n")
    adjusted = {k: dict(v) for k, v in opportunities.items()}
    adjusted["pause-flow"]["reach"] = 2000
    sensitised = rank(adjusted)
    print_table("Adjusted estimates", sensitised, adjusted)

    before = {k: i + 1 for i, (k, _) in enumerate(original)}
    after = {k: i + 1 for i, (k, _) in enumerate(sensitised)}
    moved = [k for k in before if before[k] != after[k]]
    print("Rank changes after halving pause-flow reach:")
    for k in moved:
        print(f"  {k}: rank {before[k]} -> {after[k]}")
    print()

    print("HEART worksheet for the top opportunity (pause-flow)\n")
    heart = [
        ("Retention", "subscribers keep their plan through busy weeks",
         "pauses taken instead of cancellations",
         "90-day retention of pausers vs non-pausers"),
        ("Engagement", "the pause flow fits how people travel",
         "pauses taken by active subscribers",
         "pause-use rate: pauses per subscription per quarter"),
        ("Task success", "a pause is reachable and clear",
         "people who find and complete a pause",
         "task success rate on the first-time pause task"),
    ]
    print(f"{'HEART':<14}{'goal':<48}{'signal':<40}metric")
    for cat, goal, signal, metric in heart:
        print(f"{cat:<14}{goal:<48}{signal:<40}{metric}")

    print("\nAccessibility and consumer-protection rules are constraints, not features to score.")


if __name__ == "__main__":
    _ = main()

Output

MealBox opportunities: RICE scores

=== Original estimates ===
rank  opportunity           RICE  reach  impact  confidence  effort
1     pause-flow            3200   4000     2.0         0.8     2.0
2     served-area-check     2500   5000     1.0         0.5     1.0
3     skip-day              2100   3000     1.0         0.7     1.0
4     meal-swap             1500   2500     0.5         0.6     0.5
5     nutrition-info         450   3000     0.5         0.3     1.0
6     referral               400   1500     1.0         0.4     1.5

Sensitivity: halve one reach estimate
  pause-flow reach 4000 -> 2000 (what if only half the subscribers see it?)

=== Adjusted estimates ===
rank  opportunity           RICE  reach  impact  confidence  effort
1     served-area-check     2500   5000     1.0         0.5     1.0
2     skip-day              2100   3000     1.0         0.7     1.0
3     pause-flow            1600   2000     2.0         0.8     2.0
4     meal-swap             1500   2500     0.5         0.6     0.5
5     nutrition-info         450   3000     0.5         0.3     1.0
6     referral               400   1500     1.0         0.4     1.5

Rank changes after halving pause-flow reach:
  pause-flow: rank 1 -> 3
  served-area-check: rank 2 -> 1
  skip-day: rank 3 -> 2

HEART worksheet for the top opportunity (pause-flow)

HEART         goal                                            signal                                  metric
Retention     subscribers keep their plan through busy weeks  pauses taken instead of cancellations   90-day retention of pausers vs non-pausers
Engagement    the pause flow fits how people travel           pauses taken by active subscribers      pause-use rate: pauses per subscription per quarter
Task success  a pause is reachable and clear                  people who find and complete a pause    task success rate on the first-time pause task

Accessibility and consumer-protection rules are constraints, not features to score.

Recorded with Python 3.14.8 on macOS 26 arm64. To run it yourself: mise exec python@3.14.8 -- python3 rice_and_heart.py

The original ranking puts pause-flow first with a RICE of 3,200, served-area-check second with 2,500, and skip-day third with 2,100. Halving the reach on pause-flow — “what if only half the subscribers actually see the control?” — drops its score to 1,600, served-area-check becomes first, and pause-flow falls to third. One estimate that nobody has measured yet reorders the top three. The point of running the sensitivity is not to pick the “right” number; it is to show which items are robust to a bad guess and which are not.

Treating four estimates as four measurements

RICE prints a score to the nearest unit, which looks measured. Each of its four inputs is a guess until a research round or an experiment makes it less of one, so a product manager who prefers pause-flow can “win” the comparison by nudging reach, impact or confidence a little upward. The fix is a shared record of who estimated each number and what evidence they used, so a disagreement later finds the input, not the answer.

The Kano model: A way of sorting product qualities into must-be, one-dimensional and attractive, from Kano and colleagues (1984), to separate qualities a single score blurs. (Kano and colleagues, Journal of the Japanese Society for Quality Control, 1984) asks a different question: which qualities users take for granted, so that missing them causes dissatisfaction while having them earns no credit (must-be qualities), which raise satisfaction in step with how well they are delivered (one-dimensional qualities), and which delight users beyond what they would ask for (attractive qualities). A served-area check is a must-be quality on a lunch service: the service either delivers to the address or it does not, and no amount of charm makes up for it. A referral programme is attractive at best. Kano separates qualities a RICE score blurs.

One rule beats all four tools: accessibility and the law are constraints, not features to score. A design that fails WCAG 2.2 or India’s dark-pattern rules is not shipped, whatever the RICE board says, so these rules go above the prioritisation table rather than inside it.

Checkpoint

Check: Impact-effort, RICE and Kano

  1. One question A product manager at MealBox nudges "reach" on their preferred opportunity upward and its RICE score becomes the top one. Which steps change how estimates are kept, not who wins the argument? (Choose all that apply.)

    Choose every answer that is right.

    Show the answer: One question

    Answer:

    • Record who estimated each number and the evidence they used
    • Run a sensitivity test by halving or doubling the softest input
    • Label every input "estimate" on the board, so the score looks less measured

    RICE is a conversation tool. Writing down the four estimates and who made them, running a sensitivity test and labelling the inputs for what they are stops the formula from pretending to be a measurement.

Set goals, signals and metrics with HEART

Once a change ships, the question becomes whether it moved the right numbers. The HEART framework: Rodden, Hutchinson and Fu's five user-experience categories (Happiness, Engagement, Adoption, Retention, Task success), paired with Goals-Signals-Metrics to measure a design change. (Rodden, Hutchinson and Fu, CHI 2010) names five categories a design can be measured in: Happiness, Engagement, Adoption, Retention and Task success. The authors pair the categories with a discipline they call Goals-Signals-Metrics: start from the goal a design change is for, then name the user behaviour that would be a signal of progress, and only then pick the metric that counts it.

The script above printed a HEART worksheet for the pause-flow opportunity, in three rows. The team chose Retention, Engagement and Task success as the categories that fit the change:

HEART category Goal Signal Metric
Retention subscribers keep their plan through busy weeks pauses taken instead of cancellations 90-day retention of pausers vs non-pausers
Engagement the pause flow fits how people travel pauses taken by active subscribers pause-use rate: pauses per subscription per quarter
Task success a pause is reachable and clear people who find and complete a pause task success rate on the first-time pause task

Reading the worksheet left to right stops two common mistakes. A team that writes a metric first (“pause-use rate”) rarely stops to ask what the number is a signal of, or which goal it serves, so the number drifts away from the decision it was for. A team that writes a goal first (“subscribers keep their plan”) sometimes names a metric that is a signal of a different goal, so the measurement cannot settle anything. Walking from goal to signal to metric keeps the chain intact.

Not every HEART row is worth collecting. The CHI paper’s own advice is to skip categories that are not meaningful to the change at hand, which is why Happiness and Adoption are missing from this worksheet. A pause-flow does not move survey happiness much, and nobody adopts “pause” in the way they adopt a new product. A row that would be guessed, or a metric nobody can collect, is cut; three rows that measure real behaviour are better than five that paper over nothing.

Key idea

HEART ties a design change to its own measurement: pick the categories that fit the change, then walk goal to signal to metric, so the number produced can settle the question the change was shipped to answer.

Checkpoint

Check: HEART and goals-signals-metrics

  1. One question You are writing a HEART row for the pause-flow. In which order do you fill it?

    Choose one answer.

    Show the answer: One question

    Answer: Goal first, then signal, then metric

    Walking goal to signal to metric is the discipline the CHI 2010 paper calls Goals-Signals-Metrics, and it keeps the three cells of a HEART row tied to one another.

Practise

Five invented MealBox insights, two problem statements, six HMW questions and a HEART table for one goal: write them in the exercise and watch the sample tests check the shape and the rules.

Exercise · Easy · Python

Problem statements, HMW questions and a HEART table

The MealBox team has five insights from eight invented interviews. From them, write:

  1. Two problem statements. Each sentence names
    • a user (words such as subscriber(s), customer(s), user(s), parent, elderly, member(s), resident(s) count);
    • a need (words such as need, want, cannot, struggle, require, must count);
    • the evidence behind it, by citing at least one insight id in the form i1, i2, ... (or including the word evidence).
  1. Six "How might we" questions. Each must
    • start with the exact phrase How might we (same case, trailing space);
    • avoid these solution words anywhere in the question (as whole words, any case): button, screen, popup, email, notification.
  1. A HEART table for one goal of your choice from the insights. The table is heart_rows, a list of at least three rows. Each row is a dict with the keys goal, signal and metric, all non-empty strings.

The insights are provided in the starter as insights. Edit problem_statements, hmw_questions and heart_rows in solution.py.

Sample tests check the shape and the three rules above. The reference solution writes two problem statements, six HMW questions and three HEART rows (goal, signal, metric) for the pause-flow opportunity.

Starter code · solution.py

"""
Prioritisation workshop for MealBox: write problem statements, HMW questions
and a HEART table from five insights.

The insights come from eight invented MealBox interviews. Fill in
`problem_statements`, `hmw_questions` and `heart_rows` below.
"""

insights = [
    {"id": "i1",
     "text": "Travel in the first week leaves new subscribers with meals they cannot eat.",
     "participants": ["P2", "P5"]},
    {"id": "i2",
     "text": "Prices are easy to find; delivery windows are not.",
     "participants": ["P1", "P3"]},
    {"id": "i3",
     "text": "Pausing a week is buried; cancelling is one tap.",
     "participants": ["P2", "P6", "P7"]},
    {"id": "i4",
     "text": "The next-delivery date is missing from reminders.",
     "participants": ["P4", "P6"]},
    {"id": "i5",
     "text": "Elderly subscribers read menu photos before any text.",
     "participants": ["P8"]},
]

# TODO: Write 2 problem statements from the insights. Each statement names
# the user, the need and the evidence (an insight id such as "i1").
problem_statements: list[str] = [
    # "New subscribers who travel in week one need a way to skip a delivery "
    # "without cancelling the plan (i1).",
]

# TODO: Write 6 "How might we" questions that open the solution space.
# Each must start with "How might we " and must not contain any of these
# words as whole words: button, screen, popup, email, notification.
hmw_questions: list[str] = [
    # "How might we let new subscribers skip a delivery before travelling?",
]

# TODO: Fill a HEART table for ONE goal of your choice from the insights.
# At least 3 rows, each a dict with keys: goal, signal, metric.
heart_rows: list[dict[str, str]] = [
    # {"goal": "subscribers keep their plan through busy weeks",
    #  "signal": "pauses taken instead of cancellations",
    #  "metric": "pause-use rate per subscription per quarter"},
]
The sample tests · test_solution.py
"""Sample tests for the hmw-and-heart exercise."""

import re

from solution import problem_statements, hmw_questions, heart_rows


USER_KEYWORDS = {
    "subscriber", "subscribers", "customer", "customers",
    "user", "users", "parent", "parents", "elderly", "member",
    "members", "resident", "residents", "person", "people",
}
NEED_KEYWORDS = {
    "need", "needs", "want", "wants", "require", "requires",
    "cannot", "struggle", "struggles", "must",
}
EVIDENCE_PATTERN = re.compile(r"\bi\d+\b|\bevidence\b|\binterview", re.I)
HMW_PATTERN = re.compile(r"^How might we ")
BANNED_HMW = ("button", "screen", "popup", "email", "notification")


def _words(text: str) -> list[str]:
    return re.findall(r"[a-zA-Z]+", text.lower())


def test_two_problem_statements():
    assert len(problem_statements) == 2, (
        f"Write exactly 2 problem statements, got {len(problem_statements)}"
    )


def test_problem_statements_name_a_user():
    for s in problem_statements:
        assert any(w in USER_KEYWORDS for w in _words(s)), (
            f"'{s}' names no user "
            f"(try subscriber, user, parent, elderly, ...)"
        )


def test_problem_statements_name_a_need():
    for s in problem_statements:
        assert any(w in NEED_KEYWORDS for w in _words(s)), (
            f"'{s}' names no need "
            f"(try need, want, cannot, struggle, must, ...)"
        )


def test_problem_statements_cite_evidence():
    for s in problem_statements:
        assert EVIDENCE_PATTERN.search(s), (
            f"'{s}' cites no evidence "
            f"(name an insight id like i1, or write 'evidence' or 'interview')"
        )


def test_six_hmw_questions():
    assert len(hmw_questions) == 6, (
        f"Write exactly 6 HMW questions, got {len(hmw_questions)}"
    )


def test_hmw_prefix():
    for q in hmw_questions:
        assert HMW_PATTERN.match(q), (
            f"'{q}' does not start with 'How might we '"
        )


def test_hmw_no_solution_words():
    for q in hmw_questions:
        lower = q.lower()
        hit = [w for w in BANNED_HMW if re.search(rf"\b{w}\b", lower)]
        assert not hit, (
            f"'{q}' contains banned solution words: {hit}"
        )


def test_heart_rows_count():
    assert len(heart_rows) >= 3, (
        f"Write at least 3 HEART rows, got {len(heart_rows)}"
    )


def test_heart_row_shape():
    required = {"goal", "signal", "metric"}
    for row in heart_rows:
        missing = required - set(row.keys())
        assert not missing, f"Row {row} is missing keys: {missing}"
        for k in required:
            assert row[k].strip(), f"Row {row}: {k} is empty"
A hint

Start with one problem statement for insight i1. Name a user (for example new subscribers who travel), say what they need (skip a delivery), and cite the insight id in the sentence as (i1).

For the HMW questions, write what the team could ask, not what they could build. Each starts with the exact phrase How might we and leaves the solution open: ten different sketches could answer "How might we let subscribers skip a week?", while "How might we add a Pause button?" has one answer baked in before anyone sketches.

The sample tests run on this device, in your browser (Pyodide): nothing is sent to mysmartcopilot.com. The first run downloads Python (about 13.5 MB), which is kept for the next runs. A check in your browser is feedback for you, not proof that the code is right for every input.

Then take the lesson’s questions. They start on whichever concept you have answered least well so far, and each wrong choice says the slip behind it:

Practice that adapts to you

Practise this lesson

10 questions about 4 ideas of this lesson. Each answer is explained at once, and what you get right is kept in this browser.

  1. Question 1 of 10 "People cannot pause a subscription." Which part of a problem statement is missing from this sentence?

    Choose one answer.

    Show the answer: Question 1 of 10

    Answer: The user, specifically enough that another team could picture them

    Replace "People" with the users the research actually names, such as "new subscribers who travel in week one", and the sentence starts to point at a decision. Add the need and the evidence next, in the same sentence.

  2. Question 2 of 10 Insight i4 from the Ward Desk research says that residents who report a problem never see the next step. Which of these problem statements uses the three parts and leaves room for several solutions?

    Choose one answer.

    Show the answer: Question 2 of 10

    Answer: Residents who report a complaint need to see the next step, so they do not call to check (i4).

    Rewrite a solution-shaped sentence as a problem-shaped one: who is doing what, what they need and the evidence that the need is real. The team can then compare a tracking page, an SMS and a letter against the same need.

  3. Question 3 of 10 A belief lands top-right (high importance, strong evidence). What does the team do with it?

    Choose one answer.

    Show the answer: Question 3 of 10

    Answer: Build on it, with a check in beta that the pattern still holds in a wider sample

    Known risk is still risk. Build on the belief, name the beta check that would surface a change, and let the team spend its research on the top-left square where the plan actually hangs.

  4. Question 4 of 10 A belief sits in bottom-left (low importance, weak evidence). When does the team come back to it?

    Choose one answer.

    Show the answer: Question 4 of 10

    Answer: When a different plan makes the belief important

    The quadrant is about the belief's relationship to the plan, not about its intrinsic truth. A new plan can lift the same belief from bottom-left to top-left, at which point the team runs the smallest test that could prove it wrong.

  5. Question 5 of 10 Which calculation gives Intercom's RICE score?

    Choose one answer.

    Show the answer: Question 5 of 10

    Answer: reach × impact × confidence ÷ effort

    Each of the four inputs is an estimate the team records; the division by effort is what turns a workshop list into a ranked set of opportunities for the quarter.

  6. Question 6 of 10 The lesson's example halves one reach estimate and watches pause-flow drop from rank 1 to rank 3. What is the point of the shift?

    Choose one answer.

    Show the answer: Question 6 of 10

    Answer: It shows which items depend on a soft estimate and which are robust to a bad guess

    Sensitivity turns the RICE board into a conversation: name the softest estimate, nudge it, and see what moves. The items that keep their rank are the ones the team can build on without the test first.

  7. Question 7 of 10 Which situation suits the impact-effort grid best?

    Choose one answer.

    Show the answer: Question 7 of 10

    Answer: A workshop with an afternoon and a team new to prioritisation

    Impact-effort is honest about being cheap. Pick it when the team's time is short, the team is new, and the question is "which thing is worth starting on this afternoon?".

  8. Question 8 of 10 Where do WCAG 2.2 compliance and India's dark-pattern rules sit on a prioritisation board?

    Choose one answer.

    Show the answer: Question 8 of 10

    Answer: Above the board, as constraints every option has to meet

    Treat accessibility and consumer-protection rules as constraints the whole board has to meet. The prioritisation conversation then runs below the line and no feature can "beat" a must-ship rule on points.

  9. Question 9 of 10 Which question is HEART best for answering?

    Choose one answer.

    Show the answer: Question 9 of 10

    Answer: Did a shipped change move the numbers that match its goal?

    HEART closes the loop. A change was shipped because the team expected a goal to move; HEART names the signal and the metric that would say so, and the categories that are not meaningful to the change are skipped.

  10. Question 10 of 10 Why do the lesson's HEART rows skip Happiness and Adoption for the pause-flow?

    Choose one answer.

    Show the answer: Question 10 of 10

    Answer: Those categories are not meaningful for the change at hand

    Pick the HEART categories that fit the change in front of you. A row that would be guessed, or a metric nobody can collect, is cut; three honest rows beat five that paper over nothing.

Interview questions

Warm-up (fresher to 2–5 years): when is a “How might we” question really a solution in disguise?

When the question names a thing to build. “How might we add a Pause button to the plan screen?” already picks a particular button on a particular screen, and the ten different sketches a workshop might produce in reply are reduced to one that already has a drawing. The telltale words are the ones that name a thing: button, screen, popup, email, notification, modal. Keep the question at the level of what the subscriber needs to do: “How might we let subscribers skip a week they will be away?” leaves room for a toggle in the reminder, a dialog on the web, a phone-agent script and the three other answers nobody has sketched yet. If a word in the question is already what the team would build, rewrite the question until it could still have ten answers.

Two heavier questions sit under the warm-up. Draft the opening of each in a sentence or two of your own before you tap through to the first step:

Model answers open with any pass: ₹79 for 1 week ($2.99), one payment that never renews.

  1. Mid to senior

    A product manager at MealBox raises their favourite opportunity's RICE score by nudging "reach" upward until it beats every other item on the board. What do you say to them, and what do you change about how the team keeps estimates so the next quarter's board is harder to game?

    Model answer, Pro. Model answers open with any pass; prices are in the notice on this page. First step and follow-ups

  2. Senior to staff

    A VP tells the team to replace all UX metrics with "NPS, the only number that matters". The team has been reporting a HEART worksheet for the pause-flow for a quarter. What is NPS measuring, what is HEART measuring, and how do you argue for keeping both while giving the VP what they need?

    Model answer, Pro. First step and follow-ups

Flashcards · 7 cards

Recall it, then check

Say the answer to yourself before you look: recalling it is what makes it stick.

  1. Which three things does a problem statement name, in one sentence?

    A user specific enough for another team to picture, a need that is a goal rather than a solution, and the evidence that the need is real, citing research rather than a hunch.

  2. Which words most often sneak the answer into a "How might we" question?

    Button, screen, popup, email, notification and modal. Rewrite the question until it could still have ten plausible answers, such as "How might we let subscribers skip a week they will be away?"

  3. Which beliefs does assumption mapping say to test first?

    The top-left square: high importance, weak evidence, because the plan rests on them and nothing has measured them yet. Write beside each one the smallest test that could prove it wrong.

  4. How is a RICE score worked out, and what does its precise-looking number hide?

    Reach × impact × confidence ÷ effort. Each of the four inputs is an estimate, so record who guessed each number and on what evidence; in the lesson, halving one unmeasured reach estimate dropped pause-flow from first to third.

  5. What three kinds of quality does the Kano model separate?

    Must-be qualities, which cause dissatisfaction when missing and earn no credit when present (a served-area check); one-dimensional qualities, which raise satisfaction in step with delivery; and attractive qualities, which delight beyond what users would ask for.

  6. What do the letters of HEART stand for, and how is it used?

    Happiness, Engagement, Adoption, Retention and Task success. Pick the categories that fit the change and walk from goal to signal to metric for each, skipping the ones the change cannot move.

  7. Where do accessibility and consumer-protection rules sit in a prioritisation exercise?

    Above the prioritisation table, as constraints, not as features scored against the others. A design that fails WCAG 2.2 or India's dark-pattern rules is not shipped, whatever the RICE board says.

Key takeaways

  • A problem statement is one sentence with three parts — a user, a need and the evidence behind it — and a reader must be able to disagree about each one.
  • “How might we” questions open a problem into answers without naming what the team will build, so solution words like button and screen have no place in them.
  • Assumption mapping places beliefs by importance and evidence, and the top-left square (important, weakly evidenced) is where the quarter’s first test belongs.
  • Impact-effort, RICE, Kano and HEART each answer a different question, and RICE’s crisp score hides four estimates that must be labelled estimates and recorded with who guessed them.
  • HEART ties a design change to its measurement by walking from goal to signal to metric, and skips the categories that are not meaningful to the change at hand.
  • Accessibility and consumer-protection rules are constraints that sit above the prioritisation table, not features the team scores against the others.

Terms in this lesson

assumption mapping
A grid that places beliefs by how important they are to a plan and how strong the evidence for them is, used to decide which ones to test first.
HEART framework
Rodden, Hutchinson and Fu's five user-experience categories (Happiness, Engagement, Adoption, Retention, Task success), paired with Goals-Signals-Metrics to measure a design change.
how might we
A short, open question in the form 'How might we...' that frames a design task without naming a particular solution, so several answers remain possible.
Kano model
A way of sorting product qualities into must-be, one-dimensional and attractive, from Kano and colleagues (1984), to separate qualities a single score blurs.
problem statement
A one-sentence summary of a problem to solve, naming the user, their need and the evidence that the need is real; written before any solution is chosen.
RICE score
Intercom's opportunity score for prioritisation: reach x impact x confidence / effort, with each input written as an estimate.

References

Report a problem with this lesson

Quick answers and tool search

Type to search tools or to get a quick answer, for example 18% of 2500. Use the up and down arrow keys to move through the results, Enter to choose, and Escape to close.