System Design: Bank Account Service for a Fintech App
Context
Design a backend service that manages customer bank accounts with robust financial correctness, auditability, and scalability. The service must support core banking operations, enforce balance rules, maintain an immutable double-entry ledger, and provide strong consistency guarantees.
Requirements
-
Core features
-
Create accounts.
-
Deposits, withdrawals, and transfers between accounts.
-
Real-time balance queries.
-
Monthly statements.
-
Financial correctness
-
Enforce balance and overdraft rules.
-
Immutable double-entry ledger.
-
Transactional integrity for cross-account transfers (all-or-nothing).
-
API behavior
-
Idempotent APIs.
-
Concurrency and race-condition handling.
-
Scale and reliability
-
Multi-region scaling strategy preserving consistency and auditability.
-
Failure handling and operational monitoring.
-
Deliverables
-
Data model.
-
Core APIs (with idempotency approach).
-
Transaction flows.
-
Failure handling plan.
-
Monitoring and observability.