← All writing
MLOps · 6 min read · 21 Jul 2026

An MLOps Roadmap for Engineers Coming From Research

Notebooks and one-off experiments do not survive contact with production. Here is a practical path from research habits to engineering discipline.

Cover image for the article: An MLOps Roadmap for Engineers Coming From Research

The gap nobody warns you about

If your training came from a lab or an MSc research project, you learned to optimise for a single metric on a fixed test set, usually inside a Jupyter notebook that ran once, produced a nice plot, and then sat untouched. That workflow is fine for a thesis. It is a liability in production, because production systems are not judged by a single number at a single point in time. They are judged by whether they keep working next month, when the data has drifted, a colleague has changed the feature pipeline, and someone else needs to debug a prediction from three weeks ago.

The habit that causes the most damage is treating the notebook as the final artefact rather than a scratchpad. I have seen (and written) notebooks where cell execution order matters, where a variable defined in cell 14 is silently reused in cell 40, and where the only record of which data version produced the reported accuracy is a comment that says 'ran this on Tuesday'. None of that is reproducible, and reproducibility is not a nice-to-have in engineering, it is the baseline requirement for anyone else to trust your work.

This roadmap is not about learning Kubernetes on day one. It is about building the habits that make your existing modelling skill actually deployable, in a sensible order: version everything, build pipelines instead of scripts, separate training from serving, and monitor what you ship. Skipping steps to jump straight to fashionable tooling is how people end up with a Kubernetes cluster running a model nobody can retrain.

Step one: version control that actually covers your experiment

Git for code is assumed knowledge at this point, but the research habit that needs breaking is treating data and model artefacts as outside the versioning story. Suppose you train a classifier, get 91% accuracy, and six weeks later a stakeholder asks you to reproduce that exact result because a downstream decision depended on it. If your training data was a CSV you later overwrote, or a database table that has since been updated with new rows, you cannot answer that question honestly. This is not a hypothetical: data drifts constantly, and 'the same table' rarely means the same rows over time.

The fix is to version data and model artefacts alongside code, using something like DVC or a simple convention of immutable, hash-named snapshots stored separately from Git but referenced by it. Practically, this means every training run should log: the exact commit hash of the code, a pointer to the exact data snapshot, the hyperparameters, and the resulting metrics, ideally with an experiment tracker such as MLflow or Weights and Biases rather than a spreadsheet you update by hand. The spreadsheet approach works for ten runs. It fails silently at run number two hundred, when nobody remembers which row corresponds to which checkpoint file.

There is a second, subtler benefit here that matters more in industry than in research: versioning gives you an audit trail. If a model starts behaving badly in production, the first question is always 'what changed', and if you cannot answer that in minutes because everything is versioned and timestamped, you will spend hours reconstructing history that should have been free.

server rack data center

Step two: pipelines, not scripts, and a real separation of concerns

A research script typically does everything in one file: load data, clean it, engineer features, split it, train, evaluate, plot. That is fine for exploration, but it hides a dangerous failure mode called data leakage, where information from the evaluation set quietly influences the training process, usually through a preprocessing step applied before the split rather than after. I have seen this happen with something as innocuous as fitting a scaler on the entire dataset before doing a train test split; the reported accuracy looks respectable, but it is measuring something other than genuine generalisation, and it will not survive contact with new, unseen data.

The engineering fix is to build an explicit pipeline with clearly ordered, testable stages: ingestion, validation, splitting, feature transformation fit only on training data, model training, and evaluation on a held-out set that the pipeline never touches during fitting. Tools like scikit-learn's Pipeline object, or heavier orchestrators such as Airflow or Prefect for scheduled retraining, exist precisely so that the split happens once, early, and nothing downstream can accidentally see across it. This is not bureaucracy for its own sake; it is the only reliable defence against a specific, well-documented category of silent bug.

Once the pipeline exists as code rather than a linear notebook, you also get something research workflows rarely have: the ability to rerun the exact same process on new data without manually re-executing cells in the right order. A retraining job that takes one command and produces a versioned model artefact is worth more, in practice, than a marginal improvement in model accuracy, because it is what allows the model to be maintained by someone other than the person who built it.

Step three: serving and monitoring, the part research skips entirely

Training a good model is roughly the first third of the job. The remaining two-thirds is making it available to a system that needs an answer in under a hundred milliseconds, and then watching what happens after it leaves your hands. Serving means wrapping the model behind an API, with input validation that rejects malformed requests before they reach the model, sensible logging of inputs and outputs for later debugging, and a clear contract for what happens when the model is unavailable, none of which appears in a research paper's methodology section.

Monitoring is the piece I think researchers underestimate most, because research treats evaluation as a one-off event at the end of a project, whereas production requires continuous evaluation against a moving target. A model trained on last year's customer behaviour can degrade steadily as the underlying population shifts, a phenomenon usually called data or concept drift, and the accuracy number you validated at deployment time tells you nothing about whether that is happening six months later. Concretely, this means tracking the distribution of input features over time, tracking prediction confidence, and where possible collecting ground truth labels on a delay so you can compute real accuracy retrospectively rather than assuming the launch-day number still holds.

The practical takeaway, if you take nothing else from this: treat 'can someone else rerun this and get the same answer' as the single test your work must pass before you consider it finished. Everything else in this roadmap, versioning, pipelines, serving, monitoring, is really just infrastructure built to keep that one property true as the system scales, the team grows, and the data underneath you keeps changing.

engineer looking at monitoring dashboard
← All writing See the project case studies →