← Coinbase Interview Insights

Coinbase·Software Engineer·Onsite - Coding / Algorithms·Intermediate

IntermediatePrefer not to say
May 2026

Summary

Coinbase coding round for a software engineer role. The problem was banking-themed and manageable in isolation, but the follow-ups piled on fast enough that time became the real enemy.

Questions Asked (1)

Q1

Design a basic banking system. Then extend it to support multiple currencies and the ability to replay transaction history.

System DesignData ModelingTechnical Trade-offs
Author's notes

The core part was fine, nothing that should trip you up if you've done any OOP design before.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and defining core entities (accounts, transactions, ledgers) for a single-currency system. Then extend the model to support multiple currencies by introducing currency-aware accounts and exchange rates, and design an append-only event log to enable replaying transaction history. Discuss trade-offs between consistency, scalability, and auditability, and how you would handle concurrency and idempotency.

Pro tip: Emphasize the importance of an immutable, append-only ledger and idempotent transaction processing to ensure auditability and correctness, especially in a financial system like Coinbase's. Also, proactively discuss how you would handle currency conversion and rounding to avoid floating-point errors.

1. Clarify Requirements and Scope

Ask clarifying questions to understand functional and non-functional requirements: expected scale, consistency needs, supported operations (deposits, withdrawals, transfers), and whether real-time currency conversion is needed.

2. Design Core Data Model and API

Define entities like User, Account, Transaction, and Ledger. Sketch basic APIs for creating accounts, depositing, withdrawing, and transferring funds. Ensure the model supports auditing and idempotency.

3. Extend for Multiple Currencies

Introduce Currency as a first-class entity, associate each account with a currency, and design how to handle cross-currency transfers using exchange rates. Discuss where to store rates and how to handle rounding and precision.

4. Enable Transaction Replay

Design an append-only event log (or event sourcing) where every state change is recorded as an immutable event. Explain how replaying events from the log can reconstruct account balances and audit history.

5. Address Trade-offs and Scalability

Discuss trade-offs: consistency vs. availability, SQL vs. NoSQL, synchronous vs. asynchronous processing. Consider partitioning by user or currency, and how to ensure idempotency and handle failures.

Key Points to Mention

  • Use of an immutable, append-only ledger for auditability and replayability.
  • Idempotency keys to prevent duplicate transactions.
  • Handling currency conversion with fixed-point arithmetic or decimal types to avoid floating-point errors.
  • Event sourcing or CQRS pattern to support replaying transaction history.
  • Concurrency control mechanisms (e.g., optimistic locking, serializable transactions) to maintain consistency.
  • Partitioning and sharding strategies for scalability across users and currencies.

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