AI Coding Interview Questions for Data Engineers

13 real AI coding scenarios from data engineer loops across 11 companies: Anthropic, OpenAI, Netflix, Stripe, Uber, Snowflake, Confluent, and 4 more. Real repos, failing checks, and an agent to drive.

The AI coding round is the newest fixture in data engineer loops: a real repository, a failing check, an AI agent at your side, and 30 to 60 minutes to reproduce the problem, drive the fix, and defend the diff. The rubric is not whether you use the agent; it is how you drive it: the spec you give it, the wrong edit you catch, the proof you demand before calling it done. These are 13 real scenarios from reported loops across 11 companies, Anthropic, OpenAI, Netflix, Stripe, Uber, Snowflake, Confluent, and 4 more, ordered easy to hard.

Every scenario opens as a live agentic workspace. The pipelines are real (Airflow, dbt, Kafka, Flink, Iceberg, feature stores, RAG evals), the checks fail the way the incident did, and the walk-through-your-diff conversation at the end mirrors the round. The other rounds live at SQL, Python, and pipeline design.

13
real scenarios on this page
11
companies represented
8
stacks: Airflow, dbt, Kafka, Flink, and more
298
employers tagged across the catalog

What the AI coding round checks

5 skills, none of which is 'knows the tool'. Each maps to scenarios on this page.

SkillWhat it looks like liveOn this page
Reproduce before touchingRun the failing check, read it, state the failure in one sentenceEvery scenario
Specify the changeA precise instruction beats 10 vague ones; scope what the agent may editQuestions 1, 4, 8
Review the diffCatch the edit that passes the check but breaks the contractQuestions 3, 8, 10
Prove it is fixedGreen check plus a reason the bug cannot recur, not just greenQuestions 5, 6, 13
Know when the AI is wrongPlausible-looking patches to nondeterminism and semantics need a human noQuestions 2, 9, 11, 12

Easy AI coding scenarios

One clear bug, one failing check. The bar is disciplined workflow: reproduce, spec, review, prove.

Shopify logo

1. The Late Arrival

Asked in a Data Engineer interview by ShopifyEasy~30 minOpen the workspace

Finance reports the daily orders dashboard is missing roughly 3% of revenue versus the source system of record. Reproduce by running tests/test_late_events.py. Fix the pipeline so the test passes; keep any currently-passing tests green. Be ready to walk an interviewer through what changed and how a re-run on the next hour does or does not double-count.

Open the live workspaceA real repo, a failing check, and an agent loop. Fix it the way the round expects: reproduce, patch, prove.

Why this matters. A schedule-time versus event-time bug: the DAG aggregates whatever arrived by the run, and 3% of orders land after the window closes. The fix is a lookback that reprocesses recent windows, and the interviewer wants the explanation as much as the patch: why late data makes any on-schedule aggregate provisional, and what bounds the lookback.

Stripe logo

2. One in Five

Asked in a Data Engineer interview by StripeEasy~25 minOpen the workspace

Analytics ships fct_payments through dbt nightly. The unique test on payment_id passes locally every time, fails in CI ~20% of runs. Same input fixtures, same model SQL. Run tests/test_uniqueness.py to reproduce, then fix the model so the test is deterministic. The fix is in the SQL, not the test.

Open the live workspaceA real repo, a failing check, and an agent loop. Fix it the way the round expects: reproduce, patch, prove.

Why this matters. Green locally, red in 20% of CI runs is the fingerprint of nondeterminism, here a dedup whose ordering ties on identical timestamps and picks a different survivor per run. The fix is a complete tiebreaker in the model's ordering, and the discipline it demonstrates, deterministic transforms, is what the round is checking.

Netflix logo

3. Ghosts of Snapshots Past

Asked in a Data Engineer interview by NetflixEasy~30 minOpen the workspace

Yesterday a bad backfill wrote 2M corrupt rows into events_iceberg. We rolled back to the prior snapshot. Now an analyst's AS OF (timestamp) query for a window two days before the rollback is also returning the corrupt rows. Reproduce by running tests/test_time_travel.py. The bug is in how our reader resolves a snapshot for a timestamp; fix it so AS OF queries reflect what was visible at that time.

Open the live workspaceA real repo, a failing check, and an agent loop. Fix it the way the round expects: reproduce, patch, prove.

Why this matters. Rollback does not erase history; it appends a new snapshot pointing at old data. The reader resolves AS OF by wall-clock timestamp, which still lands inside the corrupt lineage. Understanding snapshot ids versus timestamp resolution, and why time travel needs the former after a rollback, is the entire bug.

DoorDash logo

4. Counted Twice

Asked in a Data Engineer interview by DoorDashEasy~30 minOpen the workspace

Restaurant partners are seeing ~12% inflated revenue in our partner-ping job. The job builds daily_restaurant_revenue from the orders + dropoffs tables. Run tests/test_no_double_count.py to reproduce: rows where one order has multiple dropoffs (multi-stop deliveries) get counted once per dropoff. Fix the SQL in queries/daily_restaurant_revenue.sql so revenue is per order, not per (order, dropoff).

Open the live workspaceA real repo, a failing check, and an agent loop. Fix it the way the round expects: reproduce, patch, prove.

Why this matters. Join fanout wearing a pager: one order, multiple dropoffs, revenue counted once per dropoff. Aggregate to order grain before joining, or dedupe the join key. The same fanout that inflates SQL screens inflates production revenue, and the agentic twist is proving it with the failing check before touching the code.

Intermediate AI coding scenarios

Distributed-systems bugs where the plausible patch is wrong: rebalances, vacuous checks, feature skew, a hot-key OOM, and a MERGE that erases history.

Confluent logo

5. Four Million Echoes

Asked in a Data Engineer interview by ConfluentMedium~40 minOpen the workspace

Our orders enrichment consumer reprocesses ~4M messages every time we deploy. The team added enable_auto_commit=False and explicit commit() calls weeks ago, so this should have stopped. Run tests/test_offsets_persist.py to reproduce. The reprocess window correlates with rebalance events. Find why the explicit commits aren't sticking and fix it. Bonus credit: explain what 'cooperative-sticky' would have changed.

Open the live workspaceA real repo, a failing check, and an agent loop. Fix it the way the round expects: reproduce, patch, prove.

Why this matters. Manual commits alone do not survive rebalances: without a rebalance listener committing on partition revoke, the new assignment resumes from stale offsets and replays 4M messages. The correlation with deploys is the tell. Commit on revoke, and idempotent downstream writes make whatever slips through boring.

Airbnb logo

6. The Silent Pipeline

Asked in a Data Engineer interview by AirbnbMedium~35 minOpen the workspace

Last week the upstream booking_events feed broke for 3 days, so fct_bookings emerged empty each morning. Our data-quality suite reported all expectations passing. The on-call only caught it when finance asked why the dashboard was flat. Run tests/test_quality_suite.py to reproduce. Fix the suite (in dq/expectations.py) so an empty input table fails LOUDLY instead of vacuously passing every row-level check.

Open the live workspaceA real repo, a failing check, and an agent loop. Fix it the way the round expects: reproduce, patch, prove.

Why this matters. Vacuous truth: every row-level expectation passes when there are no rows. A quality suite needs existence assertions, volume against a rolling baseline and freshness against the clock, or it is a rubber stamp. 3 days of empty tables with a green suite is the exact failure this question replays.

Uber logo

7. The Skew

Asked in a Data Engineer interview by UberMedium~45 minOpen the workspace

ML team's fraud model trains at 0.84 AUC offline and tanks online. We isolated it to feature `user_orders_last_24h` , offline backfills compute it correctly, but the online value at scoring time is consistently higher. Run tests/test_feature_parity.py to see the divergence on a known prediction. Find the time-leak in the offline pipeline (features/orders_24h.py) and fix it. Defend your fix: what's the upper bound on staleness you've now committed the team to?

Open the live workspaceA real repo, a failing check, and an agent loop. Fix it the way the round expects: reproduce, patch, prove.

Why this matters. Train-serve skew in one feature: the offline backfill computes over closed windows while the online path counts in-flight events, so serving values run hot. The fix pins both paths to one definition, and the parity check on a known prediction is the pattern worth naming: features are contracts, not code in 2 places.

Snowflake logo

8. History Erased

Asked in a Data Engineer interview by SnowflakeMedium~40 minOpen the workspace

dim_customer is supposed to be SCD-2: every change to address/email creates a new row with effective_from / effective_to and is_current. After today's incremental run, the table has exactly one row per customer , history wiped. Run tests/test_scd2_history.py to reproduce. Fix sql/merge_dim_customer.sql so changes append a new version and close the old one, instead of overwriting.

Open the live workspaceA real repo, a failing check, and an agent loop. Fix it the way the round expects: reproduce, patch, prove.

Why this matters. A MERGE whose matched clause updates in place is Type 1 behavior wearing an SCD2 costume: one run and the history is gone. The correct shape matches on business key plus is_current, expires the old version, inserts the new one. Idempotence under rerun is the follow-up, and the answer is keying on content change, not run date.

Uber logo

9. One Bad Executor

Asked in a Data Engineer interview by UberMedium~35 minOpen the workspace

On-call paged at 02:14 last night: the nightly orders enrichment job ran 3h 40m instead of its usual 22 minutes and one executor OOMed on stage 4. Cluster spend tripled. Volumes only grew about 8% week-over-week. The job lives in jobs/. Reproduce by running tests/test_skew_observability.py. Fix it so the test passes. Be ready to defend the trade-offs of your fix when the interviewer asks what happens with a different data shape.

Open the live workspaceA real repo, a failing check, and an agent loop. Fix it the way the round expects: reproduce, patch, prove.

Why this matters. A 22-minute job at 3h40m with one OOMing executor and only 8% volume growth is skew, not scale: one hot key concentrated a stage on one task. The agentic discipline is reading the stage evidence before prompting, then directing the fix (broadcast or salt, with the tradeoff said aloud) rather than accepting a memory-bump patch that hides it for a week.

Advanced AI coding scenarios

Staff-level judgment: metrics too good to trust, watermarks frozen by silence, and vendors changing models under you.

Anthropic logo

10. Too Good To Be True

Asked in a Data Engineer interview by AnthropicHard~45 minOpen the workspace

Last week's RAG eval reported recall@5 = 0.97 (up from 0.62) with no documented index or model change. Finance wants to expand the agent rollout to all enterprise tenants based on this number. The data team is suspicious. Reproduce by running tests/test_eval_sanity.py. Fix what the test surfaces and whatever else you find while tracing the data flow. Be ready to defend why the new recall number is trustworthy when the interviewer asks 'what would you check next?'

Open the live workspaceA real repo, a failing check, and an agent loop. Fix it the way the round expects: reproduce, patch, prove.

Why this matters. A metric that jumps from 0.62 to 0.97 with no change log is not good news, it is leakage: eval queries bleeding into the index. The fix is provenance and dedup between corpus and eval set, plus a sanity gate that flags too-good deltas. Staff-level judgment here is distrusting improvement you cannot attribute.

Anthropic logo

11. The Materialization Storm

Asked in a Data Engineer interview by AnthropicHard~60 minOpen the workspace

We added a new dataset to our Dagster repo last week. It declared 50 dynamic-partition assets that depend on shared upstream assets. Dagster scheduler CPU pegged at 100% within an hour and we're now seeing 12,000 materialization runs per hour for what should be ~50. Run tests/test_no_runaway_runs.py to reproduce. Find the cycle/fanout pattern in dagster_repo/assets.py and fix it so the partition fan-out is bounded and the run count is sane. Be ready to defend the trade-off your fix makes.

Open the live workspaceA real repo, a failing check, and an agent loop. Fix it the way the round expects: reproduce, patch, prove.

Why this matters. 50 dynamic partitions multiplying through shared upstream dependencies into 12,000 runs an hour is a graph-shape bug: the declaration created a materialization edge per partition per upstream. The fix collapses the fan-in and scopes the automation policy, and the judgment being scored is recognizing an orchestration graph as code you review, not config you trust.

OpenAI logo

13. Drift

Asked in a Data Engineer interview by OpenAIHard~60 minOpen the workspace

Our RAG pipeline calls a hosted embedding endpoint. Last week the vendor silently upgraded the model under the same endpoint URL; cosine distances on a held-out probe set shifted by 18% mean, and product saw a precision drop on a fixed eval set. We have no alert for this. Run tests/test_drift_alarm.py to reproduce. Build a drift-detection check in monitoring/drift.py that runs daily and fires when the embedding distribution shifts beyond a defensible threshold. Write the threshold logic so an interviewer can defend the false-positive rate.

Open the live workspaceA real repo, a failing check, and an agent loop. Fix it the way the round expects: reproduce, patch, prove.

Why this matters. A vendor swapping the model under a stable endpoint is a schema change nobody announced. The defense is treating external models as versioned dependencies: a fixed probe set, distance-distribution monitoring, an alert on shift, and pinned versions where the API allows. The feature to build is the alarm, not the outrage.

Rapid-fire questions about the AI coding round

What candidates ask before their first one, answered from reported loops.

What does the AI coding round consist of?

A repository you have never seen, a failing check that reproduces a production incident, an AI agent (the company's harness or a tool like Cursor or Claude Code), and a timer. You drive the agent to a fix, keep the passing checks green, and then walk the interviewer through the diff and the reasoning.

Is using the AI heavily a good or bad signal?

Neither; direction is the signal. Strong candidates delegate mechanical work (finding call sites, writing the harness) and keep judgment work (what the bug is, what the fix must preserve). Candidates who paste the prompt and accept the first diff fail on the follow-up questions about their own patch.

What separates candidates in this round?

The reproduce-first habit, the precision of instructions to the agent, and diff review. Reported debriefs converge on one tell: candidates who can say what the agent got wrong and why outperform candidates whose session went smoothly, because smooth sessions leave no evidence of judgment.

Which stacks come up?

The data platform surface: Airflow DAGs, dbt models, Kafka consumers, Spark jobs, Flink streams, Iceberg tables, feature stores, and increasingly RAG and embedding pipelines. The scenarios on this page cover all of them, one incident each, because breadth of recognition beats depth in any one tool.

How do I prepare if my company does not use agents yet?

Run the workflow on real scenarios: reproduce a failing check, write the agent a scoped instruction, review its diff line by line, demand proof. The workspaces on this page exist for exactly this. Tool fluency transfers across agents; the workflow is the durable skill.

What should I say when the agent produces a wrong fix?

Out loud, exactly what you would say to a junior engineer: what the diff does, why it is wrong (passes the check, breaks the semantics), and what instruction you are giving next. Interviewers score that narration higher than a session where nothing went wrong.

Does the round replace the regular coding round?

In most reported loops it is additive or replaces a second coding round, not the first. SQL remains the highest-frequency screen and Python the tiebreaker; the AI round checks a third thing, whether your engineering judgment survives delegation. Prepare it third, but do prepare it.

What is the most common failure?

Skipping reproduction. Candidates who start prompting before running the failing check fix the wrong thing convincingly, and the round is unrecoverable from there. The first 3 minutes, run it, read it, restate it, are the highest-leverage minutes of the hour.

The mistakes that fail AI coding rounds

From reported debriefs, these are the recurring failure modes, none of them about tool knowledge.

Prompting before reproducing

The agent will confidently fix the wrong thing. Run the failing check first, restate the failure in one sentence, then delegate. The first 3 minutes decide the hour.

Accepting the first green diff

Checks are necessary, not sufficient. A patch that special-cases the fixture, weakens an assertion, or converts a semantic bug into a silent one still turns the light green. Read the diff like a reviewer, because the follow-up conversation assumes you did.

Unscoped instructions

'Fix the test' invites the agent to edit the test. Scope what may change (the model SQL, not the check; the consumer, not the broker config) and say the invariant that must hold. Precision here is the skill being scored.

No proof beyond green

Strong candidates finish with a reason the bug cannot recur: a determinism argument, an added assertion, a property of the fix. 'The check passes now' is the junior ending; interviewers wait for the second sentence.

How the AI coding round runs

The first minutes are reproduction: run the failing check, read the output, restate the incident in your own words. Interviewers report this as the sharpest separator in the round, because everything downstream inherits from a correct or incorrect statement of the problem.

The middle is delegation with judgment: scoped instructions, reviewed diffs, corrected course. The agent will occasionally produce a fix that passes the check and is wrong; several scenarios on this page are built so that exact thing happens. Catching it out loud is worth more than a clean run.

The end is the defense: walk the interviewer through the final diff, what the agent contributed, what you overrode, and how you know the fix holds. Candidates who kept a running narration through the session find this free; candidates who worked silently reconstruct it under pressure.

Prepare for the interview
01 / Open invite
02min.

Know the patterns before the interviewer asks them.

a AI coding query, the same shape a screen would give you.
The diff against expected. Where ties broke. What you missed.
sandbox
1# pair the test, then the impl
2test_parse_log_lines()
3 >> 0 / 4 passing
4 >> next: handle nulls
5
Execute your solution0.4s avg.
Capital OneInterview question
Solve a problem
02 / Why practice

Run the next one under interview conditions

  1. 01

    Active recall beats re-reading by 50%

    Cognitive-science meta-reviews (Dunlosky et al., 2013) rank practice testing as a top-tier study technique, while re-reading and highlighting rank near the bottom

  2. 02

    76% of hiring managers reject on the coding task, not the resume

    From HackerRank's 2024 Developer Skills Report. Candidates who look strong on paper still fail the live screen if they haven't done timed, executable practice

  3. 03

    The AI round is graded on how you drive the tool, not whether you use it

    Specifying the change, reviewing the diff, catching the wrong edit, iterating to green. Doing it on a timer is what turns 'I use Copilot' into a defensible workflow

Keep drilling