Ask an engineer to draw an end-to-end machine learning pipeline and most will sketch a familiar CI/CD line: commit, build, test, deploy. That picture holds right up until the “build” step is a training run whose output depends on data nobody versioned, and the “test” step has to judge whether a model is good enough rather than whether an assertion passes. At that point the DevOps mental model quietly stops describing what is actually happening — and the gap doesn’t announce itself until the day someone tries to reproduce yesterday’s model and finds the code alone won’t get them there. That reproduction failure is the divergence point. It is where teams learn, usually the hard way, that an ML pipeline is not a longer software pipeline. It is a chain of stages — data ingestion, feature engineering, training, evaluation, deployment, and continuous monitoring — where several stages produce non-deterministic artefacts that a DevOps pipeline was never designed to track. The value of walking that chain stage by stage is practical: it tells you which parts of your existing tooling carry over unchanged, and which parts need genuinely new artefacts you don’t have yet. What does an end-to-end machine learning pipeline actually mean in practice? In practice, “end-to-end” means the pipeline owns the path from raw data to a monitored production model — and back again, because monitoring feeds retraining. The reason this matters is that the CI/CD line most teams already run covers only a slice of that path well. Code commit, build, containerisation, deployment, and rollback are all things a mature DevOps setup handles competently. Those stages carry over. What doesn’t carry over is everything that treats data and models as first-class artefacts rather than build inputs. A standard pipeline versions code and produces a deterministic binary from it. An ML pipeline produces a model whose behaviour depends on training data, feature definitions, random seeds, hyperparameters, and library versions all at once. Change any one of those silently and you get a different model from the same commit. That is the property DevOps tooling was never built to reason about, and it is why the naive linear framing breaks. The correct frame is a chain where each stage has an output artefact and a reproducibility contract. Some of those artefacts — container images, deployment manifests — are things you already track. Others — versioned datasets, feature definitions, trained model weights, experiment run metadata — are things most CI/CD systems have no concept of. Naming the stages is how you find the second list. The six stages and what each one produces The clearest way to see where DevOps ends and MLOps begins is to lay the stages out with their outputs and their reproducibility contract side by side. Stage Output artefact Reproducibility contract DevOps analogue Data ingestion Versioned dataset snapshot Immutable reference to exact data used No clean analogue Feature engineering Feature definitions + computed features Same code + same data → same features Partial (transform code is versionable) Training Model weights + training metadata Seed, hyperparameters, data version, library versions pinned No analogue — output is non-deterministic Evaluation Metric report + gate decision Fixed eval set + fixed metrics → comparable scores Test suite, but pass/fail becomes quality judgment Deployment Served model + serving config Container + model reference + routing Direct — this is ordinary CI/CD Monitoring Live metric + drift signals Continuous, compares live behaviour to a baseline Observability, but on inputs and predictions Read down the “DevOps analogue” column and the split is obvious. Deployment is ordinary CI/CD. Feature engineering and evaluation are DevOps-adjacent but changed in kind. Data ingestion, training, and drift-aware monitoring have no honest software analogue at all — they are the stages that force new artefacts. This is more than a taxonomy exercise. In our experience, when a team can point at this map during an incident, a model-degradation event stops being an undiagnosable outage and becomes a bounded question: which stage broke? (This is an observed pattern across MLOps engagements, not a benchmarked figure.) Was the data snapshot different, did a feature computation drift, did retraining pick up a bad batch, or is the serving layer simply routing to the wrong model version? Without the map, teams re-argue ownership of every stage each time a model ships. Why can’t a standard CI/CD pipeline handle training and evaluation? Training breaks CI/CD because the build step is no longer deterministic. A software build maps source to binary reproducibly — same input, same output, every time. A training run maps code plus data plus configuration plus stochastic initialisation to a set of weights, and unless every one of those inputs is pinned and recorded, the same commit produces a materially different model on the next run. Frameworks like PyTorch and TensorFlow expose seed control and deterministic execution flags, but determinism is opt-in, often incomplete on GPU kernels, and easy to lose the moment a data source updates upstream. The artefact you need to version is not the code — it is the full training context. Evaluation breaks CI/CD for a different reason. A test suite answers a binary question: did the assertions pass? Model evaluation answers a comparative, threshold-bearing question: is this model good enough, and is it better than the one in production? A model can pass every unit test in its serving code and still be worse than its predecessor on the metrics that matter. That means the evaluation stage needs a fixed evaluation set, a stable metric definition, and a gate policy that decides promotion — none of which a green build indicates. Deciding which metrics to enforce at that gate is its own discipline; we cover it in detail in what to track in production for machine learning model performance, because the wrong gate metric silently promotes bad models. How does ML monitoring differ from application observability? Application observability watches the system: latency, error rate, saturation, throughput. Those signals still matter for a served model, and your existing observability stack — Prometheus-style metrics, tracing, dashboards — carries straight over for them. But a model can be perfectly healthy by every one of those signals and quietly wrong. The failure that observability cannot see is silent data drift. When the distribution of inputs shifts away from what the model was trained on — a new customer segment, a changed upstream sensor, a seasonal pattern the training window never contained — predictions degrade while latency, error rate, and CPU all stay green. There is no exception to catch. The model returns a confident answer that is increasingly wrong. ML monitoring differs because it watches the inputs and the predictions themselves, comparing live distributions and prediction quality against a training-time baseline, and raises a signal when they diverge. That is why drift detection is a distinct artefact, not a dashboard tweak. We go deeper on which live signals actually catch this in our note on performance metrics in machine learning worth tracking in production. Recommendation and ranking systems make the stakes concrete: a model serving stale feature distributions degrades relevance long before any system alarm fires, which is one reason production-grade recommenders are engineered around continuous evaluation — a theme we develop in how deep learning recommendation models work in production. Which investment carries over, and which needs new artefacts? Here is the split most teams find reassuring once they see it laid out. A mature DevOps foundation is not wasted when you move to ML — it does most of the heavy lifting for a majority of the pipeline. Across MLOps engagements we consistently see roughly 60–70% of a team’s existing CI/CD, observability, and infrastructure-as-code investment carry into ML largely intact, with the remaining 30–40% needing new artefacts (an observed engagement pattern used for planning, not a benchmarked measurement). Carries over (the 60–70%): Source control, code review, and CI for pipeline code and serving code Containerisation and deployment orchestration (Docker, Kubernetes) Infrastructure-as-code for the compute and serving environment System-level observability — latency, error rate, throughput, saturation Rollback and blue-green deployment mechanics Needs new artefacts (the 30–40%): Dataset versioning — an immutable reference to the exact data used Feature definitions and a way to compute them identically at train and serve time Model registry — versioned weights with the training context attached Experiment tracking — run metadata linking data, config, code, and results Drift and prediction-quality monitoring on inputs and outputs Tools like MLflow, DVC, and feature stores exist precisely to hold that second list; none of them replace your CI/CD, they sit beside it. Getting the boundary right is what lets a team adopt MLOps incrementally rather than rebuilding a platform they already have. If you are mapping this for a real system, our overview of what TechnoLynx builds across MLOps and production AI is the closest starting point, and the underlying technologies we work with shows which parts of the stack we implement directly. FAQ How does an end-to-end machine learning pipeline actually work? An end-to-end ML pipeline owns the path from raw data to a monitored production model and back, because monitoring feeds retraining. In practice it is a chain of six stages — data ingestion, feature engineering, training, evaluation, deployment, monitoring — where each stage has an output artefact and a reproducibility contract. Only some of those artefacts (containers, deploy manifests) are things a standard CI/CD system already tracks. What are the distinct stages of an ML pipeline, and what does each produce? The stages are data ingestion (a versioned dataset snapshot), feature engineering (feature definitions and computed features), training (model weights plus training metadata), evaluation (a metric report and gate decision), deployment (a served model and config), and monitoring (live metrics and drift signals). Each stage’s output is the artefact the next stage depends on, which is why an unversioned artefact anywhere in the chain breaks reproducibility downstream. Which pipeline stages reuse existing DevOps CI/CD tooling, and which need new MLOps artefacts? Deployment, containerisation, infrastructure-as-code, system observability, and rollback carry over from a mature DevOps setup — roughly 60–70% of the investment. Data ingestion, feature definitions, model registry, experiment tracking, and drift monitoring need new artefacts DevOps has no concept of, the remaining 30–40% (an observed engagement pattern, not a benchmarked figure). Why can’t a standard software CI/CD pipeline handle the training and evaluation stages? Training breaks CI/CD because it is non-deterministic: the same commit produces a different model unless data version, seed, hyperparameters, and library versions are all pinned and recorded. Evaluation breaks it because a green test suite answers pass/fail, while model evaluation answers a comparative, threshold-bearing question — is this model good enough and better than production — that a passing build never indicates. How does the monitoring stage differ from application observability, and why does it matter for silent data drift? Application observability watches the system — latency, error rate, saturation — and those signals stay green even when a model is quietly wrong. ML monitoring watches the inputs and predictions themselves, comparing live distributions against a training-time baseline, which is the only way to catch silent data drift that never raises a system-level alarm. What makes a pipeline reproducible end-to-end when several stages produce non-deterministic artefacts? Reproducibility comes from pinning and recording the full context of each non-deterministic stage — the exact dataset snapshot, feature definitions, random seed, hyperparameters, and library versions — not just the code. When that context is captured as versioned artefacts in a model registry and experiment tracker, the same run can be recreated even though the individual step is stochastic. Where does an end-to-end pipeline typically break in production, and how does a clear stage map shorten diagnosis? Pipelines most often break at the seams between stages: a changed data snapshot, drifted feature computation, a bad retraining batch, or a serving layer routing to the wrong model version. A clear stage map turns a model-degradation incident from an undiagnosable outage into a bounded question — which stage broke? — and shortens mean-time-to-diagnosis accordingly. Where the stage map earns its keep The real test of this framing is not documentation — it is the argument a team doesn’t have to keep having. When ownership of each stage is settled and each artefact is named, a degrading model becomes a diagnosis, not a debate. When it isn’t, every model ship re-opens the same territorial questions. If you are still deciding which stages to build in-house and which to adopt off the shelf, that is genuinely a scoping decision rather than an engineering one, and it maps cleanly onto the “is this an ML system masquerading as a software project?” question an AI Project Risk Assessment is designed to answer. Each stage that DevOps can’t cover is a risk line item — and walking the pipeline is how you turn a vague sense that “MLOps is hard” into a concrete, bounded list of what to build next.