Design a Notification System

Design a system that sends push, email, and SMS notifications at scale. The hard problems are fanout to millions of recipients, at-least-once delivery, deduplication, and user preference enforcement.

What you will learn

  • Design a multi-channel notification pipeline (push, email, SMS, in-app)
  • Guarantee at-least-once delivery without sending duplicates to users
  • Handle fanout to millions of recipients without blocking the triggering event
  • Enforce user notification preferences and quiet hours

Every app sends notifications. A like on Instagram, a payment confirmation from your bank, a promotional offer from an e-commerce platform. Each event may trigger a push notification, an email, an SMS, or an in-app alert — or all four, depending on user preferences. The system that handles this is harder to build correctly than it appears: fanout, delivery guarantees, deduplication, throttling, and quiet hours all have to work together.


Functional requirements:

  • Send notifications via push (iOS/Android), email, SMS, and in-app
  • Triggered by internal events (new message, payment) or scheduled campaigns
  • Respect user notification preferences (per-channel opt-out, quiet hours)
  • Track delivery status: sent, delivered, failed
  • Support batched marketing campaigns (millions of recipients)

Non-functional requirements:

  • At-least-once delivery — never silently drop a notification
  • No duplicates — same event should not notify the user twice
  • Latency for transactional notifications (payment confirmed): < 10 seconds
  • Latency for marketing campaigns: eventual (within minutes/hours is acceptable)
  • High availability — notification service outage = users miss critical alerts

Create a free account to read the full chapter — advanced chapters, progress tracking, and quizzes are free with sign-up.