System Design Notification Service Interview Guide

System Design Notification Service Interview Guide

A system design notification service interview asks you to deliver messages across email, push, SMS, and in-app channels without melting providers or spamming users. Candidates commonly report this prompt when teams own growth, marketplace, or platform messaging. This guide gives you a talk track for requirements, fan-out, queues, templates, and delivery tradeoffs.

Start with the product job

Notifications are not “send email.” They are timely, preference-aware, multi-channel delivery with auditability.

Clarify:

Talk track:

“I’ll separate transactional from marketing, support email + push first, honor preferences and quiet hours, and aim for at-least-once delivery with idempotent providers and dedupe keys.”

High-level shape

  1. Producer API — services enqueue a notification intent
  2. Orchestrator — resolve recipients, templates, channel preference
  3. Per-channel workers — talk to SES/SendGrid, APNs/FCM, Twilio, etc.
  4. Preference & template stores
  5. Status / outbox — delivered, failed, opened (where available)

Draw producers → queue → orchestrator → channel queues → providers. Keep the first diagram readable.

API sketch

Idempotency key on create so retries do not double-send.

Fan-out patterns

PatternWhenNotes
Online fan-outSmall recipient setsExpand at write time
Offline / topic fan-outHuge audiencesExpand asynchronously; store followers/topics carefully
HybridCelebrity / viral eventsPrecompute hot topics; online for normal

Talk track:

“For a single-user receipt I’ll expand inline. For a broadcast I’ll enqueue an expansion job that pages recipients and publishes per-user channel jobs so we do not block the producer.”

Queues and backpressure

When a provider throttles, retry with exponential backoff + jitter; dead-letter after N tries with alerting.

Templates and rendering

Talk track:

“Orchestrator loads template + user locale, renders channel-specific payloads, then enqueues channel jobs with a dedupe key of notificationId+channel.”

Preferences, quiet hours, frequency caps

Before send:

  1. User opted into this category?
  2. Channel enabled?
  3. Quiet hours? (delay or skip non-transactional)
  4. Frequency cap for marketing?

Transactional usually bypasses marketing caps but still respects legal opt-outs where required. Say you will confirm product/legal constraints rather than inventing policy.

Delivery guarantees (be honest)

True exactly-once across SMS/email is unrealistic. Aim for:

Talk track:

“I’ll promise at-least-once with idempotency keys so users do not get three OTPs from the same intent. Exactly-once end-to-end is not something I’d claim.”

Capacity sketch

Example assumptions (adjust live):

Size workers from peak channel QPS and provider rate limits, not from average.

Data stores

Do not put the entire send history in the OLTP path of the producer service.

Observability and abuse

Must mention:

Failure modes worth naming

First ten minutes

  1. Channels + transactional vs marketing (2 min)
  2. API + idempotency (1 min)
  3. Architecture diagram with queues (3 min)
  4. Preferences / quiet hours (1 min)
  5. Guarantees + retries/DLQ (2 min)
  6. Scale fan-out if prompted (1 min)

Tradeoffs table

ChoicePrefer when
Sync send in requestTiny volume, strong need for immediate error
Async queueAlways for multi-channel / scale
Shared worker poolLow volume
Per-channel fleetsDifferent rate limits and SLAs
Push-only for mobile alertsCost; SMS reserved for OTP

Soft practice note

Notification designs are preference logic plus queue discipline. If you want a Chrome side panel to rehearse this system design notification service talk track under timed pressure, Luna Interview is built for calm rehearsal. Use it to build structured tradeoff talk—not to fake provider outages or to violate interview rules.

Day-of checklist

Deliver intents through queues; respect prefs; never claim magic exactly-once—that is the notification service interview guide.