← Amplitude Interview Insights

Amplitude·Software Engineer·Onsite - System Design / Architecture·Intermediate

IntermediatePrefer not to say
Jul 2026

Summary

System design round at Amplitude for a software engineering role. The prompt was a shared to-do list app, which sounds straightforward until you actually have to spec out the API and schema from scratch under time pressure.

Questions Asked (1)

Q1

Design an online application for sharing to-do lists with others. List the API endpoints and define a database schema that supports real-time updates.

System DesignAPI & IntegrationsData Modeling
Author's notes

I spent too long on the data model and barely had time to talk through the real-time piece, which was clearly the part they cared about.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements (e.g., number of users, real-time expectations, sharing permissions) and then outline the high-level architecture. Propose a RESTful API for CRUD operations and a WebSocket-based mechanism for real-time updates. Define a normalized database schema that supports efficient querying and real-time notifications.

Pro tip: Demonstrate awareness of trade-offs: for example, using WebSockets vs. Server-Sent Events vs. polling, and how to handle scaling WebSocket connections. Also, mention idempotency and conflict resolution for collaborative editing.

1. Clarify Requirements

Ask about scale (number of users, lists per user), real-time expectations (latency, consistency), and sharing permissions (read-only, edit, etc.). This shows you think before coding.

2. High-Level Architecture

Sketch the components: client apps, API gateway, application servers, database, and a real-time service (e.g., WebSocket server). Mention load balancers and pub/sub (e.g., Redis) for scaling.

3. API Design

Define REST endpoints for CRUD on lists and items, plus endpoints for sharing and permissions. Include a WebSocket endpoint for real-time updates, specifying message formats.

4. Database Schema

Design tables for users, lists, list items, and sharing permissions. Include fields for timestamps and versioning to support conflict resolution and real-time sync.

5. Real-Time Mechanism

Explain how updates propagate: when a change occurs, the server publishes an event via pub/sub, and WebSocket servers push updates to connected clients. Discuss handling reconnections and missed updates.

Key Points to Mention

  • RESTful API endpoints: GET/POST/PUT/DELETE for /lists, /lists/{id}/items, /lists/{id}/shares
  • WebSocket endpoint (e.g., /ws) for real-time updates, with message types for item added/updated/deleted
  • Database schema: users (id, name, email), lists (id, owner_id, title, created_at, updated_at), list_items (id, list_id, content, completed, position, version), shares (list_id, user_id, permission)
  • Use of versioning or timestamps for conflict resolution (e.g., optimistic concurrency control)
  • Scalability: using Redis pub/sub to decouple WebSocket servers and handle multiple instances
  • Security: authentication (JWT), authorization checks for sharing permissions

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