Interview Insights · Data Engineer
Why Every Data Engineer Should Practice Explaining Their Case Study Aloud
Quick summary — DE case study
In a case study round I am not grading your diagram. I am grading how you reason while you build it, and I can only grade what you say out loud. Many data engineer candidates know Spark, Airflow and SQL well, yet struggle in the case study round because they have never spoken a design from start to finish. They jump to tools, skip the numbers and go quiet when I ask what happens if a job fails halfway. Practising aloud fixes the order of your thinking: requirements first, then sizing, then design, then failure handling.
In this guide you will learn:
- What a data engineering case study round is really checking
- How to say sizing numbers aloud without getting lost in arithmetic
- A spoken script for batch versus streaming trade-offs
- How to answer failure follow-ups such as reruns, duplicates and late data
- Drills to rehearse a full case study in 25 minutes
SECTION 01What a data engineering case study round actually tests
When I give a candidate a case study, it usually sounds simple: 'An e-commerce company wants a daily sales dashboard and a near real-time fraud alert. Design the data platform.' There is no single correct answer. What I want to see is whether you can turn a vague business ask into a design you can defend.
The interesting part is that most of the signal comes from the first few minutes. Do you ask who uses the data? Do you ask how fresh it needs to be? Do you ask how much data there is? A candidate who has practised aloud asks these naturally. A candidate who has only read about pipelines starts drawing Kafka on the whiteboard before knowing whether the company has a hundred orders a day or a hundred million.
| What I listen for | Weak signal | Strong signal | Why it matters |
|---|---|---|---|
| Requirement questions | No questions, starts drawing | Asks consumers, freshness, volume | Design depends on these answers |
| Sizing | Skips numbers entirely | Rough rows per day and storage per year | Shows you can justify tool choices |
| Trade-offs | One option, no alternatives | Names what was rejected and why | Proves the decision is yours |
| Failure handling | Assumes jobs never fail | Talks about reruns, idempotency, alerts | Real pipelines fail every week |
Interviewer: Design a platform for daily sales reporting
and real-time fraud alerts.
Candidate: Okay, so we will use Kafka for ingestion,
then Spark Streaming, then store in S3, then Redshift,
then Power BI on top. Airflow for scheduling.
Interviewer: Why Kafka for the daily report?
Candidate: ...because it is scalable.Interviewer: Design a platform for daily sales reporting
and real-time fraud alerts.
Candidate: Before I draw anything, I see two different needs.
The sales report is read once a day, so a few hours of delay
is fine. Fraud alerts need seconds, not hours.
Can I ask roughly how many orders per day, and where the
orders live today? A transactional database, or events?
If it is a database, I would batch-load the report path
and only stream the fraud path. That keeps the expensive,
always-on part as small as possible.
The strong candidate has not named a single tool yet, and that is exactly why I trust the tools they name later. They split the problem by latency first. That one spoken sentence tells me more than a perfect diagram would.
SECTION 02Saying sizing and trade-offs out loud without getting lost
Sizing is where many candidates go silent. They try to do exact arithmetic in their head, get nervous and give up. I do not need exact numbers. I need rough orders of magnitude, said clearly, so that your later choices have a reason behind them.
The trick is to say your assumptions before your result. 'Assume each order event is about 1 KB' is a sentence I can correct if I disagree. A silent calculation that ends in a random number is not something I can follow. Practise saying the chain out loud until it sounds like a calm explanation rather than a maths test.
| Decision | Option A | Option B | What to say aloud |
|---|---|---|---|
| Ingestion style | Daily batch extract | Change data capture stream | Batch if freshness is hours; CDC if it is minutes |
| Storage format | CSV files | Partitioned Parquet | Parquet for columnar reads and compression |
| Transform engine | SQL in the warehouse | Spark jobs | Warehouse SQL until volume or logic outgrows it |
| Load pattern | Full reload | Incremental merge | Incremental once the table is too big to reload daily |
Spoken sizing chain (assumptions first):
"Let me assume 2 million orders a day.
Each order event is roughly 1 KB as JSON.
So that is about 2 GB of raw JSON per day.
Over a year that is around 730 GB raw.
In Parquet with compression it is usually much smaller,
so a few hundred GB per year in the lake.
That is comfortable for a cloud warehouse,
so I do not need a big Spark cluster for the report path.
I would keep Spark for heavier joins if they appear."
Notice: every number is an assumption I can change.-- Incremental upsert of yesterday's orders into the fact table
-- (standard MERGE, works in Snowflake, BigQuery, Databricks SQL)
MERGE INTO analytics.fact_orders AS t
USING (
SELECT order_id, customer_id, order_ts, amount, status, updated_at
FROM staging.orders_raw
WHERE updated_at >= DATEADD(day, -1, CURRENT_DATE)
) AS s
ON t.order_id = s.order_id
WHEN MATCHED AND s.updated_at > t.updated_at THEN
UPDATE SET status = s.status,
amount = s.amount,
updated_at = s.updated_at
WHEN NOT MATCHED THEN
INSERT (order_id, customer_id, order_ts, amount, status, updated_at)
VALUES (s.order_id, s.customer_id, s.order_ts, s.amount, s.status, s.updated_at);
When you explain the MERGE aloud, say why the updated_at > t.updated_at condition is there. It stops an older copy of a row from overwriting a newer one if the job reruns. That single clause is often the follow-up question I was going to ask, and answering it before I ask is a strong signal.
DATEADD is Snowflake and SQL Server syntax. If your interviewer works on BigQuery, say so: 'In BigQuery I would write DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY).' Knowing the dialect differences shows real hands-on time.
SECTION 03Defending the design when the follow-ups get hard
The second half of a case study is me trying to break your design. What if the job fails halfway? What if an order arrives two hours late? What if the source sends the same record twice? These are not trick questions. They are what a data engineer deals with every week.
Candidates who have practised aloud treat these as expected. They say 'good question, that is the idempotency problem' and walk through it. Candidates who have not practised often rebuild the whole design under pressure, which tells me the first design was never really theirs.
| Follow-up I ask | Concept behind it | Short spoken answer | Detail to add |
|---|---|---|---|
| The job failed halfway. Now what? | Idempotent reruns | Rerun the same partition; it overwrites, not appends | Write to a date partition, then swap |
| Same order arrives twice | Deduplication | Dedupe on order_id keeping latest updated_at | ROW_NUMBER over a key |
| An event arrives 2 hours late | Late data and watermarks | Allow a lateness window, reprocess recent days | Streaming watermark or daily lookback |
| Source schema adds a column | Schema evolution | Land raw as-is, evolve staging deliberately | Alert on unexpected columns |
-- Keep only the latest version of each order
WITH ranked AS (
SELECT *,
ROW_NUMBER() OVER (
PARTITION BY order_id
ORDER BY updated_at DESC
) AS rn
FROM staging.orders_raw
)
SELECT order_id, customer_id, order_ts, amount, status, updated_at
FROM ranked
WHERE rn = 1;
-- Spoken version:
-- "I partition by the business key, order by the update time
-- descending, and keep row number one. If two rows tie on
-- updated_at I would add an ingestion timestamp as a tiebreaker."from pyspark.sql import functions as F
orders = (spark.readStream.format("kafka")
.option("kafka.bootstrap.servers", "broker:9092")
.option("subscribe", "orders")
.load()
.select(F.from_json(F.col("value").cast("string"),
"order_id STRING, amount DOUBLE, event_ts TIMESTAMP").alias("o"))
.select("o.*"))
per_window = (orders
.withWatermark("event_ts", "2 hours")
.groupBy(F.window("event_ts", "10 minutes"))
.agg(F.sum("amount").alias("total")))
# Spoken: "The watermark tells Spark to keep window state for
# two hours of event time. Events later than that are dropped,
# so I would also run a daily batch correction from the source."
You do not need to write this code perfectly on a whiteboard. You do need to be able to say what each part does in one sentence. If you can explain ROW_NUMBER, watermarks and partition overwrites calmly, most of my follow-ups are already answered.
SECTION 04A 25-minute case study rehearsal you can run at home
You need three things: a case prompt, a timer and a way to record yourself. Run one case every two days. After a few rounds you will notice your openings get shorter and your follow-up answers get calmer, because you have heard yourself say them before.
PICK ONE PROMPT PER SESSION
1. A food delivery app wants hourly order counts per city
and an alert when a restaurant's cancellations spike.
2. A bank wants a daily customer 360 table built from
loans, cards and app logins.
3. A ride app wants trip data in a lake for analysts,
plus driver earnings that must never be double-counted.
4. A retailer moves from nightly CSV drops to CDC from
its order database. Design the migration.
5. An edtech platform wants video watch-time events
joined with course enrolments for weekly reports.25-MINUTE RUN (record audio)
00:00-03:00 Clarify: consumers, freshness, volume, sources
03:00-06:00 Size: rows/day, bytes/row, yearly storage
06:00-14:00 Design: ingest -> land -> transform -> serve
14:00-20:00 Failures: rerun, dupes, late data, schema change
20:00-23:00 Monitoring: row counts, freshness, alerts
23:00-25:00 Summary: 'If I had more time I would...'
Rule: say every assumption out loud before using it.SCORE YOUR RECORDING (1-5 each)
[ ] Asked about freshness before naming tools
[ ] Gave at least one sizing number with assumption
[ ] Named one rejected alternative and why
[ ] Explained idempotent reruns clearly
[ ] Handled duplicates and late data
[ ] Mentioned at least one data quality check
[ ] Ended with a short summary
Lowest score: ______ Fix it in the next run.
SECTION 05Habits that make your spoken case study sound senior
These small habits change how your case study sounds, even when your design is the same as another candidate's.
- Split by latency first — Separate what must be fresh in seconds from what can be hours old. It simplifies the design and shows judgement immediately.
- Name the source system — Saying 'the orders live in Postgres' or 'events come from the mobile app' grounds the design in something concrete.
- Draw while you talk — Each box you draw should come with one spoken sentence about what goes in and what comes out.
- Mention data quality early — A row count check or a freshness alert, mentioned before I ask, tells me you have run pipelines that broke.
- Close with what you would add — End with one or two improvements you would make with more time. It shows you know the design is a first version.
SECTION 06Interview Q&A — DE case study
Q1How would you design a pipeline when you do not know the data volume?
I would ask first. If the interviewer will not give a number, I would state an assumption, for example a few million rows a day, design for that, and then say what changes if the volume is ten times higher, such as moving heavy joins from warehouse SQL to Spark or partitioning more aggressively.
Q2When would you choose streaming over batch in a case study?
When the business decision needs the data within seconds or minutes, such as fraud alerts or live inventory. If a report is read once a day, batch is simpler, cheaper and easier to rerun. I often propose both: batch for reporting and a small streaming path only where latency really matters.
Q3Data Engineer interview: What does idempotent mean for a data pipeline?
It means running the same job twice for the same input gives the same result, with no duplicates. In practice I write each run to a date partition and overwrite that partition, or use MERGE on a business key, so a rerun after a failure is safe.
Q4How do you handle late-arriving data?
In streaming, I set a watermark that keeps state open for a lateness window that suits the business. For anything later, I run a batch correction that reprocesses the last few days of partitions. I also track how much data arrives late so the window can be tuned.
Q5What monitoring would you add to your design?
At minimum: row counts compared with the previous day, a freshness check on the latest timestamp, null and duplicate checks on key columns, and alerts when a scheduled job fails or runs much longer than usual. I would mention who receives each alert.
SECTION 07Test yourself — DE case study quiz
Five questions. No sign-up.
0 / 5Pick an answer to see why it is right or wrong.
SECTION 08Frequently asked questions
What is a case study round in a data engineer interview?
It is a design discussion where you are given a business problem, such as building a reporting platform or a real-time alert, and asked to design the data flow. You are judged on how you clarify requirements, size the data, choose tools and handle failures.
How long is a data engineering case study interview?
It varies by company, but many are planned as a single conversation of under an hour, with some time for follow-ups. Practising a full walk-through in about 25 minutes leaves room for the interviewer's questions.
Do I need to know a specific cloud for a data engineer case study?
Usually not. You can describe the design with general building blocks such as object storage, a warehouse, a scheduler and a stream. If you know one cloud well, mention its services, but explain the concept behind each one.
How do I prepare for a data engineer case study as a fresher?
Pick a few realistic prompts, design each on paper, then explain it aloud while recording yourself. Focus on clarifying questions, rough sizing, batch versus streaming, idempotent loads and data quality checks.
What are common mistakes in data pipeline design interviews?
Naming tools before asking about volume and freshness, skipping sizing, ignoring failures and duplicates, and redrawing the whole design when challenged instead of extending it with a targeted fix.
Is there a course that covers Data Engineer interview answers?
Yes. Uncodemy's Data Science Training Course in Noida (classroom and online) includes live projects, one-to-one mock interviews and resume reviews, so you practise Data Engineer interview answers with trainer feedback before the real interview. You can book a free demo class from this page to see how the sessions work.
SECTION 09Related reads
Classroom & online · Noida
Rehearse case studies until they feel natural
Our Data Science Training Course covers pipelines, SQL, Spark and cloud storage, with mock design rounds where you explain your case study out loud and get feedback.
Talk to a counsellor for current fees- Pipeline design practice
- Spark and SQL hands-on
- Spoken mock case rounds
- Weekday & weekend batches