r/NotificationLab · Posted by u/chloe4ai · Oct 2026 Growth · Retention · Notifications

Notifications as a retention channel: lift logged-in DAU/MAU without burning the channel

After someone signs up, push and email are the two levers that bring them back. But a push that gets ignored is not free: it spends a little of the person's patience, and once that runs out they turn push off for good and the lever is gone. This lab takes a cohort of new signups, simulates 180 days under today's default policy and a fatigue-aware one, and reports what a retention team cares about: DAU/MAU, day-N retention, and how many people can still be reached.

Persona

Loading…

r/NotificationLab · u/chloe4ai 01 · Where this sits

The growth funnel this project lives in

A community app's growth loop has three stages. Search brings logged-out visitors; identity turns them into accounts; notifications bring accounts back. This lab is the third stage, and it also shows what the second one is worth: the same people, registered and reachable, against a logged-out look-alike who only visits on their own.

DAU/MAU of one signup cohort, 180 days

Logged-out look-alike (no pushes)Today's defaultRecommended

Still active at day N

r/NotificationLab · u/chloe4ai 02 · Dashboard

Metrics dashboard

Every headline number for the selected persona, today's default against the recommended policy, measured on a validation cohort of new signups over 180 days. Hover a tile for its definition.

Cumulative extra active days

Today's defaultRecommended

Where the optimiser looked

Lift against reach: the trade-off every policy makes

Each point is one of the policies the optimiser tried. Right is more people still reachable at day 180; up is more lift. The slider sets how much a reachable person is worth relative to an active day (the idea behind the α in Twitter's volume work): drag it and watch which policy wins.

Volume-firstFatigue-awareUplift-aware★Best at this α

Mechanism or just less volume?

All three personas side by side

Lift is extra active days per user versus the same person receiving no pushes. Reachable is the share who still have push on, or email if the policy uses it. Reach days is the area under the push-permission curve. Pushes per extra active day is the cost of one unit of lift. ± is a 95% interval.

r/NotificationLab · u/chloe4ai 03 · Lived experience

One person, first 30 days

The same kind of person under two policies. First, today's default: the top five candidates every day. Then the recommended policy. Pick a day or press play.

Today's default
Patience used

r/NotificationLab · u/chloe4ai 04 · Recommendation

How many pushes a day

Fatigue-aware (best relevance bar at each cap) Volume-first 95% interval

r/NotificationLab · u/chloe4ai 05 · Recommendation

Which pushes to send

Share of all pushes by type, today's default against the recommended policy. The rule column comes from switching each type off in turn and measuring the change in extra active days.

r/NotificationLab · u/chloe4ai 06 · Six months

What a 30-day test hides

Push permission only goes one way. A D30 retention readout looks fine under today's default; the damage shows at D90 and beyond, and every point lost caps every campaign that comes after it.

Today's defaultRecommended

Push permission still on

Extra daily actives vs. no pushes

r/NotificationLab · u/chloe4ai 07 · What I'd ship

What each layer adds

The recommended policy is built in layers, each borrowed from something a large consumer app has published. Each bar is the validation cohort with one more layer switched on. The optimiser keeps a layer only if it does not lose lift; a layer it rejected is still shown so you can see why.

Today's defaultRecommended stackMeasured, not shipped

r/NotificationLab · u/chloe4ai 08 · Prior art

What the big apps do, and what is in this lab

The same problem has been published on by several consumer apps. This is what each one did, what they reported, and which part of it this lab reproduces.

CompanyWhat they didWhat they reportedIn this lab
Pinterest
KDD 2018, Pinterest Engineering
A weekly notification budget per user, set by user state, optimising long-term activity minus the cost of unsubscribes. Labels came from randomly assigned weekly volumes.Volume −6 to −24%, CTR +11 to +31%, site engagement +1 to +3%. Volume moved from core users to marginal ones.Per-state budget core users get half the cap, dormant users a lower bar
LinkedIn
Air Traffic Controller
One gateway for every notification: rate limits per upstream app, send-time by locale, channel choice (in-app, push, email), aggregation of several items into one, de-duplication.Member complaints halved, double-digit site engagement gain.Batching two or more feed items become one digest · Email fallback for people who turned push off
Instagram
Meta Engineering, 2022
Replaced the click model with an uplift model: a 50% random holdout taught it the incremental effect of a push, so active users who would open the app anyway stop getting them. Send rate held fixed by a quantile transform.Sending volume "reduced substantially" with no drop in engagement.Uplift-aware policy scored by relevance × open chance × (1 − would visit anyway). Measured, not shipped: see post 07
Twitter / X
Engineering blog, 2022
Cohort caps plus personalised caps; a six-state model of user activity; long-term utility with two-month delayed labels; an α that trades DAU against reachability.DAU +0.62% iOS, +0.39% Android, reachability unchanged.α slider in the dashboard · tie-break toward reach in the optimiser
Facebook
Horizon, 2018
Reinforcement learning decides send or drop per notification, reward is downstream activity with a penalty per send.Published as a platform paper; no engagement figures.Not here the fatigue-aware score is the hand-written version of that reward
Duolingo
KDD 2020
A bandit picks the reminder copy per learner per day, with a recency penalty so templates do not go stale.DAU +0.5%, new-user retention +2%.Not here copy is fixed; the lab is about volume and mix

Sources: Pinterest · LinkedIn ATC · Instagram · X · Horizon · Duolingo · survey by Eugene Yan. Industry benchmark for context: in one widely cited survey, 46% of users said they would opt out after 2–5 pushes in a week.

r/NotificationLab · u/chloe4ai 09 · Method and data

How the numbers are made

Supply

Each day a new signup gets candidates: replies to their posts and comments (in proportion to how much they contribute), upvote milestones, trending posts from joined communities, a digest, recommendations and community suggestions.

Select

Volume-first sends the top cap by relevance. Fatigue-aware subtracts an irritation cost that grows with fatigue, shrinks the cap as fatigue rises, and skips anything below a relevance bar. Optional layers: half the cap for core users and a lower bar for dormant ones; two or more feed items folded into one digest; an email digest every third day for people who turned push off.

Respond

Open probability = relevance × (1 − fatigue) × the person's willingness; email opens at under half the rate of push. Opens lower fatigue; ignores raise it. Past the person's threshold, the rest of the day is Do Not Disturb. Fatigue also makes unprompted visits less likely; recent opens make them more likely.

Burn

Each day there is a small chance, growing with fatigue², that the person turns push off. It never comes back. Ignored emails carry their own unsubscribe chance. Lift, DAU/MAU and retention are measured against the same person with no pushes, which is also the logged-out look-alike.

The optimiser searches every ceiling and relevance bar, then switches the operational layers on one at a time and keeps those that do not lose lift, breaking ties toward the policy that keeps more people reachable. Results are reported on a second cohort it never saw. All data is simulated. Parameters are illustrative, not fitted to any company's logs. The point is the mechanism: calibrate against a real holdout before trusting any number. Source, generator and tests are in the repository.