Wish hires Software Engineers; this guide collects what candidates report about the process.
Technical Screenings
reportedCandidates undergo a series of technical screenings focused on practical coding skills.
What to demonstrate
- Candidates undergo a series of technical screenings focused on practical coding skills
- Depth in Data Structures & Algorithms (DSA)
How to prepare
- Answer aloud and timed: How would you implement a specific data structure to optimize for search performance?
- Answer aloud and timed: Solve a classic problem involving binary trees or graph traversals.
Onsite/Virtual Onsite
reportedA comprehensive onsite or virtual onsite experience that assesses coding and architectural reasoning.
What to demonstrate
- A comprehensive onsite or virtual onsite experience that assesses coding and architectural reasoning
- Depth in Data Structures & Algorithms (DSA)
How to prepare
- Answer aloud and timed: Given a large dataset, how would you find the top K elements efficiently?
- Answer aloud and timed: Explain the time and space complexity of your implementation.
PracHub editorial advice for the preparation topics above.
Ask questions
At the end of every round, have 2–3 thoughtful questions about the team’s current technical challenges or the company's roadmap.
Master your resume
You will likely be asked to deep-dive into past projects; be ready to explain the "why" behind your technical decisions.
Communicate your thought process
Even if you know the answer, explain the steps you are taking to reach it. This is often more important than the code itself.
Practice system design
For those moving to onsite rounds, spend significant time sketching out high-level architectures on paper.
Choose a category, try a prompt, then open its approach, worked solution or follow-up when you need it.
How would you implement a specific data structure to optimize for search performance?
How would you implement a specific data structure to optimize for search performance?
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?
Solve a classic problem involving binary trees or graph traversals.
Solve a classic problem involving binary trees or graph traversals.
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?
Given a large dataset, how would you find the top K elements efficiently?
Given a large dataset, how would you find the top K elements efficiently?
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?
Explain the time and space complexity of your implementation.
Explain the time and space complexity of your implementation.
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?
How would you handle edge cases in a dynamic programming problem?
How would you handle edge cases in a dynamic programming 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?
Explain how you would structure a database schema for a high-traffic service.
Explain how you would structure a database schema for a high-traffic service.
Approach
- Name the grain you start from and join outward from it.
- Check whether any join is one-to-many before aggregating, or the sums inflate.
- Say which index the query would use, and what makes it unusable.
- Handle the rows that do not match: that is usually the actual question.
Follow-up
- How does the query change if that join becomes one-to-many?
- What happens to this when the table is ten times larger?
Keep soft-deleted accounts from blocking re-registration
app_user holds user_id, tenant_id, email CITEXT, password_hash (NULL for SSO principals), email_verified_at, auth_version, status ('invited','active','suspended','deactivated'), created_at, updated_at, deleted_at. Two live accounts for one address inside a tenant must be impossible, but an address freed by a soft delete must be reusable, and the same tenant may delete and re-register it repeatedly. Write the uniqueness DDL for PostgreSQL 16, then the equivalent for MySQL 8 where partial indexes do not exist, and say what each permits once three deleted rows already hold that address.
Approach
- Start from what is actually unique: not (tenant_id, email), but (tenant_id, email) among live rows. PostgreSQL says that directly — CREATE UNIQUE INDEX app_user_live_email ON app_user (tenant_id, email) WHERE deleted_at IS NULL. A full constraint over the same two columns burns the address permanently the first time someone deletes an account.
- Keep case-insensitivity in the type or the index, never in the application: CITEXT as given, or UNIQUE (tenant_id, lower(email)) as an expression index where the extension is unavailable. A case-sensitive unique column is exactly how two accounts for one human appear.
- For MySQL 8 the predicate has to move inside the key: add a discriminator column that is a constant 0 while the row is live and is set to user_id on delete, with UNIQUE (tenant_id, email, deleted_marker). Live rows share the constant and still collide; deleted rows differ from each other and stop colliding.
- State the NULL variant and its dependency: leaving the marker NULL for deleted rows also works, because a unique index treats NULLs as distinct — true in MySQL, and true in PostgreSQL only under the default NULLS DISTINCT, which PostgreSQL 15 lets you reverse. Check the polarity against the three existing deleted rows: constant-on-live is what preserves the collision you want, and reversing it silently admits duplicate live accounts.
Follow-up
- A deleted account re-registers with the same address the next day. Do the old resource rows follow the new user_id, and how does the API keep the two principals apart?
- How do you honour an erasure request while resource_revision.actor_user_id still references this table?
How would you design a feed or recommendation system for an e-commerce platform?
How would you design a feed or recommendation system for an e-commerce platform?
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?
How do you ensure high availability and load balancing in a distributed system?
How do you ensure high availability and load balancing in a distributed 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 API for a feature that requires low latency.
Design an API for a feature that requires low latency.
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?
How would you handle data consistency in a distributed environment?
How would you handle data consistency in a distributed environment?
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?
p99 jumped on one listing filter while p50 stayed flat
After a release that added an owner_user_id filter to the resource listing, p99 rose from 90 ms to 1.9 s while p50 stayed at 40 ms. Traffic and row counts are unchanged. resource carries the index (tenant_id, status, updated_at DESC, resource_id DESC). The new query filters tenant_id and owner_user_id, orders by updated_at DESC, resource_id DESC, and takes 20 rows. On PostgreSQL, explain the shape of the regression, prove it from a query plan, and give the index you would add.
Approach
- Start from the shape. A flat p50 with a moved p99 means a subset of requests changed cost, not all of them, so the first job is naming the subset. Bucket the endpoint's latency by the tenant's row count; the natural hypothesis is that large tenants are a small share of requests and all of the tail.
- Get the plan for the new query on a large tenant with EXPLAIN (ANALYZE, BUFFERS). Expect an index scan over the tenant's range, a filter discarding most of it, then a Sort feeding the Limit, possibly reporting Sort Method: external merge Disk. Read actual rows on the scan node, not estimated.
- Explain why the existing index cannot serve it. A composite B-tree is seekable only as a left prefix, and with no equality predicate on status the scan cannot treat updated_at as an ordering, because rows in the tenant's range are ordered by status first. Everything matching must be read and sorted before LIMIT 20 can apply, so a tenant with 400,000 rows pays 400,000 rows to return 20.
- Add (tenant_id, owner_user_id, updated_at DESC, resource_id DESC). Equality on the first two columns leaves the index ordered by updated_at within that pair, so the plan becomes an index scan that stops after 20 rows with no Sort node. PostgreSQL can scan a B-tree backwards, so the DESC markers matter only if the two sort columns ever disagree in direction; keeping them explicit documents the order the keyset cursor depends on.
Follow-up
- The endpoint paginates with OFFSET. What does page 500 cost with your index, and what does the keyset version cost?
- How would you have caught this before release, given that a 10,000-row seed database produces the same plan shape at an unnoticeable cost?
Built from the rounds and topics Wish candidates report.
Prepare, practise & reflect
One practical outcome each day. Spend longer where you need it.
0 / 7 done01Map the Wish loop
- Write out the reported sequence: Technical Screenings, Onsite/Virtual Onsite.
- 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 2 reported rounds, with the weakest marked.
02Work Data Structures & Algorithms (DSA)
- Spend the session on Data Structures & Algorithms (DSA), which Wish candidates report being tested on.
- Write one worked example in Data Structures & Algorithms (DSA) and time yourself on it.
Deliverable: One timed worked example in Data Structures & Algorithms (DSA).
03Work Coding Interviews (Medium/Hard Difficulty)
- Spend the session on Coding Interviews (Medium/Hard Difficulty), which Wish candidates report being tested on.
- Write one worked example in Coding Interviews (Medium/Hard Difficulty) and time yourself on it.
Deliverable: One timed worked example in Coding Interviews (Medium/Hard Difficulty).
04Work Problem Solving
- Spend the session on Problem Solving, which Wish candidates report being tested on.
- Write one worked example in Problem Solving and time yourself on it.
Deliverable: One timed worked example in Problem Solving.
05Answer out loud: Data Structures and Algorithms
- Answer aloud, timed: How would you implement a specific data structure to optimize for search performance?
- Answer aloud, timed: Solve a classic problem involving binary trees or graph traversals.
Deliverable: Spoken answers to 2 reported Data Structures and Algorithms question(s), under time.
06Answer out loud: System Design and Architecture
- Answer aloud, timed: How would you design a feed or recommendation system for an e-commerce platform?
- Answer aloud, timed: Explain how you would structure a database schema for a high-traffic service.
Deliverable: Spoken answers to 2 reported System Design and Architecture question(s), under time.
07Answer out loud: Behavioral and Problem Solving
- Answer aloud, timed: Tell me about a time you had to troubleshoot a difficult technical issue.
- Answer aloud, timed: How do you handle disagreements with team members regarding code quality or design?
Deliverable: Spoken answers to 2 reported Behavioral and Problem Solving 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.
Tell me about a time you had to troubleshoot a difficult technical issue.
Tell me about a time you had to troubleshoot a difficult technical issue.
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?
How do you handle disagreements with team members regarding code quality or design?
How do you handle disagreements with team members regarding code quality or design?
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 a project where you had to pivot based on changing requirements.
Describe a project where you had to pivot based on changing requirements.
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?
What is your process for learning a new technology under a tight deadline?
What is your process for learning a new technology under a tight deadline?
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?
How do you prioritize tasks when faced with multiple competing priorities?
How do you prioritize tasks when faced with multiple competing priorities?
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
Tell me about a time you had to troubleshoot a difficult technical issue.
- 02
How do you handle disagreements with team members regarding code quality or design?
- 03
Describe a project where you had to pivot based on changing requirements.
- 04
What is your process for learning a new technology under a tight deadline?
How long does the interview process typically take?
While it varies by team, many candidates complete the process within 3 to 5 weeks from the initial screen to an offer decision.
Wish Software Engineer candidate reports ↗What is the best way to prepare for the coding rounds?
Focus on LeetCode-style problems at a medium to hard difficulty level. Practice writing code on a whiteboard or a simple text editor without relying on IDE autocomplete.
Wish Software Engineer candidate reports ↗Does Wish provide feedback if I am not selected?
Due to the high volume of applicants, personalized feedback is not always guaranteed. Focus on self-reflection after each round to identify your own areas for improvement.
Wish Software Engineer candidate reports ↗How should I handle an interviewer who is being difficult or unhelpful?
Maintain your professional composure. If an interviewer is unresponsive, politely ask for clarification or state your assumptions clearly to keep the conversation moving.
Wish Software Engineer candidate reports ↗What topics does Wish test in interviews?
Wish interviews most often cover System Design, Problem Solving, Behavioral Interviewing, SQL, and Algorithms. The exact emphasis depends on the specific role you apply for.
Wish Software Engineer candidate reports ↗Sources & methodology 3 sources ↗
No official company page is cited. Rounds and questions come from candidate reports and PracHub editorial material; each source shows the date it was read.
- 01Wish Software Engineer candidate reports ↗
Company-reported rounds, questions and FAQ.
Candidate reports · Accessed 2026-09-22 - 02PracHub Software Engineer practice ↗
PracHub practice material, not company-reported.
PracHub page · Accessed 2026-09-22 - 03PracHub preparation framework ↗
PracHub preparation guidance.
PracHub page · Accessed 2026-09-22