The short version of everything below: Block is not trying to trip you. They are trying to find out if you would be safe to hand a service that moves real dollars. The whole loop is one long test of that single question, and once you see it that way, every round stops feeling random.
The loop at a glance
Six rounds, one question underneath all of them: would you be safe with real money.
- Recruiter screen (30 min). Motivation, level fit, comp expectations, which business unit. Low stakes, do not fumble the comp number.
- Technical phone screen (60 min). One medium-hard coding problem, usually dressed in payments clothing. The bar is clean working code plus narration.
- Machine-coding / LLD (60 to 90 min). Build a small system that actually runs. If nothing executes by the end, the round is lost. This is the one that separates Block from pure-LeetCode shops.
- System design (L5+, 60 min). Idempotency, exactly-once versus at-least-once, reconciliation, failure handling. Payments obsessions, not generic scale.
- Behavioral (45 min). Ownership and honesty about mistakes. A clean confession scores higher than a clean record.
1Snapshot, read this first#
| Thing | Reality at Block (Square) |
|---|---|
| Business units | Square (merchant), Cash App, Afterpay, Bitkey, TIDAL, plus platform teams |
| Levels you'll see | L3 (new grad), L4 (mid), L5 (senior), L6 (staff) |
| Process length | 3 to 5 weeks, sometimes faster if they're hot on you |
| Rounds | Recruiter screen, 1 tech phone screen, then a 4 to 6 round onsite |
| What wins | Clean working code, thinking out loud, caring about correctness and the merchant/customer |
| What fails | Silent coding, over-engineering, ignoring edge cases in money math, no questions back |
| US comp (TC) | L3 ~$160K, L4 ~$225K to $245K, L5 ~$280K to $310K |
| Canada comp (TC) | roughly CAD $130K to $230K across L3 to L5 |
| India comp (TC) | roughly INR 30L to 70L+ across levels (Bengaluru platform teams) |
| UK/other | Block hires sparingly in EU/UK; expect London bands lower than US, FX-adjusted |
The one thing to internalize: this is a payments company first, and every round bends back to that.
- They test whether you actually care about money being correct, not just whether you can reverse a linked list.
- The sentence that wins offers: stop mid-problem and ask "wait, what happens if the charge partially fails here, do we retry or roll back?" unprompted.
- That single question flips borderline debriefs to a yes, because it shows you think about failure before it happens, which is the instinct a payments team is buying.
Not raw algorithm speed. Safety with money. Every prompt about a "charge" or an "account" is a test of whether you notice the correctness trap they planted. Name it out loud and you are already ahead of most of the room.
2Getting the call (the part most guides skip)#
Block reads resumes with a human more often than pure-ATS giants do, but the funnel is still a funnel. A cold application into Cash App or Square sits in a pile of hundreds.
Get a referral. It roughly triples your odds of a recruiter opening your profile.
- Not nepotism. A referral means a real engineer put their name next to yours and said you can ship.
- That is the cheapest credibility you will ever buy.
- Spend an hour on LinkedIn finding anyone one or two hops from you at Square, Cash App, or Afterpay.
Make the ask specific, so it can be acted on in thirty seconds.
- Weak: "would you refer me?"
- Strong: "I'm applying to the Cash App payments team, here's the one project that makes me a fit, would you be open to referring me?"
- Name the team and name the project. Vague asks get ignored; specific ones get forwarded.
Your resume needs quantified bullets, not "worked on backend services." Aim for this shape:
Rebuilt the payout reconciliation job in Go, cut nightly run time from 40 min to 6 min and eliminated a class of double-credit bugs affecting ~0.2% of merchant settlements.
That bullet does three things Block loves, and your best two or three should hit all three:
- A real number (40 min to 6 min, 0.2%).
- A correctness win (eliminated double-credit bugs).
- A money or merchant word (payout, reconciliation, settlements).
Mirror the stack in the JD, and speak the money vocabulary.
- If the role says Kotlin and gRPC, the words "Kotlin" and "gRPC" belong on your resume if they're true.
- Keywords that matter: the BU's language (Java/Kotlin for Square, Kotlin/Go for Cash App, Rust for Bitkey), plus "distributed systems," "idempotency," "event-driven," "payments," "high availability."
- If you have touched anything regulated (PCI, ledgers, reconciliation, settlement), say so by name. That vocabulary tells a skimming recruiter you have worked on money before, and they stop on your resume instead of the next one.
3The loop at a glance#
| Round | Length | What it tests |
|---|---|---|
| Recruiter screen | 30 min | Motivation, level fit, comp expectations, which BU |
| Technical phone screen | 60 min | One medium-hard coding problem, often payments-flavored |
| Onsite: algorithms | 45 to 60 min | DSA, medium-hard, clean code |
| Onsite: machine coding / LLD | 60 to 90 min | Build a small working system from scratch |
| Onsite: system design (L5+) | 60 min | Scale, correctness, tradeoffs |
| Onsite: hiring manager / behavioral | 45 min | Ownership, values, comfort with regulated money |
| Onsite: craft / domain (sometimes) | 45 min | Deeper tech or past-project deep dive |
How the levels change the loop:
- New grads and L3 often get a lighter version: phone screen plus 3 to 4 onsite rounds, with CS fundamentals heavier than system design.
- System design ramps up at L5, where idempotency and reconciliation get serious.
How the decision actually gets made:
- Each onsite interviewer writes an independent written debrief and scores you hire or no-hire with evidence.
- The loop then meets to calibrate. One strong advocate plus no hard objections usually clears it.
- One interviewer who writes "could not get working code out of the machine-coding round" can sink you even if the other four liked you.
- There is no round you can coast through, because in the debrief any single room can be the one that decides.
4The coding or technical rounds#
The honest truth about Block coding: the DSA is medium to medium-hard, not the sadistic hard-tier stuff from some HFT shops.
- Comfortable with most LeetCode mediums and the easier hards? You're in range.
- What separates offers from rejections is rarely the algorithm. It's how you work while you solve it.
- I have passed candidates who needed a nudge on the optimal approach and failed candidates who typed the perfect solution in silence, because the first group showed how they think and the second did not.
The patterns they reuse most, roughly in order of frequency:
- Hash maps and frequency counting (transaction dedup, rate limiting, top-seller counts).
- Two pointers and sliding window (rolling transaction windows, max spend in a period).
- BFS/DFS and basic graph traversal (fraud ring detection, dependency order).
- Heaps and top-K ("top merchants by volume this hour").
- Intervals and scheduling (settlement windows, overlapping holds, booking slots).
- Design-y problems: build an LRU cache, a rate limiter, a simple in-memory key-value store with TTL.
Notice the flavor: Block dresses a standard problem in payments clothing.
- The phone screen is often "process a stream of transactions and detect duplicates," or "model a buy-now-pay-later installment schedule and answer running-balance queries."
- Underneath it's a hash map and some careful arithmetic. The applied skin is the point.
- When the prompt says "charge" or "account," pause and ask what a duplicate means and what a failed charge does. They planted those words on purpose, and the question is whether you notice.
I am not grading whether you reach the optimal solution on your own. I am grading whether I would trust you to write the balance-update code that runs in production. A candidate who asks "are amounts in cents or floats?" before typing has told me more than one who silently nails the algorithm. Narration is the signal; the answer is almost secondary.
How to win the round, in order of what I weight:
- Clarify first. Input size, integers (cents) versus floats (should be cents, and good candidates say so unprompted), can values be negative, what the API shape is. Thirty seconds of real questions signals seniority louder than anything you type: you build the right thing before you build the thing right.
- Talk while you code. "I'm iterating once to build the balance map so lookups are O(1) after" is the kind of sentence that earns trust. Narrate the plan before you type it, not after. Silence makes me assume you memorized the problem.
- State complexity out loud, unprompted. Time and space before I ask, then whether it's good enough. "This is O(n) time, O(n) space, and for a few million transactions an hour that is fine; I'd only shard the map if we outgrew one host" is a complete answer.
- Test your own code. Walk a real example by hand, then an edge case: empty input, a refund larger than the original charge, a duplicate transaction ID, an integer that overflows a cents counter. Catching your own bug is a green flag. I have never docked a candidate for finding their own mistake, and I have docked plenty for shipping a bug they never looked for.
Practice in the BU's language if you know it.
- Idiomatic Kotlin or Go beats clumsy Python here, because they ship in those languages and watch for fluency.
- Do you reach for the right standard-library container, handle null the Kotlin way, know what a goroutine costs.
- Fluency is a quiet signal that you'll be productive in week one instead of week six.
5The machine-coding / low-level design round#
This is the round that trips up candidates coming from pure-LeetCode prep, and it's very Block.
- You get a loosely specified problem and 60 to 90 minutes to build something that actually runs.
- Not pseudocode. Real, compiling, testable code with classes and interfaces that you execute in front of the interviewer.
- If nothing runs by the end, the rest almost does not matter.
Typical prompts:
- An in-memory payments ledger:
credit,debit,getBalance, with overdraft rules. - A parking-lot or rate-limiter style system, built out with real classes and state.
- A vending machine or coupon engine with explicit state transitions.
- A command processor that reads instructions and mutates an account, with validation at each step.
What they're grading, and how much it counts:
- Does it work? Can you run it and show correct output for a real input. Non-negotiable, and the biggest single factor. Code that compiles and prints the right balance beats code that is beautiful and theoretical, every time.
- Is it well-modeled? Clean separation: entities, services, a storage layer behind an interface. Not one 300-line main that does everything. I want a
Ledgerthat talks to anAccountStoreinterface, not a hash map floating in a static method. That interface is what makes the extension at the end a two-line change. - Did you handle the money edges? Negative amounts, insufficient funds, idempotent repeated commands, concurrent-ish updates. A
debitthat can drive a balance below zero without a rule is an instant flag, because in production that is a customer spending money they do not have. - Can you extend it? Near the end they'll almost always say "now add refunds" or "now support multiple currencies." Clean code makes this a two-minute change. A tangle makes you sweat and rewrite. That is the real test the extension probes: not whether you can code refunds, but whether your first design left room for them.
Reveal the answer
A framework that works:
- Spend the first 5 minutes agreeing on the interface and core entities out loud, then start typing.
- Write the simplest thing that passes one happy-path test (credit then getBalance) and run it. Get it green early, inside the first 20 minutes.
- Layer in validation and edges one at a time, running after each.
- Do not design the perfect abstraction up front, and do not write ten methods before you run anything.
Working-then-clean beats clean-but-broken every single time. I have passed candidates whose code was rough but ran and handled a refund correctly, and failed candidates with gorgeous class diagrams and nothing that executed when the timer hit zero.
The timer is the whole game. Pace to it, or the prettiest design in the room loses to the one that prints the right balance.
For L5 and up you also get a system design round. The prompts are BU-specific and real:
- Design the Square payment-processing pipeline for peak merchant TPS.
- Design Cash App's peer-to-peer transfer system.
- Design a settlement / reconciliation service.
- Design the idempotency layer for a charge API.
Run the standard design loop, then weight it toward their obsessions:
- Clarify scale and SLAs first: charges per second at peak, latency the merchant will tolerate. A card swipe at a register should feel instant, so target well under a second end to end.
- Sketch the API. Draw the data model and say out loud "amounts in minor units, integers, never floats."
- Walk the write path and the read path separately.
Then spend real time on the three things Block cares about more than most:
- Idempotency. Charge exactly once even if the client retries five times, keyed on a client-supplied idempotency key with a unique constraint so the second attempt is a no-op.
- At-least-once versus exactly-once. You will almost always build at-least-once delivery plus a dedup/reconciliation layer, because true exactly-once across a network is a fairy tale. Say so, and say how you close the gap.
- Failure handling. When the downstream card network times out mid-charge: a pending state, a timeout, a reconciliation sweep that resolves the unknowns.
Bring up idempotency keys and a reconciliation job unprompted and you've basically won the round.
Describing a charge API that would double-charge on a client retry, then not noticing when I ask "what if the client times out and retries?" At a payments company that is not a missed optimization, it is a customer charged twice. If idempotency is not in your first sketch of a money-movement system, I have already written the concern down.
6Behavioral and culture fit#
Block's culture is genuinely a little different, and faking it reads badly.
- They talk about the economic empowerment mission constantly.
- They prize ownership and first-principles thinking over following a playbook.
- Because this is regulated money, they want people who are careful and honest about mistakes rather than slick.
If you broke something, own it plainly.
- The interviewer wants "I broke it, here's what I learned," not a polished story where nothing was your fault.
- A clean confession scores higher than a clean record, because a payments team needs people who surface their own bugs.
Prepare 5 to 6 STAR stories with real numbers in the results:
- A hard technical decision.
- A conflict with a teammate.
- A time you shipped under ambiguity.
- A failure you owned.
- A time you pushed back on a decision.
- A time you went out of your way for the end user.
Vague outcomes like "it went well" land flat, because the interviewer has to write down evidence and "it went well" is not evidence.
One full worked example:
Situation: Our checkout service was double-charging about 1 in 500 customers during a retry storm after a downstream timeout. Task: I owned the payments integration, so it was on me to stop the bleeding and fix the root cause without taking checkout offline. Action: I shipped a fast mitigation first: a short-TTL dedup cache keyed on the client request ID, so retries within the window became no-ops. Then I did it properly, adding a persistent idempotency key on the charge table with a unique constraint, so the second insert failed cleanly instead of charging again. I wrote a reconciliation job to find and auto-refund the charges we'd already doubled, and I messaged the affected customers before support tickets came in. Result: Double-charges dropped to zero, we proactively refunded 1,900 customers totaling about $54K before they complained, and the idempotency pattern got adopted as the template for three other services.
That story hits ownership, correctness, caring about the customer, and hard numbers at once. The double-charge-into-idempotency arc is almost the platonic ideal of a Block story. If anything in your history even rhymes with it, use it, and lead with the number you moved.
7Your prep plan#
4-week plan
- Week 1: 25 to 30 LeetCode mediums across hash maps, two pointers, BFS/DFS, heaps, intervals. Relearn complexity analysis cold so you can state it without thinking.
- Week 2: Machine-coding reps. Build an in-memory ledger, a rate limiter, and a parking lot from scratch, each running with tests, in your target language. Time yourself to 60 minutes each.
- Week 3: System design. Study idempotency, exactly-once vs at-least-once, reconciliation, sharding, caching. Do 4 mock designs out loud, at least two payments-flavored.
- Week 4: Write your STAR stories. Do 2 full mock loops with a friend who will push back. Polish resume and get a referral in before you spend a day coding.
2-week plan
- Days 1 to 5: 20 mediums, biased to the patterns above, always timed, always talking out loud.
- Days 6 to 9: 4 machine-coding builds end to end, running code only, each with an "add refunds" extension you implement live.
- Days 10 to 12: 3 system design mocks weighted to payments correctness.
- Days 13 to 14: STAR stories plus one full mock loop.
2-day crash plan
- Day 1 AM: 6 mediums (hash map, sliding window, heap, intervals, graph, LRU cache). Verbalize everything, even alone.
- Day 1 PM: Build one in-memory ledger with credit/debit/balance/refund, running, with edge cases, then extend it to two currencies.
- Day 2 AM: Read one solid idempotency plus payment-pipeline design writeup. Sketch Cash App P2P on paper, write path and read path.
- Day 2 PM: Write 4 STAR stories with numbers. Sleep a full night; tired beats prepared here.
8Why people get rejected at Block#
- Silent coding. They solved it but never explained their thinking, so I couldn't tell understanding from memorization. A correct answer with no narration often scores lower than a slightly wrong one reasoned out loud.
- Ignored the money edges. No handling for refunds, negative amounts, or duplicate requests. At a payments company that reads as careless, and careless is the one thing they cannot hire.
- Over-engineered the machine-coding round. Spent 40 minutes on abstractions and shipped nothing that ran. The timer ends and there's no output to show.
- Floats for money. Floating point for currency instead of integer minor units. Small thing, huge signal, because 0.1 plus 0.2 not equaling 0.3 is exactly the bug that costs a payments company money.
- No idempotency instinct in design. Described a charge API that would double-charge on retry and didn't notice when asked "what if the client times out and retries?"
- Flat behavioral answers. No ownership, no numbers, or blaming teammates for a failure. "My teammate shipped the bug" is a no-hire sentence.
9The offer, comp and negotiation#
US total comp, roughly:
- L3 around $160K.
- L4 around $225K to $245K.
- L5 around $280K to $310K, climbing well past that at staff and above.
- Packages are base plus RSUs plus a bonus, and the equity is a real chunk, not a rounding error.
Outside the US:
- Canada bands sit lower in local dollars, roughly CAD $130K to $230K across L3 to L5.
- India platform roles in Bengaluru land roughly INR 30L to 70L+ depending on level.
- Block hires lightly in the UK/EU; expect London numbers below US, FX-adjusted.
Three negotiation tips that actually work here:
- Negotiate the equity, not just base. Block's RSU component has the most give, because base sits inside a tighter band tied to level. Ask for more stock first, and ask as a specific dollar figure per year ("another $20K per year in RSUs"), not a vague "more equity."
- Bring a competing offer or a real number. "I have an offer at X TC with Y in equity" moves things far more than "I was hoping for more." No number means no room to push, so put the exact figure on the table.
- Clarify the level early. The gap between L4 and L5 is roughly $50K to $70K TC in the US, so get it right during the loop. If your experience is borderline, make the case for the higher level while interviewing, because re-leveling after an offer lands is much harder than aiming high from the start.
10FAQ#
"Is Block's coding harder than Google's?"
"Do I need to know the specific BU's language?"
"What's the machine-coding round really looking for?"
"How much system design do new grads get?"
"How long does an offer take?"
Sources: techinterview.org Block guide, levels.fyi Block salaries, interviewing.io Block questions, DesignGurus Block process.
What you can now explain in the room
- Why the whole Block loop is one test of whether you are safe with real money.
- How to win a coding round on narration and clarifying questions, not just the optimal algorithm.
- Why "get it running in the first 20 minutes" beats a perfect class diagram in the machine-coding round.
- How to defend idempotency keys, at-least-once plus reconciliation, and a pending state for a timed-out charge.
- Why money is always integer minor units and never a float, and why that one choice is a hiring signal.
- How to tell a STAR story that leads with the number you moved and owns the bug you shipped.
Want this turned into a dated, day-by-day plan built around your actual loop date? Map your weeks backward from the onsite and you'll walk in calm.
Get a prep plan built around your Block (Square) interview
Tell us the role and your interview date. We will send back a dated, day by day plan. Free.