Skip to content
Academy
Marketing Academy · Field Work●Human Psychology
MiniAudit· 25 minutes

The Loop Audit: Diagnosing Duolingo's Cue-Routine-Reward Mechanics

Duolingo

Objective: Use Duolingo (or an existing account) for one day, log every trigger-to-open event, and classify each as cue/routine/reward to diagnose whether the loop's reward is reliable, variable, or missing.

You're a growth analyst who just joined a team pitching a habit-loop redesign to leadership. Before proposing changes to your own product, your manager wants you to prove you can correctly diagnose an existing best-in-class loop, Duolingo, using nothing but your own phone for a day.

Log real notification-to-open events, classify cue/routine/reward for each, and rate whether the reward is fixed or variable using the schedule-of-reinforcement idea from the lesson.

Before you start

What you'll need

Free path (everything below is enough to finish)

FreeLog and classify cue/routine/reward events

Free, no signup needed beyond an existing Google account

The process

2 steps

Step 01 of 02

The cue-routine-reward loop

Duhigg's habit loop splits every automatic behavior into a cue (trigger), a routine (the behavior), and a reward (payoff), synthesizing Ann Graybiel's 1999 basal-ganglia research at MIT.

Over one day, Duolingo pings you at least once. For each ping, what is the cue, what is the routine, and what is the reward, and does the cue reliably precede the routine every time?

Google Sheets— Open Duolingo (or your existing account), keep notifications on for one day, and log events in a fresh sheet.

Procedure

  1. Create 4 columns: Time, Cue, Routine, Reward
  2. Every time Duolingo notifies or you open it, log the exact cue text (e.g. streak reminder push)
  3. Log the routine you performed (opened app, completed 1 lesson, closed app)
  4. Log the reward you received (XP number, streak count, gem chest, league update)
  5. At day's end, mark any row where the cue did NOT lead to the routine
Sample output
Time | Cue | Routine | Reward | Cue->Routine?
8:02pm | Push: "Don't lose your 12-day streak!" | Opened app, did 1 lesson | +10 XP, streak saved | Yes
1:15pm | (none, self-initiated) | Opened app during commute | +15 XP, gem chest (random) | N/A
8:45pm | Push: "Duo is sad" (2nd reminder) | Ignored, phone silenced | none | No

Healthy

Cue leads to routine on most logged rows, and the reward varies in size/type (gem chest sometimes, plain XP other times).

Unhealthy

The cue fires repeatedly with no routine following, meaning the cue has stopped working and is training the user to mute notifications.

What this means

A cue that stops converting is a design signal, not a user failure. It means the reward attached to it has gone stale or the cue has been used too often.

So what do I do about it?

SymptomActionEffort
Cue-to-routine conversion drops below half your logged rowsCut to one reliable daily cue instead of stacking reminders30 min
YouYou can do this yourself, no engineering access required.

Step 02 of 02

Variable reward strength

Per B.F. Skinner's reinforcement-schedule research (cited in the lesson), variable rewards are the strongest reinforcement type, stronger than a fixed reward every time.

Across the rewards you logged, how many were an identical fixed amount versus a randomized one (gem chest, league jump, unexpected bonus)? What does that ratio predict about how compulsive this loop feels?

Google Sheets— Same sheet, add a Reward Type column.

Procedure

  1. Tag every logged reward as Fixed (same every time) or Variable (randomized in type/size/timing)
  2. Count the ratio of Fixed to Variable rewards across your log
  3. Compare against the lesson's Duolingo stat: streak-active users are 3x more likely to return daily
  4. Write one sentence on which specific reward row felt most compelling and why
Sample output
Reward Type tally: Fixed 4, Variable 3
Most compelling row: 1:15pm gem chest (Variable) - unknown contents until opened

Healthy

At least some rewards are variable; variable rows report as the most compelling in the written reflection.

Unhealthy

All rewards are fixed and identical every day; the loop still runs but produces boredom, not craving.

What this means

A pure fixed-reward loop can sustain a habit but rarely accelerates it. Mixing in variable rewards is what turns compliance into craving.

So what do I do about it?

SymptomActionEffort
All logged rewards are identical fixed amountsIntroduce one randomized reward tier without changing the core routinehalf day
YouYou can do this yourself, no engineering access required.

Final deliverable

A one-day cue/routine/reward event log with a written diagnosis of which stage of the loop is strongest and weakest.

See a reference example
Sample output
Nykaa app, one-day loop log (excerpt)

Time | Cue | Routine | Reward | Cue->Routine?
10:30am | Push: "Your wishlist item is back in stock" | Opened app, viewed item | Free sample offer at checkout | Yes
6:00pm | Push: "Flash sale ends in 2 hours" | Ignored | none | No

Reward Type tally: Fixed 1, Variable 1
Diagnosis: Cue is reliable for restock alerts (contextual, specific) but weak for generic urgency pushes (ignored). Reward is under-variable, both instances were predictable discounts.

Success criteria

You're done when you can:

  • Logs at least 3 real cue-to-routine events with all 4 columns filled
  • Correctly tags each reward as fixed or variable
  • Identifies which specific cue converted least and proposes a fix