From notebook to pipeline
A notebook that trains a model once isn't production. A training pipeline turns it into automated, repeatable steps: ingest data → validate → build features → train → evaluate → register the model. Orchestrated (Airflow, Kubeflow, or a managed pipeline), it can re-run on a schedule or when new data arrives.
Experiment tracking
When you train dozens of variants, you need to know what produced what. Experiment tracking (MLflow, Weights & Biases) logs each run's code version, data version, hyperparameters, metrics, and artifacts so you can compare runs and reproduce the winner. Without it, "which config got 0.92?" is unanswerable.
Versioning everything
Reproducibility = version code (git), data (DVC, a data snapshot/hash, or an immutable table), config/hyperparameters, and the model (a model registry with stages: staging → production → archived). Given a model in prod, you should be able to answer: what code, what data, what config produced it — and roll back to the previous one.
The model registry
A model registry (MLflow Registry, SageMaker) is the source of truth for models: versioned, stage-tagged, with lineage back to the run that made them. Deployment pulls from the registry; promotion (staging→prod) is a gated, auditable step — the ML equivalent of a release.
CI/CD for ML
Extend CI/CD: on a change, automatically retrain (or validate), run the eval suite, and gate promotion on the metrics (don't promote a model that regressed). Some teams add CT (continuous training) — automated retraining triggered by new data or drift. The through-line: automate the loop and gate every promotion on evaluation.