QA Interview
Uber SDET Interview Questions and Preparation
Master Uber SDET interview questions with coding, test architecture, distributed systems, automation design, model answers, and a practical 2026 plan.
25 min read | 3,443 words
TL;DR
Uber SDET preparation should combine software-engineering coding, test architecture, distributed-system quality, API and event testing, CI reliability, and behavioral evidence. Uber publishes a general hiring path for technical roles, but the recruiter and job description determine the actual interview stages and expected depth.
Key Takeaways
- Prepare as a software engineer who improves quality systems, not as a UI test-script specialist.
- Confirm the role-specific loop with recruiting because Uber's published hiring flow is intentionally general.
- Practice coding with correct edge cases, complexity analysis, tests, and clear narration in a familiar language.
- Design quality around service contracts, event ordering, idempotency, observability, resilience, and safe deployment.
- Explain automation as a feedback architecture with ownership, diagnostics, test data, and measurable signal value.
- Use mobility and delivery examples to demonstrate reasoning without claiming knowledge of private Uber systems.
- Prepare project and behavioral stories that show technical influence, incident learning, and data-based tradeoffs.
Uber SDET interview questions test whether you can build software that makes complex systems easier to verify, release, and operate. The strongest answers connect clean code with failure models, useful test layers, controlled data, trustworthy CI, and production evidence.
Uber's current hiring overview says technical candidates may move through talent and hiring-manager conversations, a collaborative technical interview, a role-dependent assessment, and team interviews. It also makes clear that roles differ. Confirm your loop, language, coding environment, and design expectations with the recruiter rather than preparing around an unofficial fixed sequence.
TL;DR
| Interview dimension | Weak signal | Strong signal |
|---|---|---|
| Coding | A solution that works for one example | Clear contract, tested boundaries, readable code, complexity |
| Automation | Many end-to-end scripts | Layered feedback with diagnostics and ownership |
| System design | A box diagram | Invariants, failure modes, observability, rollout, recovery |
| Distributed systems | Naming Kafka or microservices | Reasoning about duplicates, order, timeouts, and consistency |
| Leadership | General teamwork claims | Specific technical decisions, influence, result, and lesson |
Do not guess Uber's private stack or reproduce a rumored question bank. Use the posted role and public product surface to practice durable engineering judgment.
1. Uber SDET Interview Questions: The Engineering Bar
An SDET is valuable when the role changes the quality economics of a team. That can mean building service test infrastructure, improving developer feedback, creating fault-injection tools, defining contracts, hardening CI, generating safe test data, or making failures diagnosable. Merely translating manual cases into browser scripts is too narrow for most engineering-heavy interpretations of the title.
Expect preparation across programming, data structures, code design, testing fundamentals, APIs, databases, distributed systems, automation architecture, debugging, CI/CD, and behavior. The job description may emphasize Java, Go, Python, TypeScript, mobile, backend, or platform work. Build your plan from that evidence. If the opening uses a different title such as Software Engineer, Quality, compare actual responsibilities rather than relying on labels.
During technical discussion, state the contract before implementation. During design, state scale assumptions and quality attributes. During test strategy, explain which risk each layer proves. During debugging, distinguish observation from hypothesis. These habits reveal engineering maturity even when an interviewer changes the problem.
SDET answers should also address adoption. A brilliant framework that only its author can operate is not a successful internal product. Explain documentation, APIs, migration, support, telemetry, versioning, and how teams decide whether the tool is helping.
2. Map the Role to Uber's Published Hiring Flow
Uber describes an initial talent conversation centered on experience and role alignment, followed by a hiring-manager discussion about skills, decisions, and approach. Technical roles can include a shared problem or real scenario solved collaboratively. Some roles add an exercise or work simulation, and team interviews examine core skills, collaboration, and decision-making.
For SDET candidates, translate this general flow into four preparation packets. The recruiter packet contains a concise career narrative, motivation, and role match. The coding packet contains language fluency, algorithms, code design, and tests. The quality-systems packet contains automation architecture, distributed failure handling, and one deep technical project. The collaboration packet contains evidence of influence, disagreement, failure, and operational ownership.
Ask targeted process questions early: Is the coding round algorithmic, practical, or both? Is test or system design evaluated? Which language and collaborative editor are used? Does the role include mobile or production engineering? Will an exercise require a presentation? The answers can move hours of study toward the actual signal.
Uber's guidance emphasizes clear communication and collaborative problem solving. Do not go silent while coding. Narrate assumptions and decisions without filling every second. Treat hints as new information, test your own solution, and invite correction when a requirement is ambiguous.
3. Build a Coding Practice Method That Includes Tests
Use a consistent sequence: restate the requirement, define valid and invalid inputs, walk through examples, propose a baseline, implement, test, then analyze time and space. Optimize only if a constraint justifies it. A clever solution that is difficult to verify can underperform a simple correct one.
Practice arrays, strings, hash maps, sets, queues, stacks, trees, graphs, intervals, sorting, and common traversal patterns. SDET interviews can also favor practical transformations: deduplicate events, compare records, group failures, parse logs, validate state transitions, or implement bounded retries. Know your language's collections and error behavior without relying on autocomplete.
The following runnable Node.js example returns the first event ID that repeats within a configured recent window. Save it as duplicate-window.test.mjs and run node duplicate-window.test.mjs.
import test from "node:test";
import assert from "node:assert/strict";
export function firstRecentDuplicate(ids, windowSize) {
if (!Array.isArray(ids)) throw new TypeError("ids must be an array");
if (!Number.isInteger(windowSize) || windowSize < 1) {
throw new RangeError("windowSize must be a positive integer");
}
const recent = new Map();
for (let index = 0; index < ids.length; index += 1) {
const id = ids[index];
if (typeof id !== "string" || id.length === 0) {
throw new TypeError("every id must be a non-empty string");
}
const previous = recent.get(id);
if (previous !== undefined && index - previous <= windowSize) return id;
recent.set(id, index);
}
return null;
}
test("finds the first duplicate inside the window", () => {
assert.equal(firstRecentDuplicate(["a", "b", "a", "b"], 2), "a");
});
test("ignores duplicates outside the window", () => {
assert.equal(firstRecentDuplicate(["a", "b", "c", "a"], 2), null);
});
test("rejects invalid configuration", () => {
assert.throws(() => firstRecentDuplicate([], 0), RangeError);
});
This implementation stores the latest index for each distinct ID, so time is linear and space is linear in distinct IDs. If the input is a long stream, discuss evicting entries older than the window with a queue plus counts or indices. That follow-up tests whether you can connect algorithm correctness to operational constraints.
4. Design a Test Architecture for a Trip Platform
Suppose the prompt is "Design testing for trip dispatch." Start with boundaries: request service, eligibility, marketplace matching, offer delivery, acceptance, trip state, pricing, and notifications. Name assumptions and avoid pretending these mirror Uber's internal services. The goal is a reasoned reference design.
Define invariants before tools. One request must not produce conflicting accepted matches. An unauthorized actor cannot change trip state. A repeated event cannot apply a repeated charge. A committed state transition remains auditable. The system should converge after a supported transient failure.
Map evidence to layers:
| Layer | Primary purpose | Example failure caught |
|---|---|---|
| Unit and property | Rules and invariants | Invalid transition or rounding |
| Component | Service behavior with controlled dependencies | Retry applies side effect twice |
| Contract | Consumer-provider compatibility | Required field changes |
| Integration | Real boundary configuration | Authentication or serialization mismatch |
| End to end | Critical journey across deployed system | Offer accepted but rider never updates |
| Resilience and load | Behavior under stress and faults | Backlog causes stale matching |
| Production verification | Real rollout and health evidence | Region-specific configuration regression |
Then discuss test data, environment fidelity, deterministic time, fault injection, correlation IDs, and parallel isolation. Close with CI stages and release gates. This creates an architecture, not just a pyramid drawing.
Review test automation framework interview questions for more practice explaining boundaries and tradeoffs.
5. Reason About Events, Idempotency, and Consistency
Real-time systems force SDETs to test uncertainty. A producer can retry after a timeout, a broker can redeliver, consumers can process at different speeds, and events can arrive after a state has advanced. Start by asking which guarantees are intended rather than declaring every queue "exactly once."
For at-least-once delivery, design consumers so repeating the same business event is safe. Test duplicate IDs, same payload with a new transport envelope, conflicting payload for the same key, crash before acknowledgment, crash after state commit, replay, and poison data. Observe both final business state and operational behavior.
Ordering is usually scoped. If order is guaranteed only per trip key, test two trips in parallel and events within one trip. An old location update must not replace a newer one if sequence or timestamp semantics forbid it. A completed trip should reject or safely ignore a delayed start event. Record why the outcome is correct.
Eventual consistency needs an explicit convergence promise. Automated tests should wait on a meaningful observable condition with a deadline, not sleep for a guessed number of seconds. Failure output should show the states observed, event identifiers, and timing. Resilience tests can pause a consumer, introduce latency, or return controlled errors, then verify backlog recovery and reconciliation.
Interviewers may change one constraint, such as multi-region operation or an unavailable payment provider. Revisit assumptions, preserve core invariants, and describe the new tradeoff rather than defending the first design.
6. Test APIs and Contracts Beyond HTTP Status
For a service API, validate authentication, authorization, schema, field semantics, boundaries, state preconditions, idempotency, pagination where applicable, rate limits, and error contracts. A 200 response can still contain the wrong rider, currency, state, or timestamp. A 500 can hide a committed side effect that makes a blind retry dangerous.
Contract tests prove compatibility between consumers and providers, while integration tests prove configured components work together. Neither replaces the other. Schema compatibility does not prove identity propagation, network policy, database migration, or business coordination. End-to-end tests prove a small number of critical assembled outcomes.
Build reusable clients that expose domain operations, but keep raw response access for diagnostics. Separate transport assertions from business assertions. Centralize authentication without hiding which identity each test uses. Generate unique resources, capture IDs, and make cleanup idempotent. Never log secrets or protected customer data.
Negative testing should be intentional. Cover missing identity, wrong role, cross-account access, invalid transitions, malformed data, size boundaries, duplicate requests, dependency timeout, and unsupported content type. Verify stable machine-readable errors where the contract promises them.
Use REST API automation interview questions to practice explaining contracts, and HTTP 200 versus 201 to review creation semantics without treating status codes as the whole oracle.
7. Engineer Reliable CI and Test Data
A credible CI design orders feedback by speed and diagnostic value. Static checks and focused unit tests run first. Component and contract suites follow. Selected integration and end-to-end tests run on meaningful changes or deployment stages. Resilience, performance, and broad compatibility checks run where their environment and cost make results trustworthy.
Parallelism creates shared-state risks. Allocate independent accounts and namespaces, seed data through supported APIs, and record ownership. If a test fails after creating resources, cleanup should be safe to repeat. Expiration and reconciliation protect environments when process termination skips teardown. Avoid a global account that every worker modifies.
Treat flaky tests as reliability defects. Classify whether variation comes from product, test, data, dependency, runner, or environment. Preserve the first failure and matched passing evidence. A retry can reveal nondeterminism, but hiding the first attempt turns CI into a false-positive filter.
Measure suite health with more than pass percentage. Useful signals include time to actionable feedback, failure reproducibility, unowned failures, unique risk coverage, diagnostic completeness, and maintenance effort. Segment results by test identity and environment so one noisy project does not contaminate the entire view.
When proposing infrastructure, include cost controls and developer experience. Selective execution, stable local workflows, artifact retention policy, and clear failure ownership help adoption. A quality platform succeeds when engineers trust it enough to act on its output.
8. Debug Distributed Failures From the First Wrong State
Consider an end-to-end test where the driver accepts, but the rider remains in searching state. The last UI timeout is only a symptom. Collect the trip ID, request ID, build, region, client versions, feature flags, timestamps, event offsets where available, and traces across the relevant boundary.
Compare a matched passing run. Align both paths by business events: request committed, offer published, acceptance received, match committed, rider update published, client subscription receives update. Find the first difference. Possible causes include acceptance rejection, delayed propagation, stale cache, lost subscription, authorization, version mismatch, or a test that observed the wrong account.
Form falsifiable hypotheses. "Kafka issue" is not a useful hypothesis. "The rider-update consumer was paused, so accepted events accumulated and no update was published within the service objective" predicts a backlog and missing publish span. Test that evidence before changing code.
After mitigation, verify the causal fix under the triggering condition. Add a durable mechanism at the right boundary: state guard, contract check, idempotency store, alert, canary, capacity rule, or runbook. Do not add a longer UI timeout when the root problem is a delayed or absent business event.
Practice this workflow with flaky test root cause analysis, especially the distinction between correlation and causal proof.
9. Discuss Performance, Resilience, and Observability
Performance answers need a workload model. Define operations, actor mix, arrival pattern, geographic or product segmentation, payload shape, state setup, and success criteria. Average latency alone hides tail behavior and errors. Connect technical signals to customer outcomes, such as time from request to an actionable match.
Avoid fabricated scale numbers. State illustrative loads explicitly or ask for expected traffic. Validate steady state, spikes, soak behavior, backpressure, queue growth, resource saturation, autoscaling, dependency limits, and recovery. Ensure the load generator is not the bottleneck and test data remains valid.
Resilience tests should have a hypothesis and safe boundary. Inject latency, errors, unavailable instances, duplicate messages, or network interruption in a controlled environment. Verify timeouts, retry budgets, circuit behavior, fallback, data integrity, alerts, and recovery. The purpose is not chaos theater, it is proving a specific failure policy.
Observability is part of testability. Ask whether traces preserve identity across asynchronous boundaries, metrics expose business state, logs are structured and privacy-safe, and dashboards distinguish regions or versions. An alert should connect to an owner and action. High-volume logs without correlation can increase cost without reducing diagnosis time.
For a design interview, include rollout. Describe canary scope, health comparison, feature flags, rollback conditions, data migration compatibility, and how partially completed work recovers.
10. Present an Automation Project as an Internal Product
Choose one project with enough depth for follow-up. Explain the problem using a baseline: slow feedback, costly manual setup, unreliable environment, weak diagnostics, or a missing coverage boundary. State users and constraints. A framework for 40 service teams has different requirements from a harness owned by one product squad.
Walk through architecture from a test author's perspective. Show public APIs, data provisioning, dependency control, execution, assertions, reporting, artifacts, CI integration, and ownership. Explain one key design decision and an alternative you rejected. Mention security, versioning, backward compatibility, and failure isolation.
Then prove impact. Adoption count alone can mislead, so combine it with feedback time, actionable failures, defects exposed, reduced manual handoffs, or other approved evidence. Explain a limitation and what you would redesign now. Interviewers trust candidates who understand their system's weak points.
If you influenced without authority, name how: collected failure data, created a small proof, wrote migration tooling, held design reviews, paired with early adopters, or simplified documentation. Give credit while keeping your contribution precise.
End with operations. Who supports failures? How are breaking changes released? What telemetry reveals misuse? When should a team not use the framework? Those questions distinguish a maintained engineering product from a demo repository.
11. Uber SDET Interview Questions: A Three-Week Plan
Week 1 focuses on code. Practice one or two problems daily across collections, windows, intervals, trees, graphs, and practical data transformations. Always write tests and state complexity. Review language-specific concurrency, error handling, object design, and build tooling relevant to the role.
Week 2 focuses on systems. Design quality for dispatch, payments, notifications, location updates, and delivery order state. For each, define invariants, contracts, failures, test layers, observability, rollout, and recovery. Build one small API or event-testing example you can execute and explain.
Week 3 focuses on evidence. Prepare a framework deep dive, a distributed debugging story, and six behavioral examples. Run two mocks, one coding and one architecture. Ask the interviewer to change scale, consistency, security, or availability constraints mid-answer.
Before the interview, create a one-page index rather than a script. Include coding patterns, system questions, project diagrams, behavior prompts, and candidate questions. Confirm logistics and allowed tools. Choose the language in which you can write and test clearly, unless the recruiter specifies otherwise.
Ask the team how SDETs influence production design, which quality risks are hardest to observe, how test infrastructure is owned, what on-call or operational work is expected, and how success at the level is measured.
Interview Questions and Answers
These Uber SDET interview questions are realistic engineering practice, not a claim about confidential questions. Answer with stated assumptions and your own evidence.
Q: What distinguishes an SDET from an automation tester?
An SDET applies software engineering to quality problems: testability, frameworks, service tools, data, CI, diagnostics, resilience, and developer workflows. UI automation can be part of the work, but it is not the boundary. The outcome is faster and more trustworthy engineering feedback.
Q: How would you test dispatch matching?
I would define actors, eligibility, location freshness, matching constraints, and commit semantics. Invariants include one coherent accepted match and authorized state changes. I would cover rules, controlled component tests, event and integration paths, concurrency, performance, and production health signals.
Q: How do you test an at-least-once event consumer?
I would deliver duplicates before and after a simulated crash, replay old events, and send conflicts for the same business key. The consumer should preserve valid state, apply side effects once, and expose poison data. Final state and operational signals both matter.
Q: Contract tests pass, but integration fails. Why?
Contracts prove message compatibility, not the complete configured path. Authentication, certificates, routing, serialization settings, migrations, feature flags, timeouts, and dependency behavior can still fail. I retain focused integration tests for those boundaries.
Q: How do you prevent duplicate charges after a timeout?
The operation needs a stable idempotency identity and durable handling of repeated requests. A client with an unknown outcome should query or reconcile before creating a new business action. Tests cover lost responses, concurrent retries, crash boundaries, and conflicting reuse of a key.
Q: How would you design parallel test data?
Each worker receives unique identities or a namespace, creates data through supported contracts, and records ownership. Cleanup is safe to repeat, with expiration and reconciliation as backups. Shared mutable accounts are avoided unless contention is the behavior under test.
Q: What makes a CI test actionable?
It protects a known risk, fails deterministically enough to trust, and reports the first meaningful divergence with build, environment, data, and correlation evidence. It has an owner and a documented response. A red result without diagnosis context wastes feedback time.
Q: How do you test eventual consistency without fixed sleeps?
I wait for a defined observable convergence condition within a deadline. The test records intermediate states and stops early on success. Failure output explains what was observed, while separate tests exercise delayed, duplicate, reordered, and missing events.
Q: Design a performance test for trip requests.
I would define the request mix, state setup, arrival pattern, segmentation, and customer-facing objectives. I would measure latency distributions, errors, saturation, backlog, and recovery under steady, spike, and soak profiles. Loads are based on provided requirements or explicitly illustrative assumptions.
Q: A test passes on retry. Is it safe to merge?
Not automatically. The retry proves variability, not harmlessness. I preserve both attempts, classify the likely boundary, assess the protected risk, and either fix it or use a time-bound quarantine with ownership and visibility.
Q: How do you evaluate a test framework's success?
I combine adoption with signal quality, feedback speed, diagnostic completeness, maintenance, and defects or risks exposed. I also measure migration and support cost. The framework should make a valuable path easier, not merely increase test count.
Q: Tell me about a technical disagreement.
I explain the shared goal, disputed assumption, evidence, alternatives, and how I raised the concern. I name the decision mechanism and how I supported the outcome. I also state what later evidence taught me, including if my view changed.
Q: Tell me about a quality tool that failed to gain adoption.
I would own the product or communication assumptions I got wrong, show how I gathered user evidence, and explain whether I simplified, integrated, or retired the tool. Success is solving the workflow problem, not defending sunk implementation effort. The lesson should influence later designs.
Q: How would you test a safe service rollout?
I would validate backward compatibility, migration order, configuration, canary health, segmented business metrics, rollback, and in-flight state. Automated gates should use agreed thresholds and retain evidence. Recovery is tested before exposure expands.
Common Mistakes
- Preparing only Selenium or Playwright commands for a software-engineering-heavy role.
- Memorizing algorithms without writing boundary tests or explaining complexity.
- Drawing a test pyramid without mapping risks, ownership, data, and diagnostics.
- Claiming exactly-once behavior without defining the boundary and failure model.
- Using sleeps to hide asynchronous uncertainty.
- Treating retries as a CI reliability strategy.
- Naming tools instead of explaining contracts, invariants, and tradeoffs.
- Inventing Uber architecture, traffic volumes, or private interview questions.
- Describing an internal framework without adoption, operation, or limitations.
- Giving leadership answers that omit personal decisions and customer impact.
Conclusion
Uber SDET interview questions require more than test-case knowledge. Prepare to code cleanly, design quality into distributed workflows, build dependable feedback systems, diagnose asynchronous failures, and influence how teams release software.
Use Uber's public hiring flow for orientation and recruiter guidance for your actual loop. Start with one runnable coding example and one trip-platform quality design, then pressure-test both with failures, scale changes, and skeptical follow-up questions.
Interview Questions and Answers
What distinguishes an SDET from an automation tester?
An SDET applies software engineering to quality systems, including testability, frameworks, data, CI, diagnostics, resilience, and developer workflows. UI automation may contribute, but it is not the boundary. The outcome is faster, more trustworthy feedback.
How would you test dispatch matching?
I define actors, eligibility, location freshness, matching constraints, and commit semantics. I protect invariants such as one coherent accepted match and authorized changes. Coverage spans rules, components, events, integrations, concurrency, performance, and health signals.
How do you test an at-least-once consumer?
I deliver duplicates around crash boundaries, replay old events, and create conflicts for one business key. The consumer must preserve valid state, apply side effects once, and surface poison data. I verify both business outcome and operations.
Why can integration fail when contract tests pass?
Contracts prove compatibility, not the full configured route. Identity, certificates, routing, serialization configuration, migrations, flags, timeout, and dependency behavior can still fail. Focused integration tests protect those boundaries.
How do you prevent duplicate charges after timeouts?
Use stable idempotency identity and durable duplicate handling. A client facing an unknown outcome should query or reconcile before starting a new action. Tests cover lost responses, concurrent retries, crashes, and conflicting key reuse.
How would you design parallel test data?
Workers receive unique identities or namespaces and create data through supported contracts. Cleanup is idempotent, with expiry and reconciliation as backup. Shared mutable data is reserved for explicit contention tests.
What makes a CI test actionable?
It protects a known risk, produces trustworthy feedback, and shows the first meaningful divergence with build, environment, data, and correlation context. It has an owner and response path. A red result without evidence delays decisions.
How do you test eventual consistency?
I wait for a defined observable convergence condition within a deadline and record intermediate states. Dedicated cases exercise delay, duplicates, reordering, loss, and reconciliation. Fixed sleeps do not prove correctness.
How would you performance-test trip requests?
I define operation mix, actor state, arrival pattern, segmentation, and customer objectives. I measure latency distributions, errors, saturation, backlog, and recovery across steady, spike, and soak profiles. Assumptions are explicit rather than fabricated.
A test passes on retry. Is it safe to merge?
Not automatically. A retry proves variability, so I retain both attempts, identify the likely boundary, and assess the protected risk. A time-bound quarantine requires ownership and visibility if an immediate fix is impossible.
How do you measure framework success?
I combine adoption with signal reliability, feedback speed, diagnosis, maintenance, and risks exposed. Migration and support cost matter too. Increasing test count is not sufficient evidence of value.
Tell me about a technical disagreement.
I explain the shared objective, disputed assumption, evidence, alternatives, and decision process. I support the final outcome and state what later facts taught me. The focus remains on sound engineering and customer value.
Tell me about a quality tool that failed to gain adoption.
I own the workflow or communication assumptions I missed, gather user evidence, and decide whether to simplify, integrate, or retire the tool. Solving the user problem matters more than defending implementation. I apply the lesson to later internal products.
How would you test a safe service rollout?
I validate compatibility, migration order, configuration, canary health, segmented business signals, rollback, and in-flight state. Gates use agreed thresholds and preserve evidence. Recovery is verified before exposure expands.
Frequently Asked Questions
What is the Uber SDET interview process?
Uber publishes a general process with talent and hiring-manager conversations, a technical interview for technical roles, possible role-dependent assessment, team interviews, and a decision. The exact SDET sequence and depth vary, so confirm them with recruiting.
How much coding should I prepare for an Uber SDET interview?
Prepare core data structures, practical transformations, readable object design, tests, and complexity in a familiar language. The recruiter should confirm whether the assessment is algorithmic, practical, or both.
Are distributed systems important for Uber SDET preparation?
They are highly relevant to engineering roles involving real-time services. Practice duplicates, ordering scope, idempotency, timeouts, retries, eventual consistency, observability, backpressure, and recovery without guessing private architecture.
Should an Uber SDET prepare system design?
Prepare quality-oriented system design unless recruiting explicitly says it is out of scope. You should be able to define invariants, test layers, data, faults, diagnostics, rollout, and recovery for a service workflow.
Which automation framework should I study?
Follow the job description's language and stack, but learn principles that transfer across tools. Interviewers need to hear how you choose layers, isolate data, diagnose failures, integrate CI, and measure signal value.
How should I discuss flaky tests in an SDET interview?
Treat flakiness as observable variation requiring classification and causal evidence. Preserve first failures, compare matched passes, locate the first divergence, and avoid presenting retries or longer timeouts as fixes.
What projects should I present for an Uber SDET role?
Choose a technically deep project involving test infrastructure, service validation, CI reliability, data, diagnostics, or resilience. Cover users, architecture, alternatives, adoption, measurable value, operations, limitations, and lessons.