NewRun, Test, Submit: build step by step in your own workspace→

The gym for data engineers.
Train on real pipelines. Land the offer.

Free to start·Nothing to install·SQL & PySpark·Beginner to senior
shuffleet/Problems/Incremental order facts
Sample workspaceAK
Solve with Trino SQL query.sql ▾
Workspace· sample batch 1 of 2
Reset
query.sqlgradedscratch 1+
▸ Run ⇧⌘↵ TestSubmit ⌘↵
1-- runs after every batch, may run twice
2INSERT INTO order_facts
3SELECT order_id, amount, updated_at
4FROM orders;
Test resultsOutput
Running your script on the sample data…

Day 1 lands. Your INSERT passes the test.

The gap

Interviews stopped asking for one SELECT

Most practice sites give you a clean table and one query. Data engineering interviews, and the job, look like this:

SQL puzzleThe interview, and the job
One clean table, loaded onceBatches that arrive every day, sometimes late, sometimes twice
Write one query, get one answerA pipeline that must give the same result when it runs again
Right or wrongWhich requirement failed, on which rows, and why
Where the problems come from

Asked in real interviews. Broken in real production.

Every problem says where it comes from: a question candidates reported from data engineering loops, or an incident engineers had to clean up.

InterviewMedium
Rolling 7-Day Active Users for Every Day

Reported Meta data engineering SQL question: a rolling 7-day distinct active user count for each day.

You'll practiceRolling distinct countsDAU/WAU
InterviewMedium
Longest Consecutive-Day Streak per User

Amazon candidate report: "pull the values that show up consecutively 3 times".

You'll practiceGaps and islands
InterviewHard
Customer History as an SCD Type 2

Slowly changing dimensions come up in nearly every data modeling round, deletes and comebacks included.

You'll practiceSCD Type 2Snapshot diffing
InterviewMedium
Host Response Rate Within 24 Hours

Marketplace SQL rounds (Airbnb-style): host responsiveness, a metric that feeds search ranking.

You'll practiceFirst event per group
InterviewHard
Ordered Purchase Funnel within 24 Hours

A favourite product analytics interview question, and easy to get subtly wrong.

You'll practiceOrdered funnels
InterviewMedium
Rolling 7-Day Active Users for Every Day

Reported Meta data engineering SQL question: a rolling 7-day distinct active user count for each day.

You'll practiceRolling distinct countsDAU/WAU
InterviewMedium
Longest Consecutive-Day Streak per User

Amazon candidate report: "pull the values that show up consecutively 3 times".

You'll practiceGaps and islands
InterviewHard
Customer History as an SCD Type 2

Slowly changing dimensions come up in nearly every data modeling round, deletes and comebacks included.

You'll practiceSCD Type 2Snapshot diffing
InterviewMedium
Host Response Rate Within 24 Hours

Marketplace SQL rounds (Airbnb-style): host responsiveness, a metric that feeds search ranking.

You'll practiceFirst event per group
InterviewHard
Ordered Purchase Funnel within 24 Hours

A favourite product analytics interview question, and easy to get subtly wrong.

You'll practiceOrdered funnels
Production incidentEasy
The Job That Ran Twice

Orchestrator retries re-ran an INSERT INTO … SELECT: the day's revenue doubled.

You'll practiceIdempotencyRe-deliveries
Production incidentEasy
Land a Messy Invoice CSV Without Losing Rows

Validation silently dropped about 10% of records. Found weeks later, when revenue looked low.

You'll practiceSafe castingReject tables
Production incidentMedium
The Weekend Saturday Was Reloaded 47 Times

A "fall back to the last successful date" rule: every retry reprocessed Saturday, and every run reported success.

You'll practiceFailing loudlyRepairing tables
Production incidentEasy
Revenue Doubled Overnight

Orders joined to items and payments in one query: rows multiply, and DISTINCT only hides it.

You'll practiceJoin fan-out
Production incidentMedium
Store Revenue by Local Day Across DST

Reports grouped on UTC break twice a year: 23- and 25-hour days. A published postmortem, redone.

You'll practiceTime zonesDST
Production incidentEasy
The Job That Ran Twice

Orchestrator retries re-ran an INSERT INTO … SELECT: the day's revenue doubled.

You'll practiceIdempotencyRe-deliveries
Production incidentEasy
Land a Messy Invoice CSV Without Losing Rows

Validation silently dropped about 10% of records. Found weeks later, when revenue looked low.

You'll practiceSafe castingReject tables
Production incidentMedium
The Weekend Saturday Was Reloaded 47 Times

A "fall back to the last successful date" rule: every retry reprocessed Saturday, and every run reported success.

You'll practiceFailing loudlyRepairing tables
Production incidentEasy
Revenue Doubled Overnight

Orders joined to items and payments in one query: rows multiply, and DISTINCT only hides it.

You'll practiceJoin fan-out
Production incidentMedium
Store Revenue by Local Day Across DST

Reports grouped on UTC break twice a year: 23- and 25-hour days. A published postmortem, redone.

You'll practiceTime zonesDST

ProBig tech loop: rounds reported by Meta, Amazon, Airbnb and Uber candidates

How it works

Catch the bug before the interviewer does

Three buttons, the way you'd work on a real pipeline: try it, replay it day after day, then get graded on hidden cases.

Query result4 rows · 0.09s
order_idamountupdated_at
100142.502026-03-02 09:14
100218.002026-03-02 10:41
100373.202026-03-02 11:05
10049.902026-03-02 11:58

the script's last query

AI coach

A senior engineer next to you, on your own code

Cube reads your script, your last run and the failing check. It hints one step at a time, explains why it failed, and reviews your solution the way an interviewer would.

Hints that don't give it away

Step by step, from a nudge to the approach. The author's hints first, then the AI.

Why did it fail?

Points at the lines and the rows that broke the check, in your code.

Interviewer-style review

What would pass, what would cost you the round, and the follow-up they'd ask.

It learns your mistakes

Remembers what trips you up and tunes the next hints to your level.

solution.sql gradedscratch_1.sql
1MERGE INTO order_facts t
2USING (
3 SELECT *, row_number() OVER (
4 PARTITION BY order_id
5 ORDER BY updated_at DESC
6 ) AS rn FROM orders
7) s ON t.order_id = s.order_id AND s.rn = 1
8WHEN MATCHED THEN UPDATE SET amount = s.amount
9WHEN NOT MATCHED THEN INSERT (order_id, amount)
10 VALUES (s.order_id, s.amount);
CubeIncremental pipelines · Intermediate
Give me a hintStep 1 of 3 · written by the author
Explain the problem
Why did it fail?
Explain the selected code
Review my solution
Ask a question
Why it works

Practice that transfers to the job

The patterns interviewers ask about, on the engines teams use, graded on what matters.

day_1.csvday_2.csv append
ordersyour script ↻ ×2order_facts ✓

The scenarios interviews are made of

Deduplication, incremental loads, MERGE upserts, slowly changing dimensions, sessionization, late data. Each one runs like production: batches land, your script runs, it runs again.

Overlapping days50%
day 1: latest version of each order
day 2: latest version of each order×289 duplicated keys
one row per order89 duplicated values of order_id
raw orders are untouched
no refunds

Know exactly what's wrong

See which requirement failed, on which rows, and your score. Hidden cases never leak the expected answer.

query.sql batches × ×selection+
SELECT customer_id, sum(amount) FROM day_2 GROUP BY 1
read-only · sample0.09s
c40
a25
b-5

A workspace, not a quiz box

Create staging tables, query them, fix your MERGE, run again. Load the next day's batch by hand. Reset whenever you want.

Interview sprint
8 problems · 2 weeks
Week 1
Deduplicate an event stream
Top products per category
Week 2
Sessionize a clickstream
Upsert a customer dimension

A plan for your interview date

Answer six questions and get a sequence of problems with a weekly pace: an interview sprint, SQL foundations, or production pipelines.

44:37
Time limit
No limit (stopwatch)
15 minutes
30 minutes
45 minutes✓
60 minutes
Interview mode: the timer is running with a limit, so I'll stay quiet until it stops.

Interview mode

Set a 45-minute limit and solve against the clock. The coach goes quiet until time is up, like the real thing.

Level per skill
SQL foundations
Advanced
▲ +42 in 30 days
Incremental pipelines
Intermediate
▲ +88 in 30 days
Windows & time series
Intermediate
▲ +35 in 30 days
Data modeling
Junior
▲ +64 in 30 days

See yourself level up

A rating per skill after every graded submission, from Beginner to Expert, and what to practise next.

Race a friend. Get noticed by teams that hire.

Challenge a friend on the same problems, run a contest for your class, or join a company's hiring challenge. Finish near the top, share your profile, and an engineer there can refer you.

A company's hiring challenge: its problems, the leaderboard and the verified hostA duel between friends: the same three problems and the race standings
Real engines over a real lakehouse

Trino SQL and PySpark on Apache Iceberg. Every run sandboxed; hidden data stays hidden.

Trino PySparkIceberg
Pricing

Free to practice. Pro when you're serious.

Most problems and the core plans are free. Pro opens the advanced plans and the hardest problems, and makes the loop faster.

Free

Everything you need to practice.

$0forever
Start for free

  • Real interview problems, in SQL and PySpark
  • Five guided plans, interview sprint included, and the leaderboard
  • Run, Test and Submit with per-check feedback
  • One run at a time
For interview season
Pro

Faster feedback when the interview is close.

$15per month
$45 billed every 3 months
Go Pro

Cancel any time from Settings.

  • Everything in Free
  • Your runs start first
  • Up to 3 runs at once
  • Your full history and scores
  • New engines first: dbt, Airflow
Bootcamps, universities and teamsAssign problems to a class or a team, follow every check, and stop grading SQL by hand. Teachers are free.Shuffleet for schools & teams →
I'm preparing for a data role

Get a plan for your level and your interview date.

Solve your first problem →
I teach data engineering

Autograded labs on a real stack for your whole cohort.

See Shuffleet for schools →

Questions

Is it really free?+

Yes, no card needed. Most problems and five guided plans, the interview sprint included, are free and graded. Pro adds the advanced plans (production pipelines, big tech loop, modeling, lakehouse, finance), their hardest problems, faster parallel runs and your full history.

I'm new to data engineering. Can I start here?+

Yes. Six quick questions pick your starting point; newcomers start with SQL foundations and move on to pipelines.

How is this different from DataLemur or StrataScratch?+

They're great for SQL interview questions on one table. Shuffleet covers what comes next: pipelines whose data arrives in batches, late or twice, and scripts that must give the right answer when they run again. You can use both.

What do I write?+

Trino SQL (one SELECT, or a full script with CREATE, MERGE and INSERT) or PySpark (return a DataFrame from solve(spark), or write the tables yourself). Both are graded by the same checks.

Do I need to install anything?+

No. Everything runs in your browser, on our infrastructure.

Can my code see the hidden tests?+

No. Runs are sandboxed, every query passes a policy check, and hidden data lives in a catalog users can't read.

How do hiring challenges work?+

Engineers at a company post a set of problems with a deadline. Join, solve, and choose whether to share your results and the code you submitted with them; they never see your email. They refer the players they like through their own company's process.

Is it available in other languages?+

The app is in English and French; switch any time in Settings.

Your next interview has a pipeline question.

Practise it now, on the real thing. Your first problem takes about fifteen minutes.

Solve your first problem, free