Brex · Software Engineer
Updated · 2026-09-24

Brex Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Brex combines corporate cards, business banking, global wire payments and travel and expense management into one AI-powered financial platform for businesses. Software Engineers work on the services and interfaces behind those products: payment pipelines, transaction authorization, ledgers, workflow automation and the web front end. Interview prompts tend to use the same domain, so expect money, transactions and spend data in the problems.

This guide covers the Software Engineer loop as candidates report it: a recruiter call, a technical screen (either a live call or an online practical coding assessment), and a virtual onsite made up of several focused modules. The reported question categories are practical coding and data modeling, debugging an existing codebase, payments-flavoured system design, SQL aggregation over transactions, and values questions that can include role-play. The practice set adds original SQL, coding and design drills with worked solutions.

Brex candidates report 3 rounds · ≈ 3-5 weeks. The stages below are what candidates describe, not a published process.

Reconcile the ledger against processor settlement filesConsume webhooks duplicated, delayed and out of orderStore money as integer minor units

37 min read

Practice 15 Software Engineer prompts
7Company bank questionsSnapshot · Sep 25, 2026 PT
7Candidate experiences ↗Read their reports
15Practice promptsAcross five skill areas
3With worked solutionsIncluded in the practice prompts

Brex sells corporate cards, business banking, global wire payments and travel and expense management as one financial platform for businesses. The source notes for this guide place Software Engineers across that stack: payment and transaction pipelines, backend microservices, customer-facing web interfaces and workflow automation. Named areas include the Task Workflows Platform, the transaction authorization engine, and the integration of enterprise HRIS systems into the identity architecture. Problem areas listed include distributed transaction consistency, low-latency API integrations, multi-currency ledger management and data-driven fraud detection.

For preparation, the domain matters most. The reported questions are about money moving and spend data. In coding, you check whether a player can afford a card from gem balances, aggregate spend from a REST endpoint, and flag suspicious transactions by shared attributes. In design, you authorize card transactions and build ledgers for peer-to-peer transfers and gift cards. The SQL bank asks for transaction counts, monthly totals and consecutive-day patterns. Practise these practical domain problems before any abstract algorithm drills.

The sources also describe two formats worth practising on their own: a debugging exercise, where you get an existing codebase with failing tests and fix it, and a values interview that can include live role-play. Prepare for each separately instead of treating them as ordinary coding and behavioural rounds.

01

Recruiter Call

reported

Candidates describe a first conversation with a technical recruiter about background, expectations and role fit. Use it to learn what comes next. Ask whether your technical screen is a live call or an online practical assessment, which modules the virtual onsite includes (candidates report practical coding, debugging, system design and a values interview), and what environment the debugging exercise expects. Describe your scope in concrete terms: the systems you owned end to end and any payments, ledger or transaction work, because that is the material the later rounds draw on.

What to demonstrate

  • Whether your background and expectations fit the role as the recruiter understands it
  • Whether you can explain your most relevant work clearly and briefly, especially services that handle transactions or money

How to prepare

  • Ask whether the technical screen is live or an online assessment, and which languages and tools it allows
  • Ask which onsite modules you will have and whether the debugging exercise runs in your own local environment
  • Prepare a short account of two systems you owned end to end, including the failure you were responsible for fixing
  • Settle your compensation expectation and its split before the call so you can give a number when asked
PracHub interview research ↗
02

Technical Screening

reported

Candidates report this as either a live technical call or an online practical coding assessment focused on data structures, domain modeling or API integration. The reported coding prompts match that description. One is a card-and-gem purchase engine that grows through can_purchase, purchase and colour discounts. Another fetches transactions from a REST endpoint and computes monthly totals, peak months or merchant streaks. A third matches flagged transactions by shared attributes. The sources do not say which of these appear in the screen itself, so practise all of them in both formats. For a live call, talk through the code as you write it. For an automated assessment, test against the given examples and the cases they leave out.

What to demonstrate

  • Whether your domain model survives an extension, such as adding purchase and discounts to an affordability check, without a rewrite
  • Whether you handle real API data correctly: pagination, nested JSON, ISO-8601 timestamps and time zones
  • Whether the code runs and has been checked against edge cases such as zero balances, missing fields or an empty response

How to prepare

  • Build the gem engine in three passes (affordability, then purchase with state updates, then per-colour discounts and wild gems), and reuse one effective-cost function throughout
  • Write a script against any public paginated JSON API that follows every page and computes a monthly total and a longest consecutive-day streak
  • For the automated format, write a small harness first that runs the given examples plus empty and single-record inputs, and prints expected against actual output
PracHub interview research ↗
03

Virtual Onsite Loop

reported

The source describes the virtual onsite as several focused modules run by senior engineering team members. Candidates can take it in one day or split it across two consecutive days. The reported evaluation areas are practical live coding and API integration, debugging an existing codebase against failing tests, distributed systems design for financial workloads, and a values interview that can include role-play. Each one needs a different approach. In coding, finish and test. In debugging, read before you edit. In design, start from requirements and failure modes. In the role-play, hold a live conversation instead of reciting a story.

What to demonstrate

  • Debugging: whether you read failing assertions and stack traces before changing code, and fix root causes without breaking existing API contracts
  • Design: whether you bring up idempotency, double-entry ledgers, locking and double-spend prevention in flows such as card authorization or peer-to-peer transfers
  • Values: whether you communicate directly, show ownership and negotiate a trade-off with the people in a role-play
  • Coding: whether you finish working, tested code for practical prompts such as API consumption or domain state logic

How to prepare

  • Build a small multi-file repo with planted bugs (off-by-one day-of-week index, missing leap-year rule, wrong holiday-override precedence) and practise fixing it from the failing tests alone
  • Install and verify your language runtime, SDK and test runner on the machine you will use before the day
  • Design the card authorization engine and a peer-to-peer transfer service end to end, and name your idempotency, ledger and locking choices before anyone asks
  • Run a role-play mock where a partner plays a product manager pushing a feature date against your technical-debt fix
PracHub interview research ↗

7 candidate reports. Individual accounts describe a particular role and hiring cycle.

Software Engineer

Brex Software Engineer interview delayed for months before I took another offer

Outcome: offer

My process stretched on for months and felt completely disorganized. The recruiter sometimes couldn't get a response from the hiring team for more than a week, so I was left waiting without any real momentum. The interview steps never lined up cleanly because of the delays. What I remember most is the lack of updates and the way the timeline kept slipping. By the time anything finally moved, I'd…

Read full experience
Software Engineer

Brex Software Engineer interview with debugging and high pressure system design

Technical Screen → OtherOutcome: rejected

I went through a recruiter call and then several technical rounds. The whole process felt hostile and disrespectful of my time. Even when the interviewers were outwardly neutral, I didn't feel much respect for the effort involved in sitting through multiple steps. The hardest part was that I never got clear feedback about why I was rejected, so I was left guessing where things went wrong. The tec…

Read full experience
Software Engineer

Brex Software Engineer interview: recruiter call under 15 minutes

Outcome: rejected

I applied and quickly received an invitation for a screening call, so the timeline moved fast. The process ended with a rejection shortly afterward, although the screening itself was fairly standard. The recruiter call lasted under 15 minutes. We went through the usual prompts: telling me about myself, describing a project or complex feature I had worked on, and explaining how I approached it. Th…

Read full experience
Frontend Engineer

Brex Frontend Engineer interview with interrupted live coding

Technical ScreenOutcome: rejected

I started with an interview that felt straightforward and respectful, and the recruiter seemed involved and supportive. Then I moved into a technical coding interview where the interviewer repeatedly required me to talk while coding. I found that counterproductive. The constant interruptions made it easy to lose focus and added anxiety to an already stressful live coding environment. I was trying…

Read full experience
Account Executive

Brex Account Executive interview with mock cold-call rounds

OtherOutcome: rejected

My process with Brex didn’t feel smooth, even though it started in a fairly normal way. I went through the usual early screening setup, but the scheduling and follow-through immediately gave me a strange feeling. One calendar invite was outside the availability I’d provided. When I asked questions beforehand, they were mostly brushed off. On the day of the interview, the interviewer was late and…

Read full experience

PracHub editorial advice for the preparation topics above.

01

Editing code in the debugging exercise before reading the failing tests

Candidates describe a repository with failing unit and integration tests. The reported bugs are in places like day-of-week indexing, leap-year rules, holiday overrides and state mutation. Run the suite first, read each failing assertion and stack trace from top to bottom, and state the root cause before you touch any code. Fix the smallest thing that explains the failure and re-run everything after each fix. Do not change function signatures or response shapes, because the reported task is to restore passing tests without breaking existing API contracts. Install and verify your runtime, SDK and test runner beforehand so setup does not eat into the exercise.

02

Writing can_purchase in a way that forces a rewrite when purchase and discounts are added

The reported card-and-gem prompt grows in stages: first affordability, then a purchase that updates state, then discounts for each card colour you hold. Bank variants add wild or gold gems that can cover a shortfall. Keep player state explicit, with gem counts by colour and held cards by colour. Compute the discounted cost per colour in one function that both can_purchase and purchase call. In purchase, validate everything before changing anything, so a failed purchase leaves state untouched. Clamp discounted costs at zero, and spend coloured gems before wild gems. Test these cases: an exact balance, one gem short but covered by a wild gem, and a discount larger than the cost.

03

Getting timestamps and date windows wrong in spend aggregations

Reported prompts ask for total monthly spend, peak months and consecutive-day merchant streaks from a REST endpoint, and the SQL bank asks for similar aggregations. Follow pagination until the endpoint says there are no more pages. Parse ISO-8601 timestamps into timezone-aware values and say which zone defines a month or a day. Handle missing or malformed records instead of crashing. For streaks, reduce the data to one row per merchant per day before looking for consecutive dates, so two purchases on the same day do not count as a two-day streak. Check month and year boundaries such as January 31 to February 1, and keep amounts as integer minor units in every sum.

04

Designing a payment flow without idempotency or a ledger

Reported design prompts include a card authorization engine that answers card-network webhooks within a tight latency bound, a peer-to-peer transfer service, a gift card and rewards ledger, and a workflow engine driven by spend events. Bring up correctness without waiting to be asked. Cover an idempotency key per authorization or transfer, enforced by a unique constraint. Use double-entry ledger entries that sum to zero, and row locks or conditional updates on balances. Decide, and say, what authorization returns when a dependency is slow. A timeout is an unknown outcome, so reconcile with the other side before you retry. Store amounts as integer minor units together with the currency code.

05

Telling a story in the values role-play instead of negotiating inside it

The source describes role-play scenarios in the values interview. One is a priority conflict between delivery timelines and technical debt, played out with two interviewers. Stay in the scene. Ask what each side needs, restate their concern, and put a concrete risk on the debt. Then offer a specific split, such as shipping a guarded scope now and scheduling the fix with an owner and a date. Finish by saying what you would communicate and to whom. Rehearse aloud with a partner playing the other side, because a prepared STAR answer does not carry over to a live exchange.

Choose a category, try a prompt, then open its approach, worked solution or follow-up when you need it.

12 technical prompts3 include a worked solution

Card Game & Gem Engine: Implement a `can_purchase` function to determi…

medium
data structures and algorithms

Card Game & Gem Engine: Implement a can_purchase function to determine if a player can afford a card given their current gem balances (e.g., red, green, blue). Extend this with a purchase function that updates state, and introduce a discount mechanism where holding cards of a specific color reduces future purchase costs for that color.

Approach
  1. Choose the data structure from the access pattern, not from familiarity.
  2. Walk one small example through your approach before writing the whole thing.
  3. Restate the input: its shape, its size, and what is guaranteed about it.
Follow-up
  • What is the worst case, and how likely is it on real data?
  • How does this change if the input no longer fits in memory?

Mathematical String Evaluation: Implement a function that parses and e…

medium
data structures and algorithms

Mathematical String Evaluation: Implement a function that parses and evaluates string-based mathematical expressions containing operations and parenthesis (e.g., evaluating "5 times (20 plus 30)").

Approach
  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. Walk one small example through your approach before writing the whole thing.
  3. Choose the data structure from the access pattern, not from familiarity.
Follow-up
  • What is the worst case, and how likely is it on real data?
  • How does this change if the input no longer fits in memory?

Attribute Matching & Similarity: Given a list of flagged transaction e…

medium
data structures and algorithms

Attribute Matching & Similarity: Given a list of flagged transaction entries with multiple metadata attributes (such as user, location, and merchant), compare candidate entries and flag suspicious activity based on attribute matching thresholds ($k$ common attributes).

Approach
  1. Restate the input: its shape, its size, and what is guaranteed about it.
  2. State the target complexity and say which constraint rules the naive version out.
  3. Name the brute-force solution and its complexity before improving on it.
Follow-up
  • Which test case would catch an off-by-one here?
  • How does this change if the input no longer fits in memory?

Answer as-of balance queries over an append-only entry log

hardWorked solution
prefix sumsoffline queriesappend-only

Given 400 million ledger_entry rows (entry_id, account_id, direction, amount_minor, currency, business_date) and 2 million queries of (account_id, currency, as_of_date) asking for the balance at the end of that business date, produce every answer. The obvious solution — per query, sum that account's entries with business_date <= as_of_date — is correct. Say precisely why it will not finish, then give one that will, with time and space complexity. Corrections are posted as new entries carrying their own business_date.

Approach
  1. Cost the naive version in numbers before rejecting it. Spread uniformly over 20 million accounts, each query touches about 20 rows behind a per-account index and 2 million queries is 4e7 row touches — perfectly fine. The problem is skew: one pooled clearing or merchant settlement account holding 3e7 entries, taking 10% of the queries, is 6e12 row touches. Name the skew; 'n is large' is not the reason.
  2. The structural fact that buys a cheap answer: entries are append-only and never updated, so a prefix sum over an account's entries ordered by (business_date, entry_id) is stable — nothing behind position i can change. No mutable-balance design offers that, and it is why the storage is worth paying for.
  3. Offline sweep, when all queries are known up front: externally sort entries by (account_id, currency, business_date, entry_id) and queries by (account_id, currency, as_of_date), then merge-walk both with a running sum, emitting each query's answer as the sweep passes its date. O((n + q) log(n + q)) dominated by the sort, O(1) beyond sort buffers, one sequential pass over each input instead of 2 million random seeks.
  4. Online alternative: materialise end-of-day snapshots — one row per (account_id, currency, business_date) that had activity, holding the cumulative total. A query becomes one index seek for the latest snapshot at or before as_of_date, O(log n) per query, over far fewer rows than n. Use snapshots when queries arrive singly and the sweep when they arrive as a batch.
  5. Corrections are the subtlety: an entry posted today but dated back changes historical answers, so every snapshot for that account from that date forward is stale. Either keep a Fenwick tree over dates per account (O(log D) update and prefix query) or recompute that account's snapshots from the corrected date onward. Then be precise about what reproducibility means — yesterday's statement is reproducible as of a stated snapshot time, not identical forever.
  6. Bound the resources: int64 sums throughout, no float; 400 million rows at roughly 48 bytes of the columns you actually need is about 19 GB, so the sort is external and its fan-out is chosen from the sort buffer, not from the row count.
Worked solution 40 min
  1. Compute both costs explicitly: the uniform case at about 4e7 row touches, and the skewed case at about 6e12. Showing that arithmetic is the answer to 'why'.
  2. Implement the offline sweep on a 10-million-row, 50,000-query fixture, merging on (account_id, currency, business_date, entry_id).
  3. Implement the naive version as the reference answer and assert both agree on every fixture query.
  4. Add a correction entry dated 30 days back, re-run, and assert that exactly the queries with as_of_date on or after that date move, all by the same signed amount.
  5. Measure rows touched and wall time for each at 10 million rows, then extrapolate to 400 million and state the assumption that makes the extrapolation valid — sequential I/O, no random seeks.
EXPECTED RESULTBoth implementations agree on all 50,000 fixture queries. After the back-dated correction, exactly the queries at or after its `business_date` change, each by the identical signed amount. The sweep touches every entry row once; the naive version touches the hot account's rows once per query against it.
Follow-up
  • One account holds 30% of all entries. What does the external sort do with it, and what would you do for that one key instead?
  • Queries now arrive online at 500 per second. Which design survives, and what does keeping the other one warm cost?
  • A correction lands with a business_date 90 days back. Which snapshots are now wrong, and how does a reader find out?

For a candidate senior enough that the loop turns on design and judgement rather than on whether the coding round gets finished. Five days build one system properly and then stress it; coding gets a single maintenance day, on the assumption that the risk at this level is an unexamined tradeoff rather than a missed algorithm.

Small steps. Visible outcomes.0 / 7 completed
ONE WEEK · YOUR PACE

Prepare, practise & reflect

One practical outcome each day. Spend longer where you need it.

0 / 7 done
01Map the loop and set up your tools
  • Sort the reported questions into coding, debugging, system design, SQL and values, and mark which ones you have never attempted
  • Write the questions for your recruiter call: screen format, allowed languages, onsite modules, and whether debugging runs in your local environment
  • Install and verify your language runtime, test runner, HTTP client, JSON parsing and a timezone-aware date library
  • Write a short scope summary of two systems you owned end to end

Deliverable: A categorized question list, a recruiter question list, and a working local environment with a passing sample test.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Worked solution ↗
02Card-and-gem purchase engine
  • Implement can_purchase from colour gem balances, then purchase with state updates that change nothing when the purchase fails
  • Add per-colour discounts from held cards and wild or gold gems that cover any shortfall, reusing one effective-cost function
  • Write tests for an exact balance, one gem short but covered by a wild gem, a discount larger than the cost, and an unknown card
  • Rebuild it from scratch within a time box while explaining each decision aloud

Deliverable: A tested purchase engine plus a list of the edge cases you would name in the interview.

Practice prompt ↗Practice prompt ↗
03REST API consumption and parsing prompts
  • Write a script that follows every page of a paginated JSON endpoint and computes monthly spend and the peak month from ISO-8601 timestamps
  • Add a consecutive-day same-merchant streak: one row per merchant per day first, then check that the dates are consecutive across month boundaries
  • Solve the attribute-matching prompt: flag a candidate that shares at least k attributes with a flagged entry, first by brute force, then with an index keyed on attribute and value
  • Build an evaluator for word expressions such as "5 times (20 plus 30)" with correct precedence and parentheses

Deliverable: Three working programs, each with a short note on complexity and the failure cases you tested.

Practice prompt ↗Practice prompt ↗
04SQL over transactions
  • Write queries for the SQL bank topics: transaction counts, monthly spend totals, same-day transactions across consecutive months, and consecutive-day purchases at one merchant
  • Practise the similarity query: count the attributes each candidate shares with a flagged entry and filter on a threshold
  • Work through the worked exercise "Answer as-of balance queries over an append-only entry log" and check its answers against a naive reference

Deliverable: A query file covering each SQL topic, plus your completed as-of balance exercise.

Practice prompt ↗Practice prompt ↗Worked solution ↗
05Debugging an unfamiliar codebase
  • Build or borrow a small multi-file service with tests, and plant bugs: an off-by-one day-of-week index, a missing leap-year rule, wrong holiday-override precedence, and a shared mutable default
  • Fix them using only the failing tests: run the suite, read assertions and stack traces, state the cause, apply the smallest fix, and re-run everything
  • Add one bug caused by a null response or a missing error handler in a transaction pipeline, and fix it without changing any public signature

Deliverable: A bug log recording, for each bug, the failing test, the root cause, the fix and the evidence that nothing else broke.

Practice prompt ↗Practice prompt ↗
06Payments system design
  • Design the card authorization engine: webhook intake, balance check, spending rules and limits, and the response inside the prompt's latency bound, including what happens when a dependency is slow
  • Design a peer-to-peer transfer service with double-entry ledger entries, idempotency keys and a locking strategy, using the "Make a charge endpoint safe under concurrent duplicate retries" drill for the key-claim path
  • Sketch the gift card and rewards ledger or the spend-event workflow engine, then work through "Fan out ordered events to fifty thousand merchant endpoints" for delivery and backpressure

Deliverable: Two designs taken to schema and failure-mode depth, with idempotency and ledger decisions written next to each.

Practice prompt ↗Practice prompt ↗
07Values role-play and a full mock sequence
  • Prepare STAR stories for critical feedback, fixing an unowned problem outside your scope, a decision made with incomplete requirements, and a project that missed its target
  • Run a live role-play with a partner who plays the other side of a feature-date versus technical-debt conflict, and reach an agreed plan while staying in the scene
  • Run a coding mock, a debugging mock and a design mock back to back, and note where you used the wrong approach for the round

Deliverable: Four rehearsed stories, notes from the role-play, and a short list of fixes from the mock sequence.

Practice prompt ↗Practice prompt ↗Worked solution ↗

Expand any day for tasks and deliverables. Your progress is saved on this device.

The source describes the values interview as more than standard behavioural questions, often with interactive role-play. Prepare stories that name a person, a decision and a result you can put a number on. Also practise the live format: in a role-play you speak to interviewers in character, so rehearse listening, restating their concern and offering a concrete trade-off.

Handling Constructive Feedback: Describe a project where you received …

medium
behavioural and engineering judgement

Handling Constructive Feedback: Describe a project where you received critical feedback on your architecture or implementation, how you processed it, and what changed in your execution.

Approach
  1. Name the disagreement and how you resolved it with evidence.
  2. Close with what you would do differently, concretely.
  3. Pick a story where you made the decision, not one where you watched it.
Follow-up
  • What would you do differently if you ran that again?
  • What did you decide not to do, and why?

Own the postmortem for a duplicate-capture incident

medium
incident responseidempotencyblast radiuspostmortem

A processor slowed down, callers timed out and retried without reusing their idempotency key, and 412 captures were duplicated over 90 minutes before a reconciliation break report surfaced it. Take the on-call role. Describe an incident you owned of comparable blast radius: how it was detected, how you bounded the affected population, what you stopped first, and how customers were made whole. Give a wall-clock timeline, the query or metric that sized the damage, and the change that would have prevented it. Include what you got wrong during the response, not only after it.

Approach
  1. The probe is whether you can bound an unknown blast radius under time pressure. Open with the invariant that broke (at most one capture per authorisation attempt) rather than the symptom, because the invariant tells the listener what to count.
  2. Size the population with a stated query, not an adjective: duplicate captures are ledger_entry rows with source_type='capture' grouped by source_id having count(*) > 1, joined back to payment_intent for the affected merchants and amounts. Say how long that query took and whether you could run it against a replica while the incident was live.
  3. Separate mitigation from fix and say which you did first. Mitigation is usually cheap and blunt (disable the retry path, drop the caller's concurrency, hold captures behind a flag); the fix is a UNIQUE constraint plus a stored response, and it is not an incident-window change.
  4. State the remediation arithmetic explicitly: refunds are new customer-visible movements with their own fees and their own settlement lag, so the count of duplicates, the total minor units, the refund posting date and the customer notification are four separate numbers a strong answer has ready.
  5. Close on the prevention change and its cost. Naming one guard that would have caught it earlier (a break-age alert, a duplicate-capture counter on the ledger write path) beats listing five that nobody staffed.
  6. Name your own error inside the response window: a mitigation you tried that made it worse, or the 20 minutes you spent on the wrong hypothesis. Interviewers weight that heavily because it is the part candidates rehearse away.
Follow-up
  • The retry came from a client you do not control. What do you change so a client that regenerates its key per attempt cannot cause this again?
  • How would you have detected it in 5 minutes instead of 90, and what would that detector cost in false pages per week?
  • A merchant disputes your count of affected transactions. What do you show them?

Estimate a reconciliation rebuild you have never attempted

hard
estimationunknownsreconciliation

You are asked how long it takes to replace a reconciliation service matching 30 million settlement lines a day against the ledger, including a bounded fuzzy fallback for netted fees and an ageing model for breaks. You have never built one. Produce an estimate, the range around it, and the two or three unknowns that dominate that range. Then describe a time you estimated unfamiliar work: what you did in the first day to shrink the range, what you committed to publicly, how far off you were, and what you would tell the requester differently now.

Approach
  1. The probe is whether you can be useful under uncertainty without either refusing to estimate or inventing false precision. Give a number with an explicit range and the basis for both, then immediately name what would move it, rather than asking for two weeks of discovery first.
  2. Decompose into parts with different uncertainty profiles. The hash join on (external_reference, amount_minor, currency, business_date) over 30 million lines is well understood engineering and estimates tightly; the fuzzy fallback for netted and fee-adjusted lines does not, because its scope is defined by whatever the files actually contain; the ageing and break workflow is mostly operations-facing surface area, which estimates by counting screens and states.
  3. Name the dominating unknowns concretely: how many distinct file formats and cutoff conventions the sources use, what fraction of lines are netted rather than itemised, and whether business_date is derivable from any field in the file or must be reconstructed from the cutoff rule. Each is a factor on the fuzzy path, not a percentage on the whole.
  4. Describe the first-day range-shrinking work, which is the part that separates strong from generic: take one real file, count distinct formats, measure the netted fraction, and attempt the exact join on a single day of postings to see what the residual actually is. One day of that typically converts a 3x range into something near 1.5x.
  5. Commit in a form that survives being wrong: a range plus a checkpoint date at which you will replace it with a narrower one, and an explicit statement of what you will cut first if the range turns out to be optimistic.
  6. In the retrospective half, give the real numbers: the estimate, the actual, and the specific thing that consumed the difference. Answers that were within 10 percent are less informative than answers that were 2x off for a nameable reason.
Follow-up
  • The requester wants one number, not a range, for a board deadline. What do you give them?
  • Your one-day probe finds 40 percent netted lines instead of the 5 percent you assumed. What changes in the plan, not just the estimate?
  • What do you cut first if you are at the deadline and the fuzzy fallback is not done?
  • 01

    Role-play: two interviewers play out a priority conflict between a product delivery date and reducing technical debt. Reach an agreement with them in character.

  • 02

    Describe a project where you received critical feedback on your architecture or implementation, how you processed it, and what changed in your execution.

  • 03

    Tell me about an unowned system failure or operational bottleneck outside your scope that you took on and drove to resolution.

  • 04

    Describe a critical technical decision you made with incomplete product requirements or changing business constraints.

  • 05

    Tell me about a technical project that failed or missed its target metrics. What did you learn, and how did you adapt?

  • 06

    Describe an incident you owned: how you sized the affected population, what you stopped first, and what change would have prevented it.

PracHub interview preparation framework ↗
Is this an official Brex interview guide?

No. It is PracHub's own research and practice material for the Software Engineer role at Brex. Rounds and questions reflect what candidates have reported, not a process Brex has published, and they change over time. Confirm the current format and scope with your recruiter.

PracHub interview research ↗
What programming language should I use during the technical rounds?

The source notes report that candidates can generally use a modern language they know well, and name Python, Java, Go and TypeScript. Confirm the allowed languages with your recruiter. For API-parsing and live coding prompts, a language with little boilerplate, such as Python or JavaScript, saves time on HTTP calls and JSON handling. Whatever you choose, know its HTTP client, JSON parser and date library well enough to use them without looking them up.

PracHub interview research ↗
Are LeetCode-style algorithmic puzzles common in Brex interviews?

The reported questions are mostly practical: modeling a card-and-gem purchase system, consuming a REST API and aggregating spend, fixing bugs in an existing codebase, and designing payment systems. One reported prompt, evaluating an expression such as "5 times (20 plus 30)", is closer to a classic parsing problem, so keep stack-based or recursive-descent parsing ready. Spend most of your practice on domain modeling and API work rather than puzzle drills.

PracHub interview research ↗
How is the debugging round structured?

Candidates describe getting a repository of existing code with a failing test suite. The task is to understand the business logic, isolate the bugs and fix them until the tests pass. Reported examples include a holiday calendar that computes delivery schedules, with bugs in day-of-week indexing, leap years and holiday overrides, and a small service with concurrency or state-mutation bugs. Set up and verify your runtime, SDK and test runner before the interview.

PracHub interview research ↗
What is the typical timeframe for the hiring process?

Reports put the process at roughly three to five weeks, and the source notes also mention two to four weeks, depending on scheduling and team matching. Ask your recruiter for the current timeline.

PracHub interview research ↗
What is the values interview like?

The source describes it as going beyond standard behavioural questions, often with interactive role-play. In one reported scenario, two interviewers play out a priority conflict between shipping a feature and reducing technical debt. Prepare STAR stories about feedback, ownership outside your scope, and decisions made with incomplete requirements. Also practise talking to people live instead of narrating a story.

PracHub Software Engineer practice ↗
Should I prepare SQL for this role?

Yes. The question bank for this role includes SQL items on transaction counts, monthly spend totals, same-day transactions across consecutive months, consecutive-day purchases at the same merchant, and similarity matching over suspicious entries. The sources do not tie these to a specific round, so treat SQL as a category to cover: GROUP BY aggregation, date truncation, self-joins and window functions.

PracHub Software Engineer practice ↗
Can the virtual onsite be split across days?

The source says candidates can take all the onsite rounds in a single day or split them across two consecutive days. Choose based on how you manage energy. If you split them, put the modules you find hardest on the day you expect to be freshest.

PracHub Software Engineer practice ↗
Sources & methodology 3 sources ↗

Official role evidence, timestamped platform data and clearly labeled preparation advice.