lh-engagement · v1.1 · 2026-10-14 · sha256 ece8d87dee5800d8

lh-engagement v1.1A

Immutable. This exact content never changes and is served at /api/v1/blob/ece8d87dee5800d8.

---
name: lh-engagement
description: >
  Attracting users and bringing them back: onboarding as a game's first
  session, habit loops, return triggers, and honest engagement metrics.
  Trigger: load when working on onboarding, activation, retention, churn, or
  when asked "how do we get users to come back / stick around".
license: Apache-2.0
metadata:
  author: jrodrigopuca
  version: "1.1"
  local-agents-id: "sk-232485"
---

## Critical Patterns

### 1. Onboard like a great game's first level

Games are the best onboarding teachers ever built, and their rules translate
directly:

- **Play first, tutorial never**: nobody reads the manual — users learn by
  doing something real with guardrails, not by watching a carousel of feature
  tours. If your onboarding is slides, delete it and design a first task.
- **First win in minutes**: the first session must end with the user having
  DONE the thing the product promises (per
  [lh-flow-analysis #4](../lh-flow-analysis/SKILL.md)) — not having configured it.
- **One verb at a time**: great games teach one mechanic, let you use it, then
  add the next. Feature-dump onboarding is a boss fight on level one.
- **Safe to fail**: early actions must be visibly reversible — fear of breaking
  something is a bigger silent killer of activation than any missing feature.

### 2. Attraction is a promise the first session must keep

Whatever pulls users in (invite, ad, word of mouth) sets an expectation; the
first session either pays it or the user is gone. Design the entry path per
promise — someone arriving "to make invoices fast" must be making an invoice in
minute one, not choosing a workspace name. Mismatched promise-to-first-session
is the most common attraction bug, and no mechanic downstream fixes it.

### 3. Habit = trigger → action → reward → investment (used honestly)

This is the CROSS-SESSION loop, measured in days: the engine of return visits.
It presumes the in-session core loop — action → feedback → reward → next
action, seconds, [lh-game-mechanics](../lh-game-mechanics/SKILL.md) #2 — already
closes; a habit loop built over a dead core loop is a notification that leads
to nothing. Its parts:

- **Trigger**: starts external (notification tied to something the USER cares
  about — never "we miss you"), must graduate to internal (a moment in their
  day when the product is the obvious answer). If notifications stop and usage
  stops, there is no habit — only noise tolerance. And ask for the channel
  AFTER the first win, never at install: a permission prompt before value is
  the premature ask of [lh-flow-analysis](../lh-flow-analysis/SKILL.md) #3 wearing
  an OS dialog, and a "no" there is nearly permanent.
- **Action**: the easier the routine, the stronger the loop — one tap to the
  core value.
- **Reward**: variable in FLAVOR (new content, progress, social response), not
  in slot-machine uncertainty.
- **Investment**: every session should leave something behind that makes the
  next session better (data, setup, streak, reputation) — stored value is the
  moat and the honest retention mechanic.

The reflection test for every loop ([judgment #6](../../AGENTS.md)): would the
user, shown this design, thank you or feel played? Ship only the first kind.

### 4. Streaks and return mechanics: forgiveness is the feature

Loss aversion makes streaks powerful — and brittle. An unforgiving streak
converts one missed day into "well, now there's no point", churning your MOST
engaged users at their first slip. Always design the failure path: freezes,
repair windows, "longest streak" records that nothing can take away. Same for
any return mechanic: daily rewards need catch-up, events need late joining.
The mechanic's job is making returning feel GOOD, not making leaving feel
punished — the first retains, the second breeds resentful users counting days
until they quit.

### 5. Measure behavior, not applause

- **Activation**: % of new users reaching the first win (defined as an ACTION,
  not a pageview) — the single most fixable number in the funnel.
- **Retention curve** (D1/D7/D30 or weekly cohorts): does it flatten? A curve
  that flattens means a habit exists; one that slides to zero means you have
  tourists. Every mechanic's success is "did the curve move", not "did people
  click the badge" — measured PAST the novelty window: a new mechanic bumps
  the curve and then decays, so a read taken inside that window ships on a
  false positive. The window's length is the product's, not a constant — a
  daily app burns through novelty in weeks, a monthly one takes months — so
  find it in your own data (when the new cohorts' curve stops moving) before
  calling a result.
- **Depth over frequency**: sessions per week without value delivered is
  addiction-shaped, not engagement-shaped — pair any frequency metric with a
  value metric (tasks completed, problems solved).
- Vanity red flags: total signups, cumulative anything, badge counts.

Every engagement claim follows the
[evidence ladder](../../../generalist/skills/lh-verification/SKILL.md): "users
love the streak" is rung 1 until a cohort comparison says otherwise — judgment
#7, with the experiment's three parts named: metric, cohort, kill-switch.

### 6. Churn is feedback, not betrayal

Users leave when the value stops or the chore returns. Before any win-back
campaign, ask what changed at the moment they left (the flow grew a chore? the
content ran out? the streak broke?). A win-back that reactivates users into
the same leak is marketing spend on a broken bucket — route the finding back
to [lh-flow-analysis](../lh-flow-analysis/SKILL.md) first.

## Resources

- Sibling skills: [lh-flow-analysis](../lh-flow-analysis/SKILL.md) (the leak-finder),
  [lh-game-mechanics](../lh-game-mechanics/SKILL.md) (the tools these loops use)
- Screen-level execution: [ux-ui/lh-ux-flows](../../../ux-ui/skills/lh-ux-flows/SKILL.md)