The loop at a glance
Five rounds, one bar. Everything below is how to clear it.
- Machine-coding is the signature round. Build a small real program in stages, each stage adding a rule that breaks a rigid first design. They want to see how your code bends.
- Tests are not optional. At a bank, untested money code is a liability. Write a failing test, make it pass, repeat. This single habit decides more loops than any algorithm.
- Design starts simple and names its pressure. Lead with a correct ledger, reach for idempotency the instant retries appear, and only add Kafka or sharding when you can name the bottleneck.
- Values carry real weight. Transparency, ownership, customer-first, kind collaboration. Brilliant jerks get passed on, and "brilliant" buys no pass on "jerk."
- Narrate everything. Silent coding and hand-wavy design both read as "no signal." If they cannot see your thinking, you do not get credit for it.
1Snapshot, read this first#
| Thing | What it looks like |
|---|---|
| Roles | Backend (mostly Go), Mobile (Swift/Kotlin), Web (TypeScript), Platform/SRE, Data |
| Levels | E3 (new-ish), E4 (mid), E5 (senior), E6 (staff), going up |
| Process length | Usually 3 to 5 weeks end to end |
| Rounds | Recruiter screen, take-home or live machine-coding, system/technical design, behavioral/values, sometimes a final with a senior leader |
| What wins | Clean incremental code, thinking out loud, strong product sense, humility, real ownership stories |
| What fails | Silent coding, over-engineering, no tests, hand-wavy design, talking down to people |
| Comp UK (E4/E5) | Base roughly £75k to £120k, plus equity (options) and benefits |
| Comp US (remote/select) | Base roughly $150k to $210k depending on level and location, plus equity |
Where the jobs actually are.
- Monzo is UK-first: the bulk of hiring is London and UK-remote.
- A growing US presence (they expanded into the US market) means some roles are US-based or US-remote.
- No big India engineering org, so applying from India usually means UK-remote eligibility or relocation, not a local office.
This is a product company that happens to be a bank. They care less about you memorizing graph algorithms and more about whether you ship safe, correct, well-tested code that moves real money without breaking. A single off-by-one in a ledger is a regulator problem, a customer-trust problem, and a 2am incident, all at once. That weight is why every round keeps circling back to correctness, testing, and failure handling.
2Getting the call (the part most guides skip)#
Monzo gets a flood of applications, and the cold-apply hit rate is low enough that a strong CV can sit in a queue for weeks. Here is what actually moves you up the pile.
Referrals work, but softly.
- A referral gets your CV read by a human instead of a filter. It will not carry you through a bad interview, but at a company this oversubscribed the shot is most of the battle.
- Monzo engineers are unusually open on LinkedIn and in the Go and open-source community, so a genuine message lands better than you would expect.
- Reference something specific they built or wrote ("I loved your talk on sharded Postgres, I'm applying for backend, any tips?").
- Generic "can you refer me" DMs get ignored. A message that proves you read their work gets a reply.
Write bullets that show outcome, not activity.
- Recruiters and hiring managers read for impact. Do not write "worked on payments service."
- Write something like:
Rebuilt the idempotency layer for our payments API in Go, cutting duplicate-charge incidents by 90% and handling 4k requests/sec at p99 under 40ms.
- That one bullet proves three Monzo signals at once: you understand idempotency, you measure at p99 not average, and you think about failure modes that cost customers money.
- Numbers plus the language (Go is a huge plus) plus money-and-correctness context beats ten vague lines.
ATS keywords that matter for Monzo.
- Backend: Go (Golang), microservices, Kubernetes, gRPC, Cassandra, event-driven, Kafka/NSQ, distributed systems, idempotency, observability.
- Mobile: Swift, Kotlin, SwiftUI, Jetpack Compose.
- Do not keyword-stuff, but make sure the real ones are present. A reviewer skimming for thirty seconds is pattern-matching against this list, so if you genuinely wrote Go that touched a queue, say "Go," say "NSQ," say "idempotency."
What actually gets you shortlisted: evidence you can own a problem end to end.
- Open-source contributions, a side project a stranger could clone and run, a blog post explaining a hard bug and how you proved the fix worked.
- Monzo's engineering culture is public and writing-heavy (detailed post-incident and architecture pieces), so people who explain their thinking in text have an edge before they show up.
- Got a writeup of a nasty concurrency bug or a ledger reconciliation you got right? Link it. That single link can do more than the rest of the CV.
3The loop at a glance#
| Round | Length | What it tests |
|---|---|---|
| Recruiter screen | 30 min | Motivation, level fit, logistics, basic background |
| Machine-coding / take-home | 60 to 90 min live, or a few hours async | Can you build a small working thing, cleanly, with tests |
| Technical / system design | 60 min | Design under real constraints, tradeoffs, correctness |
| Behavioral / values | 45 to 60 min | Collaboration, ownership, how you handle conflict and failure |
| Final / hiring manager | 45 min | Level calibration, team fit, your questions |
How the shape shifts by team and level.
- Mobile loops lean harder on the platform (Swift/Kotlin) round and probe memory, threading, and UI state management.
- Senior loops weight design and behavioral more, and the bar on "tell me about a time you owned a failure" climbs fast.
- Junior loops weight the coding round and fundamentals.
- Mental model: the recruiter screen checks you are real and the right level, the middle rounds check you can do the job, and the final checks the team wants to sit next to you for two years.
4The coding or technical rounds#
This is where Monzo differs from a typical FAANG loop. Walk in expecting a whiteboard LeetCode hard and you will prepare for the wrong fight.
It is machine-coding, not LeetCode gymnastics.
- The signature round is building a small, real program on a real machine with a real editor and a real test runner.
- Typical prompts: a tube-journey fare calculator, an inventory service, a simple banking ledger with deposits and withdrawals, a rate limiter, a CSV parser that produces a report.
- You get a problem with a few rules and build it in stages, each stage adding a rule handed to you partway through.
- It is deliberately open and incremental, and the later stages are designed to break a rigid first design. That is the point: they want to see how your code bends.
What they are really watching:
- Can you start simple and grow it? Get one tiny thing working end to end, then layer complexity. The candidate who ships a working single-fare calculator in ten minutes and then extends it beats the one who spent forty minutes on an elegant abstraction that never ran.
- Do you write tests? This is the one that trips people. Write a test early, even a crude one, and let tests drive the next feature. When an interviewer watches you write a failing test then make it pass, they relax. Reach the end with zero tests and "I'd add tests if I had time" and the decision is already made.
- Is your code readable? Good names, small functions, no cleverness for its own sake. If a reviewer has to squint at a one-liner, so will the on-call engineer at 3am.
- Do you talk? Narrate your reasoning ("I'm going to model a transaction as its own type so I can validate it in one place"). Go silent for ten minutes and emerge with a working function, and they learned almost nothing about how you think.
When I run this round, what I am really checking is whether your reasoning matches your code. A failing test turned green tells me you can be trusted with the payments service. Ten silent minutes tell me nothing, even if the function works. Narrate the choice, not just the keystrokes.
You will also hit some DSA, medium difficulty, not the brutal end.
- Hash maps, two pointers, basic graph/BFS, string manipulation, a bit of dynamic programming.
- The emphasis is correctness and clarity over exotic tricks.
- If you can comfortably do medium LeetCode and explain time and space complexity, you are set.
- Forty well-understood mediums beat five hundred memorized ones, because they will always ask you to reason about the choice, not recite it.
How to win the round, concretely:
- Clarify first. Restate the problem in your own words. Ask about edge cases out loud: empty input, negative amounts, duplicate IDs, a withdrawal larger than the balance. The senior assumes the spec is incomplete; the junior assumes it is complete.
- Narrate complexity. Say "this is O(n) time, O(n) space because I'm caching lookups in a map." They grade your awareness, not just the answer. Naming the tradeoff shows you chose it on purpose.
- Test as you go. Do not save testing for the end. You will run out of time and look sloppy, and the stage where they add a rule is exactly when a test suite saves you from silently breaking stage one.
- Leave it clean. Five minutes left? Refactor a grim function rather than adding a half-done feature. A tidy, complete solution with one fewer feature reads far better than a sprawling, half-wired one.
Practice the right way.
- Build small programs from scratch in your strongest language, on a timer, with tests, without an IDE autocompleting your thinking.
- Going for backend? Do it in Go. Idiomatic Go in the room (error returns handled, small interfaces, table-driven tests) signals you would be productive on day one.
Here is the shape of a test-first ledger stage, the kind of thing you want flowing out of your hands without thinking:
func TestWithdrawRejectsOverdraft(t *testing.T) {
acct := NewAccount(100)
err := acct.Withdraw(150)
if err == nil {
t.Fatal("expected overdraft to be rejected")
}
if acct.Balance() != 100 {
t.Fatalf("balance changed on failed withdraw got %d", acct.Balance())
}
}
- That test does two Monzo things at once: it checks the rule, and it checks that a failed operation left the money untouched.
- Showing that instinct early earns trust fast.
Reveal the answer
5System design (and the technical design round)#
For E4 and up, you get a design conversation. Monzo runs a famously large microservices estate (well over a thousand services, Go, on Kubernetes, backed by Cassandra and event streaming). They do not expect their exact stack, but they expect you to reason like someone who has run things in production and been paged when they broke.
A framework that works in this room:
- Pin down requirements. Functional and non-functional. Ask about scale, read/write ratio, latency targets, consistency needs. For a bank, surface correctness and money-safety as a non-functional requirement, out loud, in the first two minutes. That one move tells the interviewer you understand the domain.
- Draw the happy path. Clients, services, data stores, queues. Keep it simple first: one service, one store, one clear request flow. Resist sketching six boxes before you have named what each is for.
- Model the data. This is where money problems live. How do you store a ledger? How do you guarantee a balance is never wrong? The strong answer is almost always an append-only ledger of immutable entries, with balance derived from the entries, so you can never "lose" a transaction and can always reconstruct and audit.
- Handle failure. This is the Monzo bit, and where the round is won or lost. What happens on a retry? A network partition? A duplicate message from an at-least-once queue? Talk about idempotency keys, exactly-once-ish processing, reconciliation jobs, and audit trails. Reach for an idempotency key the moment you introduce retries and it is a green light. Never mention duplicates and you have failed the round no matter how clean the happy path looked.
- Scale and observe. Sharding, partitioning, caching, and how you would know it is healthy: metrics on the key money paths, alerts on reconciliation drift, tracing across services. Say what you would put on the dashboard, not just "add monitoring."
Classic prompts you will see or hear.
- Design a payments and transfer system.
- Design the ledger that tracks every user's balance.
- Design a feature that notifies users of transactions in real time.
- Design a rate limiter.
- Design the system behind "freeze my card instantly."
- The money-movement ones are favorites because they test the exact instincts the job needs. When you get the transfer one, the question underneath is always "how do you make sure money never gets created or destroyed," so lead with the ledger and the idempotency story.
Jumping to Kafka and sharding in minute two. Start with the correct, simple design that one well-sized Postgres or Cassandra table could serve. Introduce complexity only when you have named the specific pressure that requires it ("at 50k writes per second a single partition becomes the bottleneck, so now I'd shard by account ID"). Over-engineering reads as inexperience here, not seniority. The most senior thing you can do is defend a simple design.
If the role is junior-leaning, expect a lighter, fundamentals-first version.
- How a hash map works, ACID versus eventual consistency, what a database index actually does to read and write cost, basic concurrency and race conditions.
- Know why a database transaction matters when moving money, and be able to say what "atomic" buys you when you debit one account and credit another.
- At Monzo that is not trivia, it is the job.
6Behavioral and culture fit#
Monzo takes values seriously, and this round is not a formality. It carries real weight, and strong candidates have been passed on it alone.
The themes they actually screen for.
- Default to transparency: unusually open internally and externally, with internal docs and decisions widely visible.
- Put customers first and "make money work for everyone."
- Strong ownership and caring about the mission.
- Healthy, kind collaboration. They genuinely screen out brilliant jerks, and "brilliant" buys no pass on "jerk."
Prepare 5 or 6 STAR stories.
- Cover: a hard technical decision, a conflict with a teammate, a time you owned a failure, a time you shipped under pressure, and a time you improved something nobody asked you to.
- Lead with the result, and put a number in it.
- Rehearse out loud until each is 90 seconds. A rambling four-minute story loses the room no matter how good the work was.
One full worked example:
Situation: Our checkout service was double-charging about 1 in 500 customers during payment retries, and support tickets were climbing. Task: I owned the payments integration, so it was on me to stop the bleeding without a risky big rewrite. Action: I reproduced it, traced it to retries hitting a non-idempotent endpoint, and added an idempotency key keyed on the client's request ID. I wrote tests that simulated duplicate submissions and partial failures, then rolled it out behind a flag to 5% of traffic first. I also wrote a short internal doc so the rest of the team understood the fix and the blast radius. Result: Duplicate charges dropped from ~0.2% of payments to effectively zero, support tickets for the issue fell to zero within a week, and we reused the idempotency pattern across three other services.
Why that answer lands.
- It hits ownership, correctness, communication, and a measurable outcome.
- It quietly shows transparency (the internal doc) and customer impact (support tickets to zero), the exact values this round scores.
- Be ready for honest follow-ups like "What would you do differently?" They want reflection, not a hero myth, so have a real answer ("I'd have added the duplicate-submission test to our template so the next service got it for free").
- When they ask about conflict, show that you argued the idea hard, respected the person throughout, and committed fully once the team decided. Disagree-and-commit is the move they listen for. Kindness is a hiring signal here, not a soft extra.
7Your prep plan#
4-week plan.
- Week 1: Medium DSA daily (hash maps, two pointers, BFS/DFS, strings, light DP). Relearn complexity analysis out loud, not in your head.
- Week 2: Build three small machine-coding projects from scratch, on a timer, with tests. Pick money, ledger, and rate-limiter themes so the domain starts feeling natural.
- Week 3: System design. Do five designs focused on correctness and failure handling. Study idempotency, ACID, append-only ledgers, and event-driven basics until you can explain each without notes.
- Week 4: Write and rehearse 6 STAR stories. Do two mock interviews, at least one with someone who pushes on "what would you do differently." Read Monzo's engineering blog and values.
2-week plan.
- Days 1 to 4: Medium DSA, timed, plus complexity narration spoken aloud.
- Days 5 to 9: Machine-coding reps with tests, in your target language (Go for backend), each one extended with a surprise rule at the halfway mark.
- Days 10 to 12: Three system designs, money-focused, practicing the failure-handling story until idempotency comes out automatically.
- Days 13 to 14: STAR stories and one mock.
2-day crash plan.
- Day 1: Two timed machine-coding builds with tests. One ledger or payments design walkthrough, spoken out loud. Skim Monzo's blog for how they describe their own systems.
- Day 2: Write 5 STAR stories with numbers. Review a complexity cheat-sheet. Do one mock, or at least talk through a problem out loud to a wall. Sleep, because a tired brain narrates badly and narration is half the grade.
8Why people get rejected at Monzo#
- No tests. Treated the coding round like a throwaway script. At a bank that is disqualifying, full stop, even if the code worked.
- Silent coding. Technically fine code, but the interviewer could not see the thinking. No narration, no signal credit. A correct answer with no visible reasoning scores worse than a slightly worse answer you explained well.
- Over-engineering the design. Reaching for Kafka, sharding, and microservices before establishing the simple correct version. Reads as insecure, not senior.
- Ignoring correctness and failure. Designing the happy path and never mentioning retries, duplicates, or reconciliation. That is the whole job here, so skipping it is skipping the interview.
- Weak or self-centered behavioral answers. "I" with no team, no reflection, or quiet signs of not respecting colleagues. Monzo really does pass on this, and one dismissive comment about a former teammate can end a loop.
- No product curiosity. Clearly never used the app or thought about the customer. Monzo wants engineers who care about what they are building, not just how, so have an opinion about a Monzo feature ready.
9The offer, comp and negotiation#
Rough, realistic ranges for 2026. Treat as directional, since level and location shift things.
- UK (most roles): E4 base roughly £75k to £95k, E5 roughly £95k to £120k, plus share options and solid benefits (private health, generous leave, learning budget). London and UK-remote are common.
- US (select roles): base roughly $150k to $210k depending on level and metro, plus equity. The US org is smaller and newer, so there are fewer seats and the bar per seat can feel higher.
- Senior (E6+): higher base and a meaningfully bigger equity slice. Comp becomes more individually negotiated, and the level case matters more than the number.
Read the equity honestly.
- It is options in a private, high-profile company, not public stock you can sell tomorrow.
- Understand strike price, vesting (usually 4 years, typically with a one-year cliff), and what a future liquidity event could mean after dilution and tax.
- Factor it in, but value it with eyes open and do not treat a headline equity figure as cash.
Negotiation tips.
- Anchor on level, not just number. If your experience argues for E5 over E4, make that case with evidence before you talk money. Level moves comp far more than haggling a few thousand, because it shifts both base and the equity band.
- Use competing offers honestly. Monzo responds to real market data. A genuine competing offer is your strongest lever. Do not bluff one, because recruiters compare notes and a bluff that unravels costs you goodwill you will want later.
- Negotiate the whole package. If base is capped by band, ask about equity, sign-on, or start date flexibility. Be warm and specific, never adversarial. The recruiter is on your side and remembers how you treated them, sometimes for years.
10FAQ#
"Do I need to know Go?"
"Is it heavy LeetCode?"
"Can I apply from India?"
"How long does the process take?"
"What's the single biggest differentiator?"
What you can now explain in the room
- Why the machine-coding round rewards starting simple and growing the design in stages.
- Why a failing-test-first habit is the single strongest trust signal at a bank.
- How to lead a design with an append-only ledger and derive balances from entries.
- When and why to reach for an idempotency key, and how reconciliation catches drift.
- Why defending a simple design beats jumping to Kafka and sharding.
- How to shape a STAR story that shows ownership, correctness, and kind collaboration at once.
Want a plan dated to your actual interview day? Map these rounds onto your calendar, work backward from the date, and give yourself real reps on machine-coding and STAR stories before you walk in.
Get a prep plan built around your Monzo interview
Tell us the role and your interview date. We will send back a dated, day by day plan. Free.