A common mistake is treating Uber's pipeline as one big test. Uber actually filters candidates stage by stage, with very different question mixes, lengths, and pass bars per stage. Prepping only for OA leaves you blindsided in Tech Phone. Drilling only algorithms while skipping STAR stories burns the Onsite Hiring Manager round.
This article maps Uber's 5-stage path from application to offer onto a single timeline, breaking each stage into a question format matrix: how many minutes go to MCQ / Coding / SQL / System Design / Behavioral, and how much decision weight each carries. By the end you should be able to target your weakest stage with surgical precision.
Timeline Overview: 5 Stages Plus 4 Gaps
[Apply] --7-14d--> [OA] --3-5d--> [Recruiter Screen] --5-10d-->
[Tech Phone] --7-14d--> [Onsite Loop] --3-5d--> [Offer]
Total length: from application to offer averages 5-7 weeks. Fastest 3 weeks, slowest 12 weeks.
| Stage | Duration | Decision weight | Pass rate |
|---|---|---|---|
| Apply | Apply to OA link | Resume screen | ~50% |
| OA | 75-90 min | Algorithm AC rate | ~40% |
| Recruiter Screen | 30 min | Behavioral plus resume | ~70% |
| Tech Phone | 45-60 min | Algorithm plus system dialogue | ~50% |
| Onsite | 4-5 rounds x 60 min | Full breadth | ~30% |
Hardest two: OA and Onsite. Most underrated: the quality of "reverse questions" in the Recruiter Screen.
Stage 1: OA Question Format Matrix
| Format | Time | Score | Prep focus |
|---|---|---|---|
| Coding 1 | 30-35 min | 40% | LeetCode Medium speed |
| Coding 2 | 30-35 min | 40% | Medium-hard, DP / graph |
| MCQ (some batches) | 10-15 min | 10% | Time complexity / Python semantics |
| Coding 3 (some batches) | 20 min | 10% | Half AC on Hard is fine |
Pass bar: near-full AC on both (>= 80%), or one full AC plus the second at 50%.
Representative: Stages-style Resource Conversion
Given N resources and a conversion cost matrix between resources, find the minimum total cost to convert all resources into a target type T.
import heapq
def min_resource_conversion(graph, T, counts):
INF = float("inf")
dist = {T: 0}
heap = [(0, T)]
while heap:
d, u = heapq.heappop(heap)
if d > dist.get(u, INF):
continue
for v, w in graph[u]:
nd = d + w
if nd < dist.get(v, INF):
dist[v] = nd
heapq.heappush(heap, (nd, v))
return sum(counts[r] * dist.get(r, INF) for r in counts)
Time complexity: O((V+E) log V). Trap: build the reverse graph and run Dijkstra from T outward, instead of running it once per source.
Stage 2: Recruiter Screen Question Format Matrix
| Format | Time | Score |
|---|---|---|
| Resume deep dive | 12 min | 30% |
| Behavioral ("Why Uber") | 8 min | 30% |
| Company / team match | 5 min | 20% |
| Reverse Questions | 5 min | 20% |
Pass bar: at least 2 concrete project narratives, 1 "Why Uber" story, and 1-2 substantive questions.
Classic reverse question templates:
- "How does the team measure impact for new hires in the first 6 months?"
- "What is the biggest technical challenge the team faced this quarter?"
Stage 3: Tech Phone Question Format Matrix
| Format | Time | Score |
|---|---|---|
| Coding Medium | 35 min | 60% |
| Follow-up optimization | 10 min | 20% |
| System design dialogue | 10 min | 15% |
| Behavioral | 5 min | 5% |
Pass bar: AC on the spot plus a verbal optimization plan covering complexity for the follow-up.
Typical follow-up scenario
"What if N is 1e8?"
Answer skeleton:
- Current O(N) is already optimal single-node.
- Switch to distributed: MapReduce or Spark.
- Replace data structure with streaming: reservoir sampling, approximate counting.
Stage 4: Onsite Loop Round-by-Round
| Round | Format | Length | Decision weight |
|---|---|---|---|
| Round 1 | Coding Medium | 60 min | 20% |
| Round 2 | Coding Medium-Hard | 60 min | 20% |
| Round 3 | System Design | 60 min | 25% |
| Round 4 | Behavioral / Hiring Manager | 45 min | 20% |
| Round 5 | Bar Raiser / Cross-team | 45 min | 15% |
Pass bar: at least 4 of 5 rounds at strong hire or lean hire. Any single strong-no is nearly a veto.
System Design Focus: Surge Pricing Engine
A classic prompt. Answer skeleton (5W model: What / Where / Workload / Write / Worst case):
- What: real-time surge multipliers per city per zone
- Where: edge node -> Kafka -> Flink -> Redis -> API
- Workload: 500K qps writes (trips), 5M qps reads (rider app)
- Write path: Flink sliding window 1 minute, writes Redis with 5-second TTL
- Worst case: when Flink lags, fall back to last cycle's value to avoid zero-multiplier degradation
Conversion Stack: Compound Probability from Apply to Offer
| Stage | Stage pass | Cumulative pass |
|---|---|---|
| Apply -> OA | 50% | 50% |
| OA -> Recruiter | 40% | 20% |
| Recruiter -> Phone | 70% | 14% |
| Phone -> Onsite | 50% | 7% |
| Onsite -> Offer | 30% | 2.1% |
Conclusion: about 2 percent end-to-end. Referrals plus a stronger resume can pull this to 4-6 percent.
FAQ
Q1: Can the gaps between stages be sped up? You can ping the recruiter politely, but Tech Phone -> Onsite is the gap that most often stalls 2-3 weeks on HM hold.
Q2: What is Bar Raiser? Does Uber have one? Uber's cross-team interviewer is similar to Amazon's Bar Raiser, but carries less weight. The veto is softer at Uber.
Q3: Among the 5 onsite rounds, which one is most decisive? System Design and Hiring Manager. Coding is the floor; the deciding signal usually comes from SD + HM.
Q4: Do Reverse Questions actually move the recruiter's score? Yes. Asking zero questions reads as a lukewarm signal. One or two substantive questions max out the communication score.
Q5: I got an OA link but cannot do it within 7 days - will it be canceled? Usually one reschedule is allowed. Going silent is what gets the ghost flag, which affects future applications.
Preparing for the Uber pipeline?
If you cleared OA and need Tech Phone prep, or you want a real person doing VO proxy / VO assist live shadowing on Onsite day, plus reverse-question polishing and the System Design 5W template walkthrough, we can talk through a complete OA proxy / VO assist / VO proxy plan.
Contact
Need real interview questions and a custom prep plan? Add WeChat Coding0201 now to get questions.
Email: [email protected] Telegram: @OAVOProxy