Waabi · Software Engineer
Updated · 2026-09-16

Waabi Software Engineer
Interview Questions & Guide 2026

THE 60-SECOND BRIEF

Waabi develops AI for autonomous transportation.

This guide focuses on simulation-platform preparation: reproducible runs, reliable scheduling and explainable results.

Build a reproducible run, trace a worker failure, and explain why a result changed.

ReproducibilityJob schedulingFailure analysis

14 min read

Practice 13 Software Engineer prompts
13Practice promptsAcross five skill areas
4With worked solutionsIncluded in the practice prompts

A passing simulation means little if you cannot reproduce it. Start your preparation with a small experiment runner: accept a scenario, record its inputs, run a worker and explain the result. This gives you a concrete way to discuss coding, distributed systems and debugging without pretending to know the company’s internal infrastructure.

Connect your preparation to the work. Waabi’s Simulation Platform posting describes a platform that brings together autonomy software, actor models and sensor simulation. Use the exercises below to practise the engineering decisions around that work: clear input contracts, reliable execution and results you can trace.

Match the team before choosing depth. Simulation infrastructure, motion planning and research are different paths. This guide emphasizes general software engineering rather than mathematical proofs or model training. Take the exact opening you applied for and mark which responsibilities you can support with a project example. Spend additional time on the gaps that matter to that team.

Use a deliberately small model. Our practice runner processes named scenarios and stores one result per logical run. Retries are separate attempts. Record the scenario version, software version and seed beside each result. Then identify any other dependencies that could change the outcome.

Bring evidence to your explanations. Show a test that failed, the smaller input that reproduced it and the change that fixed it. Explain what the test covers and what you would investigate next.

Visual walkthrough

Explore your preparation priorities

Choose a focus to see how to prepare.

STAGE 1 / 3

Define a reproducible run

Correctness: Make repeated inputs and missing results distinguishable.

YOUR PREPARATION
  • Write a run manifest and identify every mutable dependency it references.
  • Attempt the interval and duplicate-run prompts. Add an empty input and a repeated identifier to each test set.
Try a related exerciseMerge overlapping simulation windows

Choose a focus, review the preparation steps, then try the linked practice question.

01

Define a reproducible run

editorial

Begin with the smallest experiment you can explain from input to result. Give the scenario and software explicit versions. Separate a logical run from each attempt to execute it. Describe what you would record if a worker dies before reporting completion.

What to demonstrate

  • Correctness: Make repeated inputs and missing results distinguishable.
  • Communication: Explain which assumptions are required for a comparison to be meaningful.

How to prepare

  • Write a run manifest and identify every mutable dependency it references.
  • Attempt the interval and duplicate-run prompts. Add an empty input and a repeated identifier to each test set.
Read the source
02

Trace execution and recovery

editorial

Next, walk one job through a worker failure. Sketch who owns the job while it runs and what happens when that ownership expires. A second worker may start before the first stops, so the result store must reject stale completion attempts.

What to demonstrate

  • Recovery: Protect the final result even when execution happens more than once.
  • Tradeoffs: Separate faster retries from safe publication.

How to prepare

  • Draw a lease timeline with a paused worker and a replacement worker.
  • Explain how a token or version check prevents the old worker from overwriting the new result.
Read the source
03

Explain a result you distrust

editorial

Finish with a result that changed unexpectedly. Keep input and software versions visible while you narrow the failure. Start from a repeatable small case; adding more runs before understanding the comparison can make a misleading aggregate look more convincing.

What to demonstrate

  • Debugging: Separate measurement errors from behavior changes.
  • Judgment: Describe what would make you halt a comparison or investigate further.

How to prepare

  • Prepare a real debugging story with the observation that changed your hypothesis.
  • Compare results only after checking the matched scenario set, metric definition and missing-run policy.
Read the source

PracHub editorial advice for the preparation topics above.

Visual walkthrough

Follow the state, not just the happy path

Choose a scenario to trace what changes.

The current owner completes the job.

  1. 01QueueQueue.
  2. 02Run with tokenRun with token.
  3. 03Commit current tokenCommit current token.
WHAT YOUR SYSTEM SHOULD DO

Publish the artifact after checking ownership.

Switch between scenarios to trace worker ownership, retries and result publication.

01

Treating a seed as the whole experiment

Record the inputs that can change. A seed cannot identify a changed scenario, dependency or simulator build. Keep those versions beside the result and document which sources of nondeterminism remain.

02

Counting retries as fresh evidence

Count logical runs, not attempts. A worker failure should not give one scenario extra weight in a success-rate calculation. Decide which completed attempt represents the run.

03

Publishing a late worker result

Check ownership when committing. A lease expiring does not stop a paused process. Reject results with stale fencing tokens even if their computation finished successfully.

04

Comparing different scenario sets

Inspect the denominator. A higher pass rate may come from missing difficult cases. Report absent results separately and compare matched scenario IDs before drawing a conclusion.

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

10 technical prompts4 include a worked solution

Merge overlapping simulation windows

mediumWorked solution
IntervalsSorting

Given integer intervals [start, end), reject end <= start and merge intervals that overlap or touch. Return sorted, nonoverlapping windows without changing the input.

Approach
  1. Start simple: Sort a copy by start, then extend the final output window when the next start is at or before its end.
  2. Check boundaries: Touching intervals are merged by this contract, even though their half-open sets do not overlap.
Worked solution 35 min
  1. Sort a new list so the caller’s input is preserved. Validate each interval before extending the output.
  2. When a window touches or overlaps the final output window, replace its end with the larger end. Otherwise append a new window. Sorting dominates at O(n log n).
Python
def merge_windows(intervals):
    result = []
    for start, end in sorted(intervals):
        if end <= start:
            raise ValueError("invalid interval")
        if result and start <= result[-1][1]:
            result[-1] = (result[-1][0], max(result[-1][1], end))
        else:
            result.append((start, end))
    return result

Scroll sideways to view long lines.

EXPECTED RESULT[(1, 5), (8, 10)] for [(3,5),(1,3),(8,10)].
Follow-up
  • How would the answer change if touching windows had to remain separate?

Deduplicate run requests

easy
Hash setsIdempotency

Given request IDs in arrival order, return the first occurrence of each ID while preserving order. Assume IDs are nonempty strings; reject a blank ID.

Approach
  1. Use a set for membership and a list for output. State the O(n) expected time and O(u) additional space.
  2. A bounded cache needs an expiry policy; after expiry it no longer promises global deduplication.
Follow-up
  • How would you support a stream that never ends?

Count recent completed jobs

medium
QueuesTime boundaries

Count completion events in (now − 10, now]. Events arrive in timestamp order and each contributes one. Advance the clock during idle periods too.

Visual walkthrough

Which events still count?

ROLLING TOTAL+2units
(0, 10]Events in window: 2
In windowExpiredNot arrived

The left boundary is excluded; the right boundary is included. Drag past an event to see it enter, then expire 10 seconds later.

See the event values
  • At 0s: +1expired
  • At 5s: +1in window
  • At 10s: +1in window
  • At 14s: +1not arrived
  • At 19s: +1not arrived

Drag the clock to follow the example events. Each dot counts once inside (now − 10, now]; the lower boundary is excluded.

Approach
  1. Expire timestamps at or before the lower boundary. A deque gives amortized constant work per arrival.
  2. Treat the timestamps as arrival time; out-of-order event time needs a different contract.
Follow-up
  • What happens to the result at 30 seconds with no recent events?

Validate a reproducible run manifest

medium
CorrectnessEngineering reasoning

Implement a parser for JSON run manifests containing run_id, schema_version, seed and scenario_ids. Reject unknown versions, blank identifiers, duplicate scenario IDs and booleans used as integer seeds. Return either a normalized record or field-level errors.

Approach
  1. Define required fields and accepted types before parsing; distinguish malformed JSON from a valid object with invalid fields.
  2. Check exact integer types because Python bool is an int subclass. Preserve scenario order and reject duplicates rather than silently changing the requested run.
  3. Test missing fields, empty scenarios, duplicate IDs and unsupported versions. Keep parsing independent of storage so tests are deterministic.
Follow-up
  • How would you migrate version 1 without silently changing its meaning?
  • Which dependencies beyond the random seed must be pinned for reproducibility?

A suggested week of practice, with one concrete outcome per session. Adjust the order and pace to your experience and interview date.

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 your evidence
  • Read your exact opening and match two responsibilities to real project examples.

Deliverable: A role-to-project map

02Test the coding contract
  • Attempt the first coding problem. Add boundary cases before reading the solution.

Deliverable: A tested function

Practice prompt ↗
03Query the right record
  • Run the SQL example and create a case where insertion order gives the wrong answer.

Deliverable: A small dataset and expected output

Practice prompt ↗
04Trace the unhappy path
  • Switch the scenario diagram and explain which state is safe to show to a reader.

Deliverable: A recovery sketch

Practice prompt ↗
05Reproduce the race
  • Explain the debugging example with two competing operations. Identify the atomic or identity check.

Deliverable: A reproducible timeline

Practice prompt ↗
06Prepare your stories
  • Choose two behavioral prompts. Use real decisions, evidence and limitations instead of memorized scripts.

Deliverable: Two concise story outlines

07Rehearse and revise
  • Explain one solution aloud, test its weakest assumption and prepare questions about the actual role.

Deliverable: A review sheet for your next session

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

Use a real project. Explain your responsibility, the decision you made, the evidence you used and what you would change.

Explain a hypothesis you disproved

medium
CommunicationOwnership

Describe a debugging investigation in which evidence contradicted your first explanation.

Approach
  1. Be specific: Choose the smallest observation that changed your mind. Separate what you measured from what you inferred.
  2. Own your part: Distinguish your decision from the team’s work. Use a real result and state any remaining limitation.
Follow-up
  • What test would have disproved the replacement hypothesis?

Defend a reliability tradeoff

medium
CommunicationOwnership

Describe a time you reduced scope to protect correctness or reproducibility.

Approach
  1. Be specific: Name the user impact, options rejected and follow-up that checked whether the choice worked.
  2. Own your part: Distinguish your decision from the team’s work. Use a real result and state any remaining limitation.
Follow-up
  • What would have justified choosing speed instead?

Hand off an unresolved failure

medium
CommunicationOwnership

Explain how another engineer could continue your investigation without repeating it.

Approach
  1. Be specific: Provide the reproducer, known versions, attempted fixes and the next discriminating test.
  2. Own your part: Distinguish your decision from the team’s work. Use a real result and state any remaining limitation.
Follow-up
  • What detail did you initially omit that the next person needed?
  • 01

    Choose examples you can discuss without sharing confidential customer data.

Where should I start preparing?

Start with a small simulation runner you can explain end to end. Define its inputs, merge overlapping windows, then add retries and inspect what happens when a worker loses ownership.

What makes a strong project walkthrough?

Bring a concrete failure, the evidence that narrowed it down and the test that verified your fix. Explain how another engineer could reproduce the result using the same inputs and software version.

Do I have to use Python for these exercises?

The short Python examples make the contracts easy to test. Reimplement them in the language appropriate to your role, keeping the same inputs, expected outputs and edge cases.

How should I use the one-week checklist?

Treat each day as a practice session with a concrete deliverable. Repeat a session when you need more time, and use the final review to revisit the assumptions or edge cases you found hardest to explain.

What should I prioritize if time is short?

Start with the role description, one tested coding solution and one failure scenario you can explain end to end. Then prepare a real project story that shows how you made a decision under constraints.

Sources & methodology 5 sources ↗

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