Design Mobile Push Notification Personalization at Scale

Personalized push notifications are an entire engineering discipline. The wrong notification produces uninstalls; the right one produces engagement. Companies like Spotify, Netflix, Headspace, and Duolingo have built sophisticated push personalization platforms that the interview increasingly probes.

Functional requirements

  • Send pushes to specific user segments
  • Personalize content per user
  • Cap frequency to avoid annoyance
  • Optimize send time per user
  • Measure engagement (open rate, conversion)
  • Respect user opt-outs and quiet hours

Architecture

Three pipelines: candidate generation, scoring/ranking, delivery.

Candidate generation

For a given user, generate candidate notifications:

  • Triggered: based on events (new content, friend activity, calendar)
  • Scheduled: based on rules (Monday morning encouragement)
  • Recommended: based on ML predictions

Generate dozens of candidates per user per day; rank to a shorter shortlist.

Scoring / ranking

Each candidate has a score:

  • Predicted engagement probability (will the user open?)
  • Predicted business value (will this drive a metric?)
  • Recency (avoid duplicate)
  • User preferences (channel, frequency)

ML model trained on historical engagement data scores candidates. Top-N proceed to delivery.

Frequency capping

Without limits, users get spammed. Capping rules:

  • Max N notifications per user per day (typically 1–3)
  • Max N per category per week
  • Cooldown between notifications (e.g., 4 hours)
  • Exceptions for time-critical (security alerts, real-time game)

Send-time optimization

Sending at 3am loses engagement. ML model predicts optimal send time per user:

  • Aggregate engagement by hour of day, day of week
  • Model the user’s daily pattern
  • Schedule pushes for the predicted high-engagement window

Quiet hours

Respect platform features (iOS Focus modes, Android Do Not Disturb). Server-side, default to “no notifications between 10pm and 7am local time” unless user opts in.

Channel routing

Some users prefer push; others email; others SMS. Per-user channel preferences:

  • Push for time-sensitive
  • Email for marketing
  • SMS for security and account events

Localization

Push content respects user locale:

  • Translate dynamic content
  • Use locale-aware date/number formats
  • Right-to-left handling

Measurement

Per-notification metrics:

  • Sent
  • Delivered
  • Opened
  • Engaged (action taken in app within window)
  • Conversion (revenue, retention impact)

A/B test push variants. Treat push as a major UX surface.

Privacy

  • Don’t include sensitive content in payload (it shows on lock screen)
  • Privacy mode: payload says “New activity”; user opens app to see details
  • Honor user opt-outs immediately and globally

Common antipatterns

  • Sending the same notification to everyone
  • No frequency cap (users uninstall)
  • Marketing pushes outside reasonable hours
  • Misleading subjects (clickbait erodes trust)
  • “Re-engagement” pushes that just spam dormant users

Frequently Asked Questions

What is the right baseline for “successful” push?

Industry-typical open rates: 5–15%. Strong personalization can push to 20–30%. Below 3% suggests the wrong content for that user.

How do you balance engagement and annoyance?

Cap aggressively. Test in limited cohorts before scaling. Track uninstall rate as a primary signal.

How does this differ from email marketing?

Push is more intrusive; users uninstall faster than they unsubscribe. Higher bar for relevance.

Scroll to Top