Zoox

Zoox Software Engineer Phone Screen Questions

3+ questions from real Zoox Software Engineer Phone Screen rounds, reported by candidates who interviewed there.

3
Questions
2
Topic Areas
10+
Sources

What does the Zoox Phone Screen round test?

The Zoox phone screen typically lasts 45-60 minutes and evaluates core Software Engineer fundamentals. Candidates should expect 1-2 algorithmic problems, basic system design discussion at senior levels, and questions about relevant experience. The goal is to confirm technical competence before bringing candidates onsite.

Top Topics in This Round

Zoox Software Engineer Phone Screen Questions

## Problem Design a cost estimation engine for a platform that offers multiple services (e.g., compute, storage, network). Each service has its own pricing rules. The engine must support adding new service types without modifying existing code. ```python from abc import ABC, abstractmethod class ServicePricer(ABC): @abstractmethod def estimate(self, usage: dict) -> float: pass class ComputePricer(ServicePricer): # $0.05/hour per vCPU, $0.01/GB-hour RAM def estimate(self, usage: dict) -> float: # usage: {"vcpus": int, "ram_gb": float, "hours": float} pass class StoragePricer(ServicePricer): # $0.023/GB-month def estimate(self, usage: dict) -> float: pass class CostEstimator: def add_service(self, name: str, pricer: ServicePricer) -> None: ... def total_cost(self, usages: dict[str, dict]) -> float: ... ``` ``` ce = CostEstimator() ce.add_service("compute", ComputePricer()) ce.add_service("storage", StoragePricer()) ce.total_cost({"compute": {"vcpus":4,"ram_gb":16,"hours":720}, "storage": {"gb":100}}) -> (4*0.05 + 16*0.01)*720 + 100*0.023 = ... ``` ## Follow-ups 1. Which design pattern does this use, and why is it appropriate here? 2. How would you add tiered pricing (first 100 GB at rate A, next at rate B) cleanly? 3. How do you handle currency conversion if services are priced in different currencies? 4. How would you add a discount system without modifying the `ServicePricer` interface?

## Problem Design a `LaneController` for a highway with `n` lanes. Vehicles enter and exit lanes. Each lane has a capacity. Support queries for the lane with the most available space, merging two adjacent lanes, and reporting congestion alerts when any lane exceeds 80% capacity. ```python class LaneController: def __init__(self, n: int, capacity_per_lane: int): ... def vehicle_enter(self, lane: int) -> bool: """Add vehicle to lane. Return False if at capacity.""" ... def vehicle_exit(self, lane: int) -> bool: """Remove vehicle from lane. Return False if lane is empty.""" ... def most_available_lane(self) -> int: """Return lane index with the most free space.""" ... def merge_lanes(self, lane_a: int, lane_b: int) -> None: """Merge two adjacent lanes into one with combined capacity.""" ... def get_congestion_alerts(self) -> list[int]: """Return list of lane indices exceeding 80% capacity.""" ... ``` ``` lc = LaneController(3, 10) lc.vehicle_enter(0) # 7 times lc.get_congestion_alerts() -> [0] # 7/10 = 70%? No, 8/10=80% triggers. ``` ## Follow-ups 1. How does a priority queue help with `most_available_lane` if lanes update frequently? 2. How do you handle `merge_lanes` when vehicles must be redistributed? 3. How would you make this thread-safe for concurrent highway simulations? 4. Extend to support per-vehicle-type restrictions (e.g., lane 0 for trucks only).

## Problem Design the core class structure for a turn-based RPG battle system. Characters take turns attacking, using abilities, or defending. Each ability has a cooldown. A character is defeated when HP drops to 0. ```python class Character: def __init__(self, name: str, hp: int, attack: int, defense: int): ... def take_damage(self, amount: int) -> int: """Return actual damage after defense.""" def is_alive(self) -> bool: ... def use_ability(self, ability_name: str, target: 'Character') -> str: ... class Ability: def __init__(self, name: str, damage: int, cooldown: int): ... def is_ready(self) -> bool: ... def activate(self) -> None: ... def tick(self) -> None: """Called each turn to reduce cooldown.""" class BattleSystem: def __init__(self, team1: list[Character], team2: list[Character]): ... def next_turn(self) -> str: """Execute one turn, return action log.""" def is_battle_over(self) -> bool: ... def winner(self) -> str | None: ... ``` ``` battle = BattleSystem([warrior], [mage]) while not battle.is_battle_over(): print(battle.next_turn()) print(battle.winner()) ``` ## Follow-ups 1. How would you implement a status effect system (poison, stun) cleanly without modifying the `Character` class? 2. How do you ensure ability cooldowns are tracked correctly across multi-character teams? 3. How would you serialize and restore battle state for a save/load feature? 4. Extend to support items that any character can use on their turn.

What to Expect in the Zoox Phone Screen Round

The Zoox Software Engineer Phone Screen round has a specific calibration purpose distinct from other rounds in the loop. Across 3+ verified reports on LeakCode for this exact round type, the consistent expectations: clear scoping of the problem before diving into a solution, explicit reasoning about complexity, structured handling of edge cases, and the ability to discuss trade-offs between two reasonable approaches.

Reports tagged with the Phone Screen round at Zoox show recurring patterns in difficulty and topic distribution. The Phone Screen round is typically 45-60 minutes; the interviewer is calibrated against a specific rubric. The discriminator between candidates who advance and candidates who do not is rarely the final correctness of the answer. It is the path: did you clarify, did you verbalize your approach, did you handle edge cases, and did you communicate throughout.

How To Prepare for This Specific Round

Filter the questions below to the most recent reports (past 6-12 months). Questions tagged for this exact round type from this exact company at this exact role level are the highest-signal data available. Older reports may reference questions that have since rotated out of the company's pool.

Practice 4-6 representative problems from this set under timed conditions. The goal is not memorization (companies rotate questions); the goal is to internalize the patterns the interviewer typically reaches for and the depth of follow-up to expect. Reports on LeakCode also tag the typical follow-up depth at this round type, which is the discriminating signal between hire and no-hire calibration.

Phone Screen Round Timing and Format

The Phone Screen round at Zoox typically runs 45-60 minutes. Use the first 2-3 minutes to clarify requirements; you should never start coding or designing without verifying the input/output format, constraints, and edge cases out loud. Use the next 5-7 minutes to verbalize your approach before writing any code. The middle 20-30 minutes are implementation. Reserve the final 10 minutes for testing with concrete examples and discussing optimization or trade-offs.

Time budget discipline is one of the most reliable senior-vs-junior discriminators in this round. Strong candidates verbalize where they are in their budget out loud ("I've used about 20 minutes, I have 15 minutes left for testing and one optimization"). This signals engineering maturity to the interviewer and creates positive feedback they can capture in writing.

Common Failure Modes in This Round

Reports tagged "no hire" at Zoox Software Engineer Phone Screen commonly cite: coding silently without verbalizing approach, jumping to implementation before clarifying requirements, missing edge cases (empty input, single element, very large input), producing working code that the candidate cannot refactor when asked, and failing to test their solution with concrete examples before declaring done.

The single most predictive failure mode in 2025-2026 reports: not asking clarifying questions. Interviewers at all FAANG companies are explicitly trained to weight this dimension. Strong candidates ask 3-5 clarifying questions even on problems that look obvious; weak candidates dive into code immediately. The clarifying-question check is often the first signal recorded in the interviewer's notes.

See All 3 Questions from This Round

Full question text, answer context, and frequency data for subscribers.

Get Access