Design a mobile banking app backend
Company: Capital One
Role: Software Engineer
Category: System Design
Difficulty: medium
Interview Round: Technical Screen
## Scenario
Design the backend system for a **mobile banking app**.
Users can:
- Sign up / log in
- View balances and transaction history
- Transfer money between their own accounts
- Send money to other users (P2P)
- Pay merchants via a **third-party payment processor** (e.g., card rails / ACH / external PSP)
The system must include:
- **Authentication & authorization** (MFA, session management)
- Integration with a **third-party payment system**
- **Fraud detection / risk controls** before executing payments
- Auditability and compliance expectations typical for banking
## Requirements
### Functional
- Account management (profiles, KYC status as a stub)
- Balance + ledgered transactions
- Payment initiation, status tracking, and reconciliation
- Webhooks/callbacks from the third-party payment provider
- Customer support features: ability to trace a payment end-to-end
### Non-functional
- Strong consistency for balances/ledger
- Idempotent payment APIs
- High availability and safe degradation
- Security: encryption, secrets, least privilege
- Observability: metrics, logs, traces
## Deliverables
Describe:
1) APIs and core services
2) Data model (ledger vs. balance)
3) Payment flow (including idempotency and retries)
4) Fraud detection placement and how it interacts with execution
5) Failure handling and reconciliation
Quick Answer: This question evaluates a candidate's competency in designing secure, highly available backend architecture for financial services, including API and service design, data modeling (ledger vs. balance), distributed systems concerns, external payment integration, idempotency, fraud detection, observability, and compliance.