Design a bank account ledger
Company: Coinbase
Role: Software Engineer
Category: System Design
Difficulty: hard
Interview Round: Take-home Project
Design a bank account ledger service supporting deposits, withdrawals, transfers, balance queries, and transaction history. Define APIs, data model, and how to ensure ACID semantics for single-account updates and atomic multi-account transfers. Use a double-entry ledger for auditability, include idempotency and exactly-once processing, and explain concurrency control, reconciliation with external payment rails, fraud checks, limits, and dispute handling. Describe sharding, indexing, read replicas, and recovery strategies to scale and maintain consistency.
Quick Answer: This question evaluates understanding of distributed systems, transactional databases, double-entry ledger accounting, idempotency, concurrency control, reconciliation with external payment rails, and operational concerns for financial systems.