← Roblox Interview Insights

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

SeniorPrefer not to say
Apr 2026

Summary

Roblox system design round for a software engineer role. The question was a payment system design with some tricky data modeling requirements around time-series balance tracking. Dense problem, not a lot of fluff.

Questions Asked (1)

Q1

Design a payment system for an online game that supports in-game currency transfers between accounts. Your design should include data models and APIs for: (1) querying total inflow and outflow for any account over the last 24 hours, and (2) retrieving an hourly balance time series for the past 30 days for any account.

System DesignData ModelingAPI & Integrations
Author's notes

The first part felt manageable.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and scale, then design a data model that captures transfers as immutable events and maintains aggregated views for fast queries. Propose APIs that leverage pre-aggregated hourly and daily rollups, and discuss trade-offs between consistency, latency, and storage.

Pro tip: Emphasize idempotency and exactly-once processing for transfers to prevent double-spending, and consider using a ledger-based approach with append-only logs for auditability and easy rollup computation.

1. Clarify Requirements and Scale

Ask about expected throughput, latency requirements, consistency needs, and data retention. Understand if transfers are between players, to/from system accounts, or both.

2. Design Data Models

Propose a transfer event table (append-only ledger) with fields like transfer_id, from_account, to_account, amount, timestamp, status. Also design aggregated tables for hourly balances and daily inflow/outflow per account.

3. Define APIs

Specify endpoints: GET /accounts/{id}/flow?start=...&end=... for inflow/outflow over 24h, and GET /accounts/{id}/balance_timeseries?interval=hourly&days=30 for hourly balances. Include pagination and filtering.

4. Address Scalability and Performance

Discuss partitioning by account_id or time, using a distributed database like Cassandra or DynamoDB, and pre-computing rollups via stream processing (e.g., Kafka + Flink) to serve queries quickly.

5. Handle Consistency and Fault Tolerance

Explain how to ensure atomicity of transfers (e.g., using transactions or saga patterns), idempotency keys, and how to handle failures and retries without double-spending.

Key Points to Mention

  • Use an append-only ledger for transfers to ensure auditability and enable rollup computations.
  • Pre-aggregate hourly balances and daily inflow/outflow to meet low-latency query requirements.
  • Partition data by account_id and time to scale horizontally and enable efficient range queries.
  • Implement idempotency keys and exactly-once semantics to prevent duplicate transfers.
  • Consider using a stream processing pipeline (e.g., Kafka + Flink) to update aggregates in near real-time.
  • Discuss trade-offs between strong consistency (e.g., using transactions) and eventual consistency for aggregates.

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