← Figma Interview Insights

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

SeniorPrefer not to say
May 2026

Summary

Figma system design round focused on building an async job scheduler from scratch. The reliability and failure handling portion was where things got interesting, and honestly a bit uncomfortable.

Questions Asked (2)

Q1

Design an asynchronous job scheduler that supports both immediate jobs and delayed/scheduled jobs, where delayed jobs run as soon as their scheduled time arrives.

System DesignTechnical Trade-offs
Author's notes

I started with the obvious stuff: a queue for immediate jobs, a separate store for delayed ones with a polling loop to promote them when their time comes.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements (scale, latency, durability, ordering) and then propose a high-level architecture that separates immediate and delayed job handling. Use a time-ordered data structure (e.g., min-heap or timing wheel) for delayed jobs and a queue for immediate jobs, with workers polling for due jobs. Discuss trade-offs between polling and event-driven approaches, and how to ensure reliability and scalability.

Pro tip: Emphasize the importance of idempotency and exactly-once semantics, as job schedulers often face duplicate execution risks. Also, mention how you would handle clock skew and time zone issues, which are common pitfalls in distributed scheduling.

1. Clarify Requirements

Ask about scale (jobs per second), latency requirements, durability, ordering guarantees, and whether jobs can be cancelled or updated. This shapes the design and trade-offs.

2. High-Level Architecture

Propose components: a job submission API, a persistent job store (e.g., database), a scheduler service, and worker pool. Separate immediate and delayed job paths for efficiency.

3. Delayed Job Handling

Use a time-ordered data structure like a min-heap or hierarchical timing wheel to efficiently find due jobs. Discuss how to persist and recover this structure.

4. Execution and Reliability

Workers poll for due jobs, execute them, and update status. Ensure at-least-once execution with idempotency, and handle failures with retries and dead-letter queues.

5. Scalability and Trade-offs

Discuss partitioning (e.g., by job ID or time), using distributed queues (e.g., Kafka, SQS), and trade-offs between polling frequency, latency, and resource usage.

Key Points to Mention

  • Use of min-heap or timing wheel for efficient delayed job scheduling
  • Persistence and recovery of scheduled jobs to survive restarts
  • Idempotency and exactly-once semantics to handle duplicate executions
  • Partitioning and sharding strategies for scalability
  • Handling clock skew and time zone issues in distributed systems
  • Trade-offs between polling and event-driven notification (e.g., using a delay queue)

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

Q2

How does your design handle worker crashes, scheduler failures, retries, and duplicate execution? Can you actually achieve exactly-once execution?

System DesignTechnical Trade-offsAPI & Integrations
Author's notes

The exactly-once question is kind of a trap in the best way.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the system's requirements and constraints, then explain the failure modes and how your design handles each (worker crashes, scheduler failures, retries, duplicates). Finally, discuss the trade-offs and whether exactly-once is achievable, likely concluding that it's not truly possible but can be effectively simulated with idempotency and deduplication.

Pro tip: Acknowledge that exactly-once is a myth in distributed systems; instead, focus on achieving effectively-once semantics through idempotent operations and deduplication, which shows deep understanding and pragmatism.

1. Clarify requirements and constraints

Ask about the system's consistency, availability, and latency requirements, and whether the interviewer expects a theoretical or practical answer. This sets the stage for a tailored response.

2. Explain failure handling mechanisms

Describe how your design detects and recovers from worker crashes (e.g., heartbeats, leases) and scheduler failures (e.g., leader election, replication). Mention retry policies with exponential backoff and jitter.

3. Address duplicate execution and idempotency

Discuss how retries can cause duplicates and how you mitigate them using idempotent operations, unique keys, or deduplication stores. Emphasize that exactly-once delivery is impossible, but effectively-once processing can be achieved.

4. Discuss trade-offs and alternatives

Compare at-least-once vs. at-most-once vs. effectively-once, and explain the trade-offs in terms of complexity, performance, and cost. Mention how Figma's specific use case might influence the choice.

5. Conclude with a clear stance

Summarize that exactly-once execution is not achievable in distributed systems due to the Two Generals' Problem, but you can design for effectively-once semantics with idempotency and deduplication.

Key Points to Mention

  • Two Generals' Problem and the impossibility of exactly-once delivery
  • Idempotency keys and deduplication strategies (e.g., storing processed message IDs)
  • Retry mechanisms with exponential backoff and jitter to avoid thundering herd
  • Worker crash detection via heartbeats and leases, and scheduler failover using leader election (e.g., Raft, Paxos)
  • Trade-offs between at-least-once, at-most-once, and effectively-once semantics
  • Real-world examples (e.g., Kafka, Flink) and how they handle exactly-once processing

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