Just got out of the BofA system design round for a senior software engineer role (equivalent to what other places call L5 or E5). Wanted to post while it's fresh.
The prompt was something like: design a payment notification service. Real-time alerts to customers when their card is charged. Sounded simple. It's not.
What they're actually testing, at least in my round: How you handle fan-out at scale (many users, many channels: push, SMS, email) Reliability and idempotency. Banking context means they care a lot about "what if a notification fires twice?" They explicitly asked how I'd prevent duplicate alerts. Failure modes. What happens if a downstream notification vendor (Twilio, etc.) goes down? Retry logic, dead-letter queues, circuit breakers. Latency vs. consistency tradeoffs. I got asked directly: "would you sacrifice a second of latency to guarantee delivery?" There's no right answer, they want your reasoning.
What I probably handled poorly: I dove into the schema design before establishing the scale requirements. Interviewers stopped me and asked "how many transactions per second are we talking?" Lesson: start with capacity estimates before jumping to design.
Round was 60 minutes. First 10 were requirements clarification, which I should have leaned into more. Next 30 were whiteboard-style design on a shared Miro board. Last 20 were them poking holes.
Leveling context: the recruiter said senior means you're expected to own the design end-to-end and proactively surface trade-offs. If you wait for them to ask the trade-off questions, you're probably not passing at senior level.
Prep that helped: I went through a distributed systems design primer and did a few payment-domain design exercises. The banking context means compliance and audit logging come up a lot.