← Airbnb Interview Insights

Airbnb·Software Engineer·Onsite - System Design / Architecture·Senior

Senior
May 2026

Summary

System design round at Airbnb for a software engineer role. The problem was a full notification platform covering email, SMS, push, and batch campaigns at scale. Pretty involved question with a lot of surface area to cover.

Questions Asked (5)

Q1

Design a notification system at Airbnb's scale that supports multiple user types and delivery channels including email, SMS, push notifications, and an optional social channel.

System DesignTechnical Trade-offs
Author's notes

I started with the two delivery modes since that felt like the clearest axis to organize around.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and scale (e.g., millions of users, billions of notifications per day), then design a high-level architecture with decoupled components: event ingestion, user preferences, channel-specific workers, and delivery. Focus on trade-offs like reliability, latency, and cost, and discuss how to handle failures and scale each component.

Pro tip: Emphasize idempotency and deduplication to prevent duplicate notifications, and discuss how to handle user preferences and quiet hours to avoid spamming users—this shows you understand real-world product concerns beyond just technical scalability.

1. Clarify Requirements and Scale

Ask questions to understand the scope: number of users, notification volume, latency requirements, delivery guarantees, and supported channels. Establish functional and non-functional requirements.

2. High-Level Architecture

Propose a decoupled, event-driven architecture with components like API gateway, notification service, message queue, channel workers, and user preference service. Sketch the data flow from event to delivery.

3. Deep Dive into Key Components

Detail critical parts: how to handle user preferences and opt-outs, template management, rate limiting, retry mechanisms, and channel-specific integrations (e.g., APNs, Twilio). Discuss data storage for notifications and user settings.

4. Scalability and Reliability

Explain how to scale each component (e.g., partitioning, sharding, horizontal scaling), ensure high availability, and handle failures with retries, dead-letter queues, and idempotency. Discuss monitoring and alerting.

5. Trade-offs and Extensions

Summarize key trade-offs (e.g., consistency vs. availability, latency vs. cost) and suggest potential extensions like A/B testing, analytics, or adding new channels.

Key Points to Mention

  • Decoupling via message queues (e.g., Kafka) for asynchronous processing and backpressure handling.
  • User preference management including opt-in/opt-out, quiet hours, and channel prioritization.
  • Idempotency and deduplication to prevent duplicate notifications.
  • Retry mechanisms with exponential backoff and dead-letter queues for failed deliveries.
  • Rate limiting and throttling to protect downstream services and avoid spamming users.
  • Monitoring and analytics for delivery success rates, latency, and user engagement.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q2

How would you handle message templating and personalization so that notifications can be authored once but rendered differently per user and channel?

System DesignData Modeling
Author's notes

Talked about a template store with variable substitution at render time, pulling user profile data from a context service.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements: what channels, user attributes, and personalization rules exist. Then propose a layered architecture: a template registry with versioning, a rendering engine that merges templates with user and channel context, and a delivery service that selects the right template variant per channel. Emphasize separation of content authoring from rendering logic, and discuss trade-offs like caching, localization, and fallback strategies.

Pro tip: Mention that you'd store templates as structured data (e.g., JSON with placeholders) rather than raw strings, enabling validation, preview, and safe rendering across channels. Also highlight the importance of idempotent rendering and audit trails for compliance.

1. Clarify Requirements and Constraints

Ask about supported channels (email, push, SMS, in-app), personalization dimensions (user attributes, behavior, locale), and non-functional needs like latency, scale, and compliance.

2. Design Template Data Model

Define a schema for templates that separates static content, dynamic placeholders, and channel-specific overrides. Include versioning and metadata for authoring, localization, and A/B testing.

3. Build Rendering Pipeline

Outline a service that takes a template ID, user context, and channel, then resolves placeholders, applies conditional logic, and formats output per channel (e.g., HTML for email, plain text for SMS).

4. Address Scalability and Reliability

Discuss caching rendered fragments, precompiling templates, and handling failures with fallbacks. Mention idempotency and retry mechanisms for delivery.

5. Cover Operational Concerns

Include monitoring, A/B testing, localization, and audit logging. Explain how to safely roll out template changes and measure engagement.

Key Points to Mention

  • Separation of content authoring from rendering logic to enable reuse across channels
  • Template versioning and rollback strategies for safe updates
  • Channel-specific rendering (e.g., HTML vs. plain text) and formatting rules
  • Personalization using user attributes, behavior, and locale with fallback defaults
  • Caching and precompilation to reduce latency at scale
  • Compliance, audit trails, and idempotent rendering for reliability

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q3

How do you manage user notification preferences, opt-outs, and compliance requirements like unsubscribe handling?

System DesignAPI & Integrations
Author's notes

This one I actually felt decent about.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the scope—transactional vs. marketing messages, channels (email, push, SMS), and regional regulations—then outline a centralized preference service that stores user consent and integrates with all notification senders. Emphasize idempotent unsubscribe handling, audit trails, and how you'd design for scalability and compliance at Airbnb's scale.

Pro tip: Mention that you'd treat preference changes as events in a stream (e.g., Kafka) to propagate updates asynchronously, ensuring eventual consistency without blocking user actions. Also, highlight the importance of honoring opt-outs within seconds to avoid regulatory penalties and user trust erosion.

1. Clarify requirements and constraints

Ask about message types (transactional vs. marketing), channels, regional regulations (GDPR, CAN-SPAM, CASL), and scale (millions of users). This shows you don't jump to solutions without understanding the problem.

2. Design a centralized preference store

Propose a dedicated service that stores user preferences and consent per channel and message category, with an API for reading and updating. Use a database with strong consistency for writes and caching for low-latency reads.

3. Implement opt-out and unsubscribe flows

Ensure unsubscribe links are one-click, idempotent, and immediately effective. Use signed tokens to prevent abuse, and update the preference store synchronously or via a reliable event queue.

4. Integrate with notification senders

All outbound messages must check preferences before sending. Implement a pre-send check that queries the preference service or uses a local cache with short TTL, and log every decision for auditing.

5. Ensure compliance and auditability

Maintain an immutable audit log of consent changes, provide user-facing tools to view and manage preferences, and support data export/deletion requests. Regularly reconcile with regulatory requirements.

Key Points to Mention

  • Separation of transactional and marketing messages, with different consent rules
  • Idempotent and secure unsubscribe mechanisms (e.g., signed tokens, one-click)
  • Event-driven architecture for propagating preference changes (e.g., Kafka, change data capture)
  • Caching strategies to minimize latency while ensuring opt-outs are honored quickly
  • Audit trails and compliance with GDPR, CAN-SPAM, CASL, etc.
  • Scalability considerations: sharding, read replicas, and handling high write throughput

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q4

Walk through how you'd ensure reliability in this system: retries, deduplication, and idempotency when delivering notifications.

System DesignTechnical Trade-offs
Author's notes

Blanked for a second on deduplication across retries.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the notification delivery requirements (e.g., at-least-once vs exactly-once, latency, scale). Then walk through the end-to-end flow, explaining how retries, deduplication, and idempotency work together to ensure reliability. Finally, discuss trade-offs and how you'd monitor and test the system.

Pro tip: Emphasize that idempotency is key to making retries safe, and that deduplication should be implemented at multiple layers (e.g., producer and consumer) to handle edge cases. Also, mention that you'd use a unique idempotency key per notification and store it with a TTL to prevent unbounded growth.

1. Clarify requirements and constraints

Ask about delivery guarantees (at-least-once, exactly-once), expected volume, latency, and failure modes. This sets the stage for designing the right reliability mechanisms.

2. Design retry strategy

Explain how you'd implement retries with exponential backoff and jitter, and set a maximum retry limit. Discuss where retries occur (e.g., client, queue, worker) and how to handle poison messages.

3. Implement deduplication

Describe how to detect and discard duplicate notifications using a unique idempotency key. Mention storing keys in a fast lookup store (e.g., Redis) with TTL, and consider deduplication at both producer and consumer sides.

4. Ensure idempotency

Explain how to make notification processing idempotent so that repeated attempts don't cause duplicate side effects. This could involve checking if the notification was already sent or using a state machine.

5. Monitor, test, and iterate

Discuss how you'd monitor retry rates, deduplication hits, and idempotency violations. Describe testing strategies like chaos engineering and load testing to validate reliability.

Key Points to Mention

  • Idempotency keys: unique per notification, stored with TTL, used to deduplicate and ensure idempotent processing.
  • Retry policies: exponential backoff with jitter, max retries, dead-letter queues for failed messages.
  • Deduplication layers: dedupe at ingestion (API) and at processing (worker) to handle duplicates from retries or multiple producers.
  • At-least-once vs exactly-once: acknowledge that exactly-once is hard; aim for at-least-once with idempotent consumers.
  • Monitoring and alerting: track retry counts, deduplication rates, and latency; set up alerts for anomalies.
  • Trade-offs: latency vs reliability, storage cost for deduplication keys, complexity of idempotent operations.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q5

How would you design observability into this notification system, covering logging, metrics, tracing, and audit trails?

System DesignAPI & Integrations
Author's notes

Standard stuff: structured logs with a correlation ID that flows from the triggering event through to the provider response, metrics on delivery rate and latency per channel, distributed tracing across the pipeline stages.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the notification system's architecture and scale, then systematically address each observability pillar (logging, metrics, tracing, audit trails) with concrete tools and practices. Emphasize how these pillars interconnect to provide end-to-end visibility and enable rapid debugging and compliance.

Pro tip: Tie observability to business impact: show how each pillar helps reduce MTTR, improve user experience, or meet compliance requirements. Mention specific tools (e.g., OpenTelemetry, Prometheus, Grafana, Jaeger) to demonstrate hands-on experience.

1. Clarify requirements and architecture

Ask about scale, notification types (email, push, SMS), delivery guarantees, and compliance needs. Understand the system's components (producers, queues, workers, providers) to tailor observability.

2. Design structured logging

Use structured logs (JSON) with consistent fields (e.g., notification_id, user_id, channel, status). Centralize logs with ELK or Loki, and ensure PII is masked.

3. Define key metrics and dashboards

Track throughput, latency, error rates, queue depth, and provider success rates. Use Prometheus for collection and Grafana for dashboards, with alerts on SLO violations.

4. Implement distributed tracing

Instrument with OpenTelemetry to trace a notification's lifecycle across services. Propagate context and visualize traces in Jaeger or Tempo to identify bottlenecks.

5. Ensure audit trails and compliance

Log immutable audit events for each notification (who, what, when, channel, content hash). Store in a tamper-proof system (e.g., append-only DB) and define retention policies.

Key Points to Mention

  • Structured logging with correlation IDs to trace individual notifications across services.
  • Metrics: RED method (Rate, Errors, Duration) and USE method (Utilization, Saturation, Errors) for queues and workers.
  • Distributed tracing with OpenTelemetry and context propagation to pinpoint latency issues.
  • Audit trails: immutable, tamper-evident logs for compliance (GDPR, CCPA) and debugging.
  • Alerting: set SLOs and alert on burn rates to catch issues before users are impacted.
  • Tooling: Prometheus, Grafana, Jaeger, ELK stack, and OpenTelemetry for a unified observability stack.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.