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.