Data → features → training → evaluation → deployment → monitoring, with everything reproducible
"It worked on my laptop" is not an answer production wants. If you can't reproduce a training run — same data, same code, same hyperparameters — you can't debug a regression, satisfy an audit, or safely roll back a bad model.
This is what separates people who trained a model once from people who've kept one alive: knowing which model is in production and how it was made requires understanding pipelines, versioning, and a registry.
Treat a trained model like a compiled binary: it has source inputs (data version, code commit, hyperparameters) and it must be traceable back to them. The pipeline is the build process; experiment tracking is the build log; the model registry is the artifact store with a promotion gate (staging → production) instead of a plain file share.
Every stage should be automated, versioned, and reproducible — a schema change upstream should trigger retraining and evaluation before anything reaches deployment.
Each arrow is a place teams get burned: unversioned features cause training-serving skew, unautomated evaluation lets a worse model slip into production, missing monitoring means nobody notices until users complain.
Every training run should record: hyperparameters, metrics, dataset version, and the code commit that produced it. Without this, "run #47 was better, but why?" is unanswerable.
Common tools: MLflow (open-source, self-hosted friendly), Weights & Biases (rich dashboards, team collaboration), Neptune (metadata-focused). The tool matters less than the discipline of logging every run.
The registry is version control for trained models — it stores artifacts and metadata, and promotes models through named stages instead of leaving "which model is live?" as a Slack question.
Promotion from Staging to Production should be gated on evaluation thresholds, not a manual copy-paste — that gate is where CI/CD for ML picks up.