ML Engineer vs Data Scientist vs Research Engineer: Which Interview Are You Actually In?
The same job title can hide three very different interview loops. Here is how to tell whether you are being screened as an ML engineer, a data scientist, or a research engineer, plus how comp and prep differ in 2025-2026.
BY EMILY CARTER · AIINTERVIEWTRAINING EDITORIAL · UPDATED JULY 11, 2026 · 9 MIN READ
If you have three interview invitations with three different titles, treat them as three different exams. An ML engineer loop screens for production coding, ML system design, and shipping. A data scientist loop screens for SQL, statistics, experimentation, and product sense. A research engineer loop screens for implementing papers, deep learning depth, and running experiments. The titles overlap in the job description and diverge hard in the interview room. Reported compensation also splits three ways: research engineer at a frontier lab tends to pay the most, ML engineer sits in the middle, and data scientist usually trails at matched levels. Below is how to read which loop you are in and prep the right one.
The day-to-day, honestly
A data scientist turns data into decisions. The output is an insight, a metric definition, an experiment readout, or a model that informs a product call. Much of the work is SQL, analysis, and communicating with product and business stakeholders.
An ML engineer turns data into a product. The output is a model running in production, served reliably, monitored, and retrained. The work skews toward software engineering: pipelines, serving, latency, and system design.
A research engineer turns ideas into experiments. The output is a working implementation of a new method, an ablation, or training infrastructure that lets a team test a hypothesis at scale. The work is deep learning internals, reproduction, and experimentation tooling. If you want the adjacent comparison for AI product roles, our AI engineer vs software engineer breakdown covers a neighboring split.
What each interview loop actually emphasizes
The loops are where the roles stop overlapping.
ML engineer. Expect four to five rounds: a coding round, ML system design, ML fundamentals, and behavioral. The coding is real and it is in Python, usually a medium-to-hard data-structures problem sometimes given an ML twist like implementing a metric or vectorizing a computation. ML system design asks you to design an end-to-end pipeline for something like feed ranking or fraud detection, covering data, features, labels, model choice, evaluation, deployment, and monitoring. Practice both the coding rounds and ML system design explicitly, because they are graded on different rubrics.
Data scientist. Expect a recruiter screen, a technical screen with live SQL (often with schema reasoning), then an onsite of three to five rounds covering statistics and modeling, experimentation and applied analysis, product sense, and behavioral. SQL is front-loaded and the bar is high: window functions, cohorts, and time-based aggregations. Experimentation rounds stay close to standard A/B testing frameworks, with power analysis, novelty effects, and a little causal inference mixed in. Product sense is its own round, where you define and defend metrics for a feature. If SQL is not automatic for you, drill it before anything else.
Research engineer. Expect a heavier coding assessment, often a CodeSignal or take-home that builds incrementally (for example, implement an in-memory database, then add transactions, then snapshotting), followed by from-scratch ML coding, deep learning theory, and experimentation design. At frontier labs like Anthropic and OpenAI, the loop weighs clean modular Python, concurrency, from-scratch ML coding, and ML-systems design for training and serving, alongside theory. You may be asked to write a forward pass in NumPy, reason about why an optimizer converges, or design an experiment to detect hallucinations.
Reported compensation, the three-way split
Frame all of these as reported and approximate, because level and city move them a lot.
Research engineer and ML scientist roles top the range at frontier labs. Reported total comp for research scientists at OpenAI runs roughly $300K to $700K, with research engineer bands in a similar neighborhood at senior levels. Median ML scientist and ML engineer comp at comparable levels is reported around $244K to $270K.
ML engineer is the middle band. Levels.fyi reports a median near $272,500, and at a company like Meta the ladder reportedly spans about $187K at entry level to $678K at senior staff.
Data scientist typically trails at matched levels, with reported comp often 15 to 40 percent below ML engineering. The gap narrows at senior levels, especially for experimentation and causal inference specialists, where the top of the DS band can approach ML engineering.
How to tell which loop you are in
Do not guess. Confirm.
Ask the recruiter for the exact round list before you schedule. The rounds are the rubric. SQL plus a product case means data science. Coding plus ML system design means ML engineering. A paper-implementation or from-scratch coding exercise plus questions about your research background means research engineer.
Read the panel. Data science loops usually include a product or analytics lead. ML engineering loops are mostly engineers. Research engineer loops include someone with first-author papers.
Read the job description for the verb. "Discover," "measure," and "experiment" point to data science. "Build," "deploy," and "scale" point to ML engineering. "Implement," "reproduce," and "train" point to research engineering.
Prep the loop you are actually in
Once you know the loop, the plan writes itself.
For ML engineering, split your time between Python coding and ML system design, and refresh fundamentals so you can defend a model choice. For data science, front-load SQL and experimentation, then rehearse a product-sense framework you can apply to any feature. For research engineering, reproduce two or three papers end to end, practice from-scratch implementations in NumPy and PyTorch, and be ready to reason about training dynamics.
The common failure is prepping the wrong loop: a data scientist who never practiced coding walking into an ML engineering onsite, or an ML engineer who never studied experimentation getting a product case. Start from the interview essentials, confirm your round list, then go deep on the two rounds that decide the outcome. You can browse role-specific ML and data science questions to calibrate the depth expected at your target level.
Turn it into offers. Work the real questions and concepts this maps to:
FAQ
Ask directly what the onsite rounds are. If they list SQL and a product case, it is a data science loop. If they list coding plus ML system design, it is ML engineering. If they mention a paper-implementation or from-scratch coding exercise and ask about your research background, it is a research engineer loop. Recruiters will almost always tell you the round breakdown if you ask before scheduling.
Discussion (5)
The tell I trust most: look at who is on the panel. A data science loop usually has a product manager or analytics lead in the mix. An ML engineering loop is mostly engineers. A research engineer loop pulls in someone who has first-author papers. The panel composition leaks the rubric.
This is underrated. I asked a recruiter for interviewer titles once and immediately saw it was an analytics DS loop, not the modeling role I applied for. Saved me from prepping the wrong thing.
One nuance on comp: the data scientist gap shrinks a lot at staff level and above, especially for causal inference and experimentation specialists. The averages hide that the top DS band at a big tech company can beat a median MLE.
Agreed. The DS ladder just has a wider spread. Product-facing generalists cluster lower, but experimentation and inference DS at the senior end are paid closer to MLE.
For research engineer loops, do not skip the from-scratch coding. I have seen strong engineers bomb an interview because they could describe attention perfectly but could not write a clean multi-head attention forward pass in NumPy under time pressure.
