← Roblox Interview Insights

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

SeniorPrefer not to say
May 2026

Summary

System design round at Roblox for a software engineer role. The whole thing was one big question about building a favorites/unfavorites service at massive scale, and it went deep fast.

Questions Asked (1)

Q1

Design a favorites/unfavorites service that displays real-time favorite counts for items like posts or products, handling 1 million QPS reads and 100,000 QPS writes.

System DesignTechnical Trade-offsData Modeling
Author's notes

This question sprawled way more than I expected.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements (e.g., consistency, latency, scale) and then propose a high-level architecture that separates read and write paths. Use an in-memory store like Redis for real-time counts, with a write-behind cache to a durable database, and consider sharding by item ID to handle the load. Discuss trade-offs between consistency and availability, and how to handle hot items.

Pro tip: Mention that you would use a combination of local caching and a distributed cache like Redis with read replicas to handle 1M QPS reads, and for writes, use a message queue to batch updates to the database to avoid overwhelming it.

1. Clarify Requirements

Ask about consistency (strong vs eventual), latency targets, and whether counts need to be exact or approximate. Also confirm the scale: 1M reads and 100K writes per second.

2. High-Level Design

Propose a microservices architecture with separate services for reads and writes. Use a distributed cache (e.g., Redis) for real-time counts, and a durable database (e.g., Cassandra) for persistence.

3. Deep Dive into Data Model and Storage

Design the data model: each item has a favorite count. Use Redis hashes or counters, sharded by item ID. For persistence, use a wide-column store with item ID as partition key and count as a column.

4. Handle Scale and Performance

For reads: use read replicas and local caching (e.g., CDN or in-memory). For writes: use a message queue (e.g., Kafka) to buffer writes and update Redis asynchronously, then persist to DB in batches.

5. Address Trade-offs and Edge Cases

Discuss consistency vs performance: eventual consistency may be acceptable. Handle hot items by sharding counters or using a distributed counter. Consider idempotency for writes and failure recovery.

Key Points to Mention

  • Use of Redis or similar in-memory store for low-latency reads and atomic increments.
  • Sharding by item ID to distribute load across multiple nodes.
  • Write-behind caching or asynchronous persistence to handle high write throughput.
  • Read replicas and local caching to scale reads.
  • Trade-offs between strong and eventual consistency, and how to handle hot keys.
  • Monitoring and auto-scaling to handle traffic spikes.

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