System Design: Core Banking Platform
Problem
Design a banking system that supports:
-
Account creation
-
Balance inquiry
-
Deposit and withdrawal
-
Atomic transfers between accounts, including cross-currency
Specify:
-
External APIs (with idempotency)
-
Data model (double-entry ledger)
-
Transaction flows guaranteeing ACID, overdraft prevention, and concurrency control
-
Durability, auditability, reconciliation, and cross-service consistency
-
Scaling strategy (sharding/partitioning)
-
Failure handling (sagas vs. distributed transactions)
-
Security (authentication, authorization, encryption, PCI considerations)
-
Rate limiting and monitoring
Assume you are designing for a high-traffic consumer banking workload with mobile/web clients and internal services. You may introduce minimal context (e.g., a base reporting currency) where needed.