Stripe System Design Interview: Merchant Webhook Delivery

Based on questions reported for Stripe interviews

The interviewer opens

Hi, and thanks for joining. Welcome to your interview for the software engineer role at Stripe. We'll design a system together, and you can sketch on the whiteboard on the right of your screen as you talk. If you need to step out or take a break, the Pause button at the top right will pause the interview.

The problem is about delivering webhooks to merchants, which is core to how Stripe tells businesses about things like successful payments. It's up in the Problem tab, so please read through the requirements and ask me anything you'd like clarified before you start drawing.

The problem

Design the system that sends webhooks to merchants: when something happens in a merchant's account, such as a payment succeeding, send an HTTP request to the URL they've registered, reliably, even when their servers are slow or down.

Must do

  • Merchants register one or more endpoint URLs and choose which event types each receives
  • Every relevant account event is sent as an HTTP POST to each subscribed endpoint
  • Failed or timed-out deliveries are retried until they succeed or the retry window ends
  • Merchants can see each event's delivery attempts and their outcomes

Must hold

  • No event is ever lost once it has happened in the merchant's account
  • One slow or failing merchant endpoint must not delay deliveries to anyone else