In this case study

Growth models

Slapp's growth stack is four models and a set of rules that decide which push notifications are sent.

Hook signals

Fourteen evaluators run every two hours and look for reasons to bring someone back: a close friend posted, a birthday was missed, profile views spiked, friends are partying now, a group or post is trending, an event is recommended, there is an unseen feed summary, and more. Each signal has its own cooldown, from 12 hours to 7 days, and all of them sit under a global cap of three proactive pushes per user per day.

Each signal is a candidate, and every candidate passes through the ranker below before anything is sent.

The notification ranker

The ranker has two heads: whether the push would be opened within an hour, and whether the user is at risk of churning. Its features are one-hot indicators for the 12 notification types plus user state. It retrains nightly.

The live gate passes a send when:

Notification gate
150·P(open) − 5·P(churn) ≥ 0.3

A simulator validated the gate at a 50% cut in volume with 87.6% open recall. A kill switch keeps the model training while bypassing the gate, and suppressions are counted on the admin dashboard.

Churn risk

The churn model predicts whether a user who has been active in the last three days will be inactive in the next 24 hours. It trains weekly, on Sunday at 03:00, on daily snapshots with eleven features scaled to unit ranges: days since active over 3, sessions over 10, friends over 100, and so on.

Dispatch runs at 18:00 daily and targets the persuadable band, scores between 0.55 and 0.85. Users below the band are unlikely to leave, and users above it are unlikely to be won back. A 10% holdback is logged as a control group, so the effect of the win-back push is measured against people who did not receive it. The push deep-links to the user's highest-scoring unseen post.

Post propensity

Post propensity predicts whether a user will post in the next seven days, from twelve features taken from the window 30 to 7 days ago. The gap keeps the features from overlapping the label window. The cache refreshes nightly.

The model is used mainly for interpretation. Its second strongest predictor of posting is that a user's top friends have posted recently, which became the "your circle is active" nudge.

Retention importance

Retention importance predicts whether a user returns next week, given the surfaces they used this week: per-user counts across 12 surfaces, capped at 25, plus active days, friend count and tenure, fifteen features in all, retrained weekly. Its coefficients are partial effects, and they are used to rank which surface to experiment on next.

Rules around the models

All four models are logistic regressions trained inside Convex, with their weights stored in tables and inspected from admin pages. These fixed rules apply regardless of the models: the global cap of three proactive pushes per user per day, the per-signal cooldowns, and the loyalty club floors of 48 hours between merchant pushes and quiet hours from 22:00 to 09:00.