EasyStarter

Event RSVP Platform

DatabasesAPI DesignNotifications

Problem Statement

GatherUp is building a simple event management platform (like Eventbrite for small events). Features:

- Create events - set title, date/time, location (physical or virtual link), description, cover image, and capacity limit.RSVP - guests RSVP via a public link (Going / Maybe / Not Going). Collect guest name and email. Enforce capacity limits.Waitlist - when capacity is full, guests join a waitlist. Auto-promote if someone cancels.Reminders - email reminders to confirmed guests 24 hours and 1 hour before the event.Check-in - organizers scan a QR code or check a name off the guest list at the door.Post-event - send a thank-you email with optional feedback survey.

Targeting 10,000 events per month with an average of 50 guests per event.

What You'll Learn

Design an event creation and RSVP platform where organizers create events and guests respond. Build this architecture under realistic production constraints, then validate tradeoffs in the design lab simulation.

DatabasesAPI DesignNotifications

Constraints

Events created/month~10,000
Avg guests per event~50
RSVP response time< 300 ms
Reminder deliveryWithin 5 minutes of scheduled time
Max event capacity1,000
Availability target99.5%
ApproachClick to expand

Interview-Ready Approach

1) Clarify Scope and SLOs

  • Problem statement: Design an event creation and RSVP platform where organizers create events and guests respond.
  • Design for a peak load target around 500 RPS (including burst headroom).
  • Events created/month: ~10,000
  • Avg guests per event: ~50
  • RSVP response time: < 300 ms
  • Reminder delivery: Within 5 minutes of scheduled time
  • Max event capacity: 1,000

2) Capacity Planning Method

  • Convert traffic and growth constraints into request rate, storage growth, and concurrency budgets.
  • Keep at least 2-3x safety margin per tier (ingress, compute, storage, async workers).
  • Reserve explicit latency budgets per hop so p95 can be defended in review.

3) Architecture Decisions

  • Databases: Define a clear system-of-record and design read/write paths separately before adding optimizations.
  • API Design: Standardize API boundaries, idempotency keys, pagination, and error contracts first.
  • Notifications: Model notifications as event-driven fanout with per-channel workers (email/push/webhook).

4) Reliability and Failure Strategy

  • Use strong write constraints (transactions or conditional writes) and explicit backup/restore strategy.
  • Apply strict input validation and backward-compatible versioning.
  • Track delivery state machine and dead-letter undeliverable events.

5) Validation Plan

  • Run one peak-load test, one dependency-degradation test, and one failover test.
  • Verify idempotency for all retried writes and async consumers.
  • Track user-facing SLOs first: p95 latency, error rate, and successful throughput.

6) Trade-offs to Call Out in Interviews

  • Databases: SQL gives stronger transactional guarantees; NoSQL often gives better write scaling and flexibility.
  • API Design: Rich APIs improve developer speed but can create long-term compatibility burden.
  • Notifications: Multi-channel coverage increases reach but adds per-channel failure modes and policy complexity.

Practical Notes

  • Use a database transaction to atomically check capacity and insert the RSVP - prevents overbooking.
  • Waitlist promotion: when a guest cancels, a background job promotes the next waitlisted guest and sends them an email.
  • QR code check-in: encode the RSVP ID in a QR code. The organizer's app calls an API to mark the guest as checked in.

Learn the Concept

Practice Next

Reference SolutionClick to reveal

Why This Solution Works

Request path: The solution keeps ingress, service logic, and stateful dependencies separated so each layer can scale independently.

Reference flow: Web Clients -> API Gateway -> API Service -> Primary NoSQL DB -> Message Queue -> Background Workers -> Notification Fanout

Design strengths

  • Async queue/event bus isolates bursty workloads and supports retries without blocking synchronous requests.

Interview defense

  • This design makes bottlenecks explicit (ingress, core compute, persistence, async workers).
  • It supports progressive scaling without re-architecting the core request path.
  • It keeps correctness-sensitive state changes in durable systems while offloading background work asynchronously.