interview prep

How Stripe’s bug bash and API rounds decide the offer

Stripe hands you a private GitHub repo, a page of API docs, and an open internet connection, then asks you to make something work end to end. That setup tells you most of what the loop is about. The questions are not puzzles pulled from a problem bank. They look like a Tuesday at work: parse a file, call an internal service, handle the response that comes back malformed, and write something a teammate could read without wincing.

Engineers who spend three months grinding array problems and then walk into a Stripe onsite tend to get caught off guard. The coding still counts, but it is the least distinctive part of the day. Where Stripe sorts candidates is the integration round, the bug bash, and for most engineering roles, the API design conversation. That is usually where the offer is decided.

The recruiter screen and the “Why Stripe?” question

The first call runs about 30 minutes and covers your background, recent projects, and one question recruiters listen to closely: why Stripe specifically. A generic answer about wanting to work on hard problems lands flat, because they have heard it a thousand times. What works is showing you understand what Stripe actually is, which is financial infrastructure shipped as an API. If you can say why developer experience is the product, or name a part of the API you have used and have an opinion about, you have already stepped out of the undifferentiated pile.

After that comes a technical phone screen, usually a practical coding problem in a shared editor. Nothing exotic. The bar is whether you write clean, working code and talk through your reasoning without going quiet for long stretches.

The integration round, where the job shows up

This is the round people remember. You get access to a private repository and documentation for an internal API, plus full internet access for syntax and library lookups. The tasks stack on each other. A common shape: read a set of files, pull specific fields out of them, then call a provided API to process the result. Once that works, a second task lands. Now you are fetching JSON from an external endpoint, the response shape is not quite what the docs implied, and you have to reshape it before your earlier code will take it.

The skills under test rarely show up on a whiteboard. Can you read unfamiliar code and docs fast. Do you check the response you actually got instead of the one you assumed you would get. When something breaks, do you read the error or start guessing. The people who do well keep a tight loop: run it, read the output, adjust, run it again. The people who struggle write fifty lines, run nothing, and then stare at a stack trace they cannot place.

One practical thing: Stripe gives you internet access on purpose. Use it the way you would at work. Look up the library signature. Read the doc page for the function you half remember. Nobody scores you on having memorized argument order, and pretending you did just burns time you need for the actual task.

The bug bash

The bug bash is the round candidates find hardest to prepare for, and that is by design. You are handed code in the form of a GitHub issue. Something is broken. The interviewer gives you very little context and watches how you orient yourself before you touch anything.

Strong debugging here looks like a method, not a flash of intuition. You reproduce the failure first. You form a hypothesis about where the problem lives, then test it with one small change or a single print statement rather than a rewrite. You shrink the search space instead of thrashing across the whole file. The moment you are changing three things at once, you have lost the thread, because now you cannot tell which change did anything.

The classic trap is the candidate who reads two lines, announces “oh, it’s the off-by-one here,” edits it, and is wrong. Then edits something else. Then something else. Twenty minutes in there is no working theory and the code is in worse shape than when it started. The interviewer is not grading whether you spot the bug in the first minute. They are grading whether your process would find any bug, including one neither of you has seen before.

The API design round decides more offers than the coding does

For engineering candidates this is the round that carries the most weight, and plenty of people walk in not knowing it is part of the loop. Stripe’s whole business is a well-designed API, so the engineers interviewing you have strong, specific taste about interfaces. You will be asked to design an API for some product surface: a payments flow, a subscriptions model, a webhook system, something with real edge cases hiding in it.

What they listen for is almost never the happy path. They want to hear how you handle the parts that bite teams six months later. How do you name fields so a developer guesses right without opening the docs. What does an error response contain, and is it something a client can act on or just a 400 that says “invalid request.” What happens when a request arrives twice, so the customer is not charged twice for one purchase. What is versioned, and what happens to clients on the old version when you change the shape. Idempotency comes up constantly, because that is the exact problem Stripe solves for real money.

The candidates who do well treat the API as a product whose users are developers. They reason out loud about the tension between a clean interface and an efficient one, pick a side, and defend it. The ones who struggle produce a set of endpoints that technically function and never say a word about what happens when the network drops in the middle of a call.

System design, behavioral, and how the loop scales with level

A full software engineer onsite usually runs five rounds: general coding, debugging, integration, system design, and behavioral. Senior loops often add an architecture round or a second behavioral pass for management signal, and the day is sometimes split across two half-days to cut fatigue. New grad and entry-level loops are leaner, frequently coding, integration, and debugging with no standalone system design round.

Round What it actually tests The common miss
Integration Reading unfamiliar code and docs, tight build-and-test loops Writing a lot before running anything
Bug bash A repeatable debugging method under low context Guessing and changing several things at once
API design Interface taste, error handling, idempotency, versioning Designing only the happy path
System design Reliability and data-model reasoning under failure Hand-waving past retries and consistency
Behavioral Ownership, collaboration, clear writing Vague stories with no concrete outcome

The system design round leans toward Stripe’s real concerns: reliability, correctness when things fail, and data models that hold up over time. A prompt like “design a system that processes payments and never double-charges on a retry” sits right in their world. Talk about exactly-once effects through idempotency keys, and about what you do when a downstream call times out but might have already succeeded.

Behavioral at Stripe is real, not a warm-up. They care about ownership and about whether you can write, since a lot of the company runs on written documents rather than meetings. Expect questions about a time you made a call with incomplete information, or shipped something and watched it break in production. Bring specifics: what you decided, what actually happened, what you changed afterward.

What to practice, and what to skip

Spend less time on hard graph problems and more on what the loop rewards. Build a small project that calls a real third-party API and handles the responses that come back wrong, because that is the integration round in miniature. Practice debugging code you did not write: clone an open-source repo, find an open bug report, and fix it while narrating your method out loud. Read Stripe’s own API docs closely, not to memorize them but to absorb why they read the way they do, since the API round wants that taste reflected back at it.

One more thing to internalize: Stripe interviewers reward thinking out loud and they penalize silence. The entire loop is built to watch how you work, and the answer alone is not what gets you the offer. A candidate who states a wrong hypothesis, tests it, and corrects course reads as someone you would want on the team. A candidate who goes quiet for ten minutes and surfaces with perfect code reads as a coin flip the interviewer cannot calibrate.

newsletter

What's actually being asked right now

Interview patterns & comp trends, straight to your inbox.

No spam. Unsubscribe anytime.

newsletter

What's actually being asked right now

Interview patterns & comp trends, straight to your inbox.

No spam. Unsubscribe anytime.

1972 Soviet postage stamp commemorating the Mars 2 probe

worth a read

Mars For The Rest of Us — a weekly-or-more deep dive on the technical side of Mars exploration: rocket propulsion, microbiology, mission architecture, and everything in between. Written by Maciej Ceglowski.

Read it on Substack →
Scroll to Top