As a Software Engineer at Redfin, you will build the technology that is actively redefining the real estate industry. Redfin combines a customer-first real estate brokerage with a high-scale, modern technology platform, meaning your work directly bridges the digital and physical worlds. You will design, develop, and maintain systems that help millions of users search for homes, analyze market values, and seamlessly navigate the complex process of buying or selling a home. The engineering organization at Redfin tackles unique challenges at scale, including high-throughput data pipelines for MLS (Multiple Listing Service) data ingestion, real-time map rendering, search optimization, and predictive valuation algorithms. Your contributions will directly impact not only external home buyers and sellers but also internal real estate agents who rely on custom tools to manage transactions efficiently. This role requires a balance of deep technical capability, pragmatic problem-solving, and a strong sense of empathy. Rather than focusing solely on isolated technical components, engineers at are encouraged to think about the end-to-end user experience. You will collaborate closely with product managers, QA engineers, and design teams to build reliable, beautiful, and highly performant software. Redfin
Recruiter Screen
reportedInitial assessment of your background and interest in the company.
What to demonstrate
- Initial assessment of your background and interest in the company
- Depth in Data Structures & Algorithms (DS&A)
How to prepare
- Be able to walk your CV end to end in two minutes, and say why this company specifically.
- Have your salary expectations, notice period and location constraints ready, and ask for the rest of the loop in writing.
Online Assessment or Technical Phone Screen
reportedYou may complete an online assessment or have a technical phone screen with an engineer.
What to demonstrate
- You may complete an online assessment or have a technical phone screen with an engineer
- Depth in Data Structures & Algorithms (DS&A)
How to prepare
- Be able to walk your CV end to end in two minutes, and say why this company specifically.
- Have your salary expectations, notice period and location constraints ready, and ask for the rest of the loop in writing.
Take-Home Assessment
reportedInvolves a practical coding task such as parsing data, writing a command-line tool, or building a simple REST API.
What to demonstrate
- Involves a practical coding task such as parsing data, writing a command-line tool, or building a simple REST API
- Depth in Data Structures & Algorithms (DS&A)
How to prepare
- Answer aloud and timed: Implement a depth-first search (DFS) algorithm to solve a standard maze or pathfinding problem.
- Answer aloud and timed: Design the backend architecture and class structure for a Tetris game, outlining how pieces, the board, and game loop logic interact.
Virtual Onsite Loop
reportedConsists of four to five sessions evaluating your engineering skills and cultural alignment.
What to demonstrate
- Consists of four to five sessions evaluating your engineering skills and cultural alignment
- Depth in Data Structures & Algorithms (DS&A)
How to prepare
- Answer aloud and timed: Create an object-oriented model for a classic card game (such as Poker) or a parking garage management system.
- Answer aloud and timed: Design an ingestion and mapping system to process incoming MLS data points and map them to our internal database schema.
PracHub editorial advice for the preparation topics above.
Going into the loop without having done this.
To maximize your chances of success, keep these practical, insider tips in mind throughout your preparation:
Going into the loop without having done this.
Do not neglect the behavioral prep: Treat every interaction, including technical rounds, as an opportunity to demonstrate your communication skills and collaborative nature.
Going into the loop without having done this.
Write production-grade code: During coding rounds, focus on clean variable names, modular functions, and robust error handling. Do not just rush to a working solution.
Going into the loop without having done this.
Be vocal during debugging: In the debugging round, explain your hypotheses out loud as you read the code. This helps the interviewer understand your logical troubleshooting process.
Going into the loop without having done this.
Ask clarifying questions early: Before writing any code in design or algorithm rounds, clarify the constraints, input sizes, and expected edge cases.
Choose a category, try a prompt, then open its approach, worked solution or follow-up when you need it.
Write an algorithm to traverse a 2D grid in a spiral pattern (Spiral Matrix).
Write an algorithm to traverse a 2D grid in a spiral pattern (Spiral Matrix).
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- State the target complexity and say which constraint rules the naive version out.
Follow-up
- How does this change if the input no longer fits in memory?
- What is the worst case, and how likely is it on real data?
Implement a backtracking algorithm to find if a specific string can be constructed from a given set of charact
Implement a backtracking algorithm to find if a specific string can be constructed from a given set of characters with custom constraints.
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- State the target complexity and say which constraint rules the naive version out.
Follow-up
- How does this change if the input no longer fits in memory?
- What is the worst case, and how likely is it on real data?
Find the top *k* frequent elements in an array or compute the top *k* sum of two arrays.
Find the top k frequent elements in an array or compute the top k sum of two arrays.
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- State the target complexity and say which constraint rules the naive version out.
Follow-up
- How does this change if the input no longer fits in memory?
- What is the worst case, and how likely is it on real data?
Implement a depth-first search (DFS) algorithm to solve a standard maze or pathfinding problem.
Implement a depth-first search (DFS) algorithm to solve a standard maze or pathfinding problem.
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- State the target complexity and say which constraint rules the naive version out.
Follow-up
- How does this change if the input no longer fits in memory?
- What is the worst case, and how likely is it on real data?
Describe a situation where you had to work with ambiguous requirements. How did you structure your approach to
Describe a situation where you had to work with ambiguous requirements. How did you structure your approach to deliver a successful outcome?
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- State the target complexity and say which constraint rules the naive version out.
Follow-up
- How does this change if the input no longer fits in memory?
- What is the worst case, and how likely is it on real data?
Write the update path that detects a concurrent edit
resource carries version INT NOT NULL DEFAULT 1. resource_revision holds revision_id, resource_id, version, actor_user_id, change_kind, patch JSONB, request_id, created_at with UNIQUE (resource_id, version). outbox_event holds aggregate_type, aggregate_id, aggregate_version, event_type, payload, status. A PUT carries the version the client read. Write the exact statements for the single transaction that applies the edit, records the revision and enqueues 'resource.updated', and give the handler's branch on zero affected rows. Then say what PostgreSQL 16 does under READ COMMITTED when two of these updates hit one row at once.
Approach
- One transaction, three writes, no network call inside it: UPDATE resource SET title = $3, version = version + 1, updated_at = now() WHERE resource_id = $1 AND tenant_id = $4 AND version = $2; then INSERT the resource_revision row at version $2 + 1; then INSERT the outbox_event row at the same aggregate_version. The event goes to a table rather than a broker because no transaction spans both.
- Branch on the affected-row count before doing anything else. Zero has three causes — stale version, wrong tenant, row gone — so re-read once and map to 409 carrying the current version, or 404 for an id outside the caller's tenant, which also stops the endpoint confirming that another tenant's id exists.
- State the engine behaviour instead of assuming it. Under READ COMMITTED the second UPDATE blocks on the row lock, and when the first commits PostgreSQL re-evaluates the WHERE clause against the newly committed row, so the version predicate now fails and the statement reports zero rows. Under REPEATABLE READ the identical collision raises SQLSTATE 40001 instead, so the handler must fold both shapes into one conflict response.
- Keep UNIQUE (resource_id, version) even though the predicate already serialises writers. It is what makes a lost update unwritable if any other path ever reaches the revision table, and it converts a logic bug into 23505 rather than into a silently missing history row.
Follow-up
- A client sends the version it read ten minutes ago and the resource has moved three versions. What is in your 409 so it can resolve the conflict without a full re-fetch?
- Two editors, two disjoint fields, no overlap. Does your answer still refuse the second write, and should it?
Hold a per-tenant active cap against concurrent creates
A tenant on the standard plan may hold at most 50 resources with status='active'. The create handler runs SELECT count(*) FROM resource WHERE tenant_id = $1 AND status = 'active', compares to 50, then inserts. Two creates arrive 3 ms apart on different instances and the tenant lands at 51. Name the anomaly, say whether PostgreSQL 16 READ COMMITTED or REPEATABLE READ prevents it and why, then give an implementation that holds the cap at READ COMMITTED with the exact statements. Finally, say what changes when the cap is 'at most one running export per tenant' on job_run.
Approach
- Name it: write skew. The two transactions read an overlapping set and write disjoint rows, so there is no row-level conflict for the engine to detect and each commit is individually legal.
- Rule out the levels precisely. READ COMMITTED takes a fresh snapshot per statement and takes no lock on the counted rows, so both see 49. PostgreSQL's REPEATABLE READ is snapshot isolation: it removes non-repeatable reads and phantoms within the snapshot but still admits write skew, because the anomaly is not a re-read of a changed row, it is a read of a set that a concurrent transaction invalidates. Only SERIALIZABLE closes it, by tracking the read dependency and aborting one transaction with SQLSTATE 40001 — a guarantee that exists only if the application re-runs the whole transaction from the read.
- Convert the set predicate into a single-row conflict: keep tenant.active_resource_count and run UPDATE tenant SET active_resource_count = active_resource_count + 1 WHERE tenant_id = $1 AND active_resource_count < 50 in the same transaction as the INSERT. Zero affected rows is the cap, returned as 409. The row lock serialises the decision at any isolation level, and contention is bounded to one tenant's row — which is also the fair-scheduling unit, unlike a global counter that would convoy every tenant behind one row.
- State the cost you just took on: a counter is a second source of truth that can drift, so every path that changes status must adjust it inside the same transaction, and a periodic reconciliation has to exist, with resource_revision as the authority for what the count should have been.
Follow-up
- A resource moves from archived back to active. Which statements change, and what breaks if the counter update and the status change land in different transactions?
- The cap becomes plan-dependent and a plan can change mid-month. Where does the number 50 live, and who reads it?
Given a stream of numbers, design an efficient method to find the most common numbers in the stream dynamicall
Given a stream of numbers, design an efficient method to find the most common numbers in the stream dynamically.
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Design the backend architecture and class structure for a Tetris game, outlining how pieces, the board, and ga
Design the backend architecture and class structure for a Tetris game, outlining how pieces, the board, and game loop logic interact.
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Create an object-oriented model for a classic card game (such as Poker) or a parking garage management system.
Create an object-oriented model for a classic card game (such as Poker) or a parking garage management system.
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Design an ingestion and mapping system to process incoming MLS data points and map them to our internal databa
Design an ingestion and mapping system to process incoming MLS data points and map them to our internal database schema.
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Explain the architectural design of a complex project you worked on in the past, detailing the trade-offs of y
Explain the architectural design of a complex project you worked on in the past, detailing the trade-offs of your technology choices.
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Write a suite of unit and integration tests for a newly implemented REST API endpoint.
Write a suite of unit and integration tests for a newly implemented REST API endpoint.
Approach
- Say who the caller is and what they do when the call fails halfway.
- Define the identity of a request so a retry cannot double-apply it.
- Separate accepted, pending, failed and confirmed; they are different facts.
- Design the error taxonomy before the success shape; callers branch on it.
Follow-up
- What happens if the caller retries after a timeout?
- How does a client discover it is on an old version of this contract?
You are given a Java or Python program with several failing test cases; locate the bugs, refactor the code for
You are given a Java or Python program with several failing test cases; locate the bugs, refactor the code for better readability, and ensure all tests pass.
Approach
- Establish what changed and when, before forming any theory.
- Pick a bisection that eliminates candidates whichever way it turns out.
- Check the instrumentation before believing the symptom.
- Separate the trigger from the cause; the deploy is rarely the bug.
Follow-up
- What would you look at first, and what would it rule out?
- How would you tell a cause from a coincidence here?
Built from the rounds and topics Redfin candidates report.
Prepare, practise & reflect
One practical outcome each day. Spend longer where you need it.
0 / 7 done01Map the Redfin loop
- Write out the reported sequence: Recruiter Screen, Online Assessment or Technical Phone Screen, Take-Home Assessment, Virtual Onsite Loop.
- For each round, write one sentence on what it is judging, from the description above, and mark the one you are least ready for.
Deliverable: A one-page map of the 4 reported rounds, with the weakest marked.
02Work Data Structures & Algorithms (DS&A)
- Spend the session on Data Structures & Algorithms (DS&A), which Redfin candidates report being tested on.
- Write one worked example in Data Structures & Algorithms (DS&A) and time yourself on it.
Deliverable: One timed worked example in Data Structures & Algorithms (DS&A).
03Work Algorithmic Problem Solving
- Spend the session on Algorithmic Problem Solving, which Redfin candidates report being tested on.
- Write one worked example in Algorithmic Problem Solving and time yourself on it.
Deliverable: One timed worked example in Algorithmic Problem Solving.
04Work Coding Interviews
- Spend the session on Coding Interviews, which Redfin candidates report being tested on.
- Write one worked example in Coding Interviews and time yourself on it.
Deliverable: One timed worked example in Coding Interviews.
05Answer out loud: Data Structures & Algorithms
- Answer aloud, timed: Write an algorithm to traverse a 2D grid in a spiral pattern (Spiral Matrix).
- Answer aloud, timed: Given a stream of numbers, design an efficient method to find the most common numbers in the stream dynamically.
Deliverable: Spoken answers to 2 reported Data Structures & Algorithms question(s), under time.
06Answer out loud: Object-Oriented Design & Architecture
- Answer aloud, timed: Design the backend architecture and class structure for a Tetris game, outlining how pieces, the board, and game loop logic interact.
- Answer aloud, timed: Create an object-oriented model for a classic card game (such as Poker) or a parking garage management system.
Deliverable: Spoken answers to 2 reported Object-Oriented Design & Architecture question(s), under time.
07Answer out loud: Debugging & Code Quality
- Answer aloud, timed: You are given a Java or Python program with several failing test cases; locate the bugs, refactor the code for better readability, and ensure all tests pass.
- Answer aloud, timed: Conduct a code review on a provided pull request, identifying potential security risks, performance bottlenecks, and syntax improvements.
Deliverable: Spoken answers to 2 reported Debugging & Code Quality question(s), under time.
Expand any day for tasks and deliverables. Your progress is saved on this device.
Behavioural rounds judge the decision you made and what it cost.
Conduct a code review on a provided pull request, identifying potential security risks, performance bottleneck
Conduct a code review on a provided pull request, identifying potential security risks, performance bottlenecks, and syntax improvements.
Approach
- Pick a story where you made the decision, not one where you watched it.
- State the situation in two sentences and spend the rest on the reasoning.
- Give the blast radius: what could have broken, and what you measured.
- Name the disagreement and how you resolved it with evidence.
Follow-up
- What would you do differently if you ran that again?
- How did you know your change caused the improvement?
Describe the most technically challenging project you have worked on. What roadblocks did you face, and how di
Describe the most technically challenging project you have worked on. What roadblocks did you face, and how did you resolve them?
Approach
- Pick a story where you made the decision, not one where you watched it.
- State the situation in two sentences and spend the rest on the reasoning.
- Give the blast radius: what could have broken, and what you measured.
- Name the disagreement and how you resolved it with evidence.
Follow-up
- What would you do differently if you ran that again?
- How did you know your change caused the improvement?
Tell me about a time you had a disagreement with a teammate or a product manager. How did you handle the confl
Tell me about a time you had a disagreement with a teammate or a product manager. How did you handle the conflict, and what was the outcome?
Approach
- Pick a story where you made the decision, not one where you watched it.
- State the situation in two sentences and spend the rest on the reasoning.
- Give the blast radius: what could have broken, and what you measured.
- Name the disagreement and how you resolved it with evidence.
Follow-up
- What would you do differently if you ran that again?
- How did you know your change caused the improvement?
Why do you want to work at Redfin specifically, and how do you align with our mission to make real estate bett
Why do you want to work at Redfin specifically, and how do you align with our mission to make real estate better for consumers?
Approach
- Pick a story where you made the decision, not one where you watched it.
- State the situation in two sentences and spend the rest on the reasoning.
- Give the blast radius: what could have broken, and what you measured.
- Name the disagreement and how you resolved it with evidence.
Follow-up
- What would you do differently if you ran that again?
- How did you know your change caused the improvement?
- 01
Conduct a code review on a provided pull request, identifying potential security risks, performance bottlenecks, and syntax improvements.
- 02
Describe the most technically challenging project you have worked on. What roadblocks did you face, and how did you resolve them?
- 03
Tell me about a time you had a disagreement with a teammate or a product manager. How did you handle the conflict, and what was the outcome?
- 04
Why do you want to work at Redfin specifically, and how do you align with our mission to make real estate better for consumers?
How difficult is the technical interview at Redfin?
The technical interviews are of average to moderate difficulty. Redfin focuses on practical engineering skills, debugging, and clean object-oriented design rather than obscure, highly competitive programming puzzles. Practicing Leetcode easy-to-medium questions and focusing on code readability will prepare you well.
Redfin Software Engineer candidate reports ↗Why is the behavioral interview so heavily emphasized?
Redfin prides itself on a collaborative, humble, and customer-first culture. The company actively avoids hiring brilliant but difficult individuals, meaning a strong behavioral showing is absolutely critical to receiving an offer.
Redfin Software Engineer candidate reports ↗What is the format of the take-home assignment?
The take-home assignment is usually a practical, untimed exercise (typically expected to take 2-3 hours) where you build a small application or tool, such as a CLI app or a simple API. You can complete it in the programming language of your choice, and you will review your solution with an engineer in the subsequent round.
Redfin Software Engineer candidate reports ↗How long does it take to hear back after the onsite interview?
While timelines can vary by team and season, candidates typically receive feedback or an update within one to two weeks following their final onsite loop.
Redfin Software Engineer candidate reports ↗How hard is the Redfin interview?
Candidates most commonly rate Redfin interviews as medium, based on 535 reported interviews. About 50% of candidates who interview go on to receive an offer.
Redfin Software Engineer candidate reports ↗What topics does Redfin test in interviews?
Redfin interviews most often cover SQL, Tableau, Stakeholder Management, Take-Home Assignments, and Behavioral Interviewing. The exact emphasis depends on the specific role you apply for.
Redfin Software Engineer candidate reports ↗Is Redfin a good place to work?
Employees rate Redfin 3.7 out of 5 overall, based on aggregated workplace reviews spanning career growth, work-life balance, compensation, culture, and management.
Redfin Software Engineer candidate reports ↗Sources & methodology 3 sources ↗
Official role evidence, timestamped platform data and clearly labeled preparation advice.
- 01Redfin Software Engineer candidate reports ↗
Company-reported rounds, questions and FAQ.
candidate · Accessed 2026-09-22 - 02PracHub Software Engineer practice ↗
PracHub practice material, not company-reported.
platform · Accessed 2026-09-22 - 03PracHub preparation framework ↗
PracHub preparation guidance.
platform · Accessed 2026-09-22