Design a scalable banking system
Company: Meta
Role: Software Engineer
Category: System Design
Difficulty: hard
Interview Round: Technical Screen
Design a banking system that supports account creation, balance inquiry, deposit, withdrawal, and atomic transfers between accounts (including cross-currency). Specify APIs, data model (e.g., double-entry ledger), and transaction flow to guarantee ACID properties for transfers, idempotent retries, concurrency control, and overdraft prevention. Describe how you ensure durability, auditability, reconciliations, and consistency across services. Discuss scaling (sharding/partitioning), failure handling (sagas vs. distributed transactions), security (authentication, authorization, encryption, PCI considerations), rate limiting, and monitoring.
Quick Answer: This question evaluates expertise in designing scalable, reliable financial systems, testing competencies in distributed system architecture, transactional guarantees (ACID), double-entry data modeling, concurrency control, durability, security, and operational concerns such as monitoring and rate limiting.