Remote-first fintech with a structured, rubric-driven loop and one of the more transparent leveling systems in the industry.
From the recruiter screen to the offer call. Median duration is shown in each badge.
Leveling expectations set early; ask for the level's rubric.
One Medium problem with emphasis on correctness and tests.
Coding, system design (payments-flavored), and a values round.
Team fit and growth conversation.
Drawn from reader interview reports. Frequency = how often the question (or a close variant) was reported.
Detect split payments that together exceed a credit limit within a time window.
Design the ledger for installment payments with refunds and partial captures.
Describe a time you disagreed with a product decision on risk grounds.
Reader-reported offers. Verify against Levels.fyi for your location and level before you negotiate.
| Level | Base | Bonus | RSUs | Total / year |
|---|---|---|---|---|
| P3 (mid) | $165K | — | $100K / 4yr | ~$190K |
| P4 (senior) | $200K | — | $180K / 4yr | ~$245K |
The gap between P3 and P4 at Affirm is roughly $55,000 a year. That number — about $190K total at mid-level against about $245K at senior — is the most useful thing I know about the Affirm software engineer interview, and almost none of it turns on how well you code. It gets set in a thirty-minute recruiter call most candidates treat as paperwork. I treated that call as paperwork twice, at two other companies, and found out what it cost me when the offer arrived.
So let's start with the number, take it apart, and then be honest about everything it fails to tell you.
It is not a salary. It is two things added together and one of them is divided by four.
| Level | Base | Bonus | RSU | Approx. total |
|---|---|---|---|---|
| P3 (mid) | $165K | — | $100K / 4 yr | ~$190K |
| P4 (senior) | $200K | — | $180K / 4 yr | ~$245K |
P3 is $165K of cash plus a $100K equity grant spread over four years, which is $25K a year if nothing moves. P4 is $200K cash plus $45K a year of vesting stock. The posted base band runs $150K–$220K, so P3 and P4 overlap on cash and separate hard on equity. That is where the $55K lives — not in your paycheck, in your grant.
Which means the single highest-leverage moment in this process is the one where somebody decides which of those two rows you belong in, and that happens in round one.
The bonus column is a dash. I read that as "no meaningful annual bonus at these levels," but a dash is not a zero and I am not going to tell you it is. Ask the recruiter directly whether there is a target bonus percentage. If the answer is no, your cash is your base, full stop.
The figures also say nothing about refresh grants. A four-year initial grant with no refresh policy means year five looks nothing like year one, and I do not have Affirm's refresh data. Ask what a typical performance refresh looks like for someone hired at your level. A recruiter who won't answer that has told you something.
The RSU number is dollar-denominated at grant. Four years of a public fintech's share price is not a savings account, and $100K on an offer letter is a projection, not a deposit. Nobody at Affirm controls that and nobody should promise you otherwise.
I also don't have data on whether that $150K–$220K band is geo-adjusted for remote hires. Affirm is fully remote in the US, and remote-first companies split roughly down the middle on location-based pay. That is a question for the first call, not the offer call.
And the biggest omission: the number doesn't measure you. It measures a level. Everything below is about not getting placed a row lower than you belong.
Affirm is hiring, sponsors H1B, and is genuinely remote across the US as of this writing in July 2026. For anyone who wasn't born inside the Bay Area pipeline, that combination is rare and it is worth taking seriously — you do not need to move, you do not need a referral from a college roommate who happened to go to Stanford, and if you need sponsorship the door is not closed before you knock.
The cost of that is arithmetic. Remote-first means the applicant pool is the entire country, not one metro. You are competing with more people for the same headcount, and if you have been told to network your way around that by people who inherited a network, you already know how little that advice is worth.
Here is the compensating advantage, and it is real: the loop is rubric-driven and consistent. Interviewers score against written level expectations rather than vibes. A predictable, documented process is the closest thing to a fair fight a candidate without connections is going to get, because it rewards the person who read the rubric over the person who knows somebody.
Four rounds, a bit over five hours of contact time.
Leveling expectations get set here. This is the $55K conversation and it does not feel like one; it feels like a friendly chat about your background.
Ask, out loud: "Which level am I being considered for, and can you send me the written expectations for that level and the one above it?" Then aim every story in the rest of the loop at the language in that document.
Candidates rarely get cut in this round. They get quietly slotted, which is worse, because you spend the next three rounds performing against a bar you never read.
One Medium problem, weighted toward correctness and tests. Note the second word.
This is where most people fall out, and not for the reason they think. They produce a working solution in thirty-five minutes, say "that should work," and stop. The rubric has a line for verification and they scored nothing on it. State your test cases before you write the function — empty input, single element, the boundary of the window, the duplicate, the value exactly equal to the limit — then walk two of them through your finished code by hand.
Coding, system design with a payments flavor, and a values round.
The design block is where mid-level candidates who have never touched money movement come apart. You are not being asked to scale a URL shortener. You are being asked to hold state that has to be right, permanently, in dollars.
The values round is where people who prepared a conflict story with no actual conflict in it come apart. More on that below.
Team fit and growth. It is seldom the round that kills an offer, but it is often the round where your level gets confirmed. Bring a question about what the first six months look like for someone at your level specifically. It signals you read the document.
Three shapes have come back from readers in 2026, and they are more specific than "medium LeetCode."
Hash map, reported in screens: detect split payments that together exceed a credit limit within a time window. That is a sliding window over per-user transaction history — a dict from user to a deque, plus a running total you decrement as events age out.
def flag(txns, limit, window):
q, total = defaultdict(deque), defaultdict(int)
for t in sorted(txns, key=lambda x: x.ts):
q[t.user].append(t)
total[t.user] += t.amount
while q[t.user] and t.ts - q[t.user][0].ts > window:
total[t.user] -= q[t.user].popleft().amount
if total[t.user] > limit:
yield t.user, total[t.user]
What makes it an Affirm question rather than a generic one is that it is a fraud pattern: someone splitting a purchase to slip under a limit. Say that out loud when you scope it.
Design, reported in senior loops: design the ledger for installment payments with refunds and partial captures. If you have never built one, learn three ideas before your onsite — append-only entries instead of mutable balances, idempotency keys so a retried webhook doesn't double-charge, and why a partial capture is a different event from a refund rather than a negative version of one. Three ideas, understood properly, will carry you further than a diagram with eight boxes.
Behavioral, reported in every loop: describe a time you disagreed with a product decision on risk grounds. This is not a generic conflict prompt. It asks whether you will push back on something revenue-positive because it is dangerous, and whether you did it with evidence rather than feelings. If your only story is a disagreement about tabs versus spaces, go find a real one before the onsite.
Target Affirm if you want fintech-range compensation without moving, if you need H1B sponsorship, and if the phrase "correctness and tests" describes how you already work. The rubric consistency genuinely helps candidates who prepare deliberately, and remote is not a concession here, it is the default.
Don't bother if you are hunting top-of-band FAANG numbers — $190K to $245K is solid, competitive money and it is not that. Don't bother if you need an office and someone at the next desk to learn from; remote-first is a real constraint on how fast you absorb things early. And if you are targeting senior, don't bother going in without a payments-shaped design story, because that round will find out.
The single highest-leverage prep is not another hundred problems. It is getting the level rubric in round one and aiming everything after it at that document.
Set a timer for sixty minutes. Take the split-payment problem above, and before you write one line of the solution, write out six named test cases on paper: empty list, one transaction, two transactions exactly at the limit, two straddling the window edge, a refund, and a duplicate event ID. Then solve it and run all six by hand.
One hour. It is not going to get you an offer by itself, and I am not going to pretend it will. But it rehearses the exact behavior round two is scoring, and most candidates never rehearse it once.
You can't control how many people applied to the same remote req you did — you can control whether you walked in knowing what they were writing down.
Affirm is one of the few fintechs that stayed genuinely remote-first, which widens the applicant pool — expect competition. The loop is rubric-driven and predictable; read the level expectations they publish and aim your stories at them. Strong pick for engineers who want fintech comp without relocating.