Why most ML projects never reach production
Why most ML projects never reach production
There's a number that gets quoted in every keynote about machine learning in industry: 60 to 80 percent of ML projects never reach production. Gartner, VentureBeat, NewVantage Partners, Algorithmia — every survey agrees on the order of magnitude even when the exact figure varies. The projects don't fail because the models were inaccurate. They fail at the boring stuff in front of and behind the model: getting the data in, deploying the model, watching it after deployment, deciding who owns the incident pager when it drifts.
This lesson maps that failure pattern so the rest of the course makes sense. We're not here to teach you how to train a slightly-better XGBoost. We're here to teach you the discipline that turns a Jupyter notebook into a thing your company will pay engineering salaries to keep running.
The shape of the failure
If you've worked in a company that tried to ship ML, the story is probably familiar. A data scientist gets a problem — fraud detection, churn prediction, lead scoring. They pull a CSV of historical data into a notebook. They try four model families. One of them gets impressive numbers on the held-out set. They write it up. Leadership is excited. Someone says "let's productionise this." Six months later, the project is dead.
Where did it die? Almost never in the model. It died at one of these gates:
- Data pipeline. The notebook ran on a hand-curated CSV. Production needs that same data refreshed daily, joined with three other tables, validated for schema drift, and reproducible. Nobody built that.
- Reproducibility. The notebook used
pd.read_csv('/Users/anya/Desktop/v3_FINAL_use_this_one.csv'). Six months later, nobody can recreate the training set. Even Anya can't — she changed laptops. - Deployment. The data scientist handed over a
model.pklto the platform team and said "you serve this." The platform team has no idea what features the model expects, what version of scikit-learn it was trained with, or what to do when an inference request takes 4 seconds. - Monitoring. The model went live. Three months later, conversion dropped 12% and nobody noticed for two weeks. The model had drifted — inference inputs no longer matched the training distribution. Nobody had set up a drift detector.
- Ownership. When the model misbehaves, who fixes it? The data scientist who built it is on another project. The platform team owns the service but not the model. The business owns the outcome but doesn't know what an F1 score is. The model rots in a no-man's-land.
Notice that "model not accurate enough" isn't a node on that graph. Accuracy is rarely what kills these projects. The boring 70% — the data pipeline, the deployment surface, the monitoring, the ownership — is what kills them.
The 'POC purgatory' anti-pattern
The Proof-of-Concept Purgatory pattern goes like this: a company decides to "do AI." They hire a data science team. The team builds POCs — sentiment analysis, lead scoring, fraud detection. Each POC works in the notebook. Each gets a 20-slide deck. Each is presented to leadership. Each is declared "promising." None of them ever go live.
After 18 months, the data science team has 12 POCs and zero shipped products. The CTO looks at the budget and asks where the value is. The team gets disbanded or repositioned to "data analytics." This is the rule, not the exception, in companies that approach ML without engineering rigour.
What's actually happening: the team is producing demos, not products. A demo proves the model can work under controlled conditions. A product works in the wild, repeatedly, when conditions change. The gap between the two is engineering — and it's what this course is about.
Why a SageMaker notebook is not a production system
You'll hear "SageMaker is the production ML platform from AWS" and it's easy to assume that just by using SageMaker you're doing MLOps. You're not. SageMaker is a toolbox of services. The toolbox includes:
- SageMaker Studio — notebooks
- SageMaker Pipelines — workflow orchestration
- SageMaker Model Registry — versioning and approvals
- SageMaker Endpoints — inference serving
- SageMaker Model Monitor — drift detection
- SageMaker Feature Store — feature reuse
Most teams use only the first one. They train in a Studio notebook, save the model artifact, and either email it to the platform team or stand up an endpoint by hand from the notebook. They've used one tool out of six and none of the discipline the other five enforce. The notebook is the part of SageMaker that looks most like what they already know (Jupyter), so they stop there.
This course teaches you to use all six in a way that fits together. The through-line: a model goes from data → training → registered version → deployed endpoint → monitored in flight → re-trained when drift is detected — and all of it lives in code in your git repo, not in a senior data scientist's laptop.
Eval suites in CI: the discipline that separates research from product
Here's a discipline almost no team has, and the one that most changes the quality of a production ML system: evaluation suites that run in CI.
In conventional software, you don't merge code without tests passing. The tests give you a guarantee that the new code doesn't break behaviour customers depend on. In ML, the equivalent is the eval suite: a fixed set of inputs with known correct outputs, run against the model on every proposed change, with a pass/fail threshold.
Without an eval suite, every model change is a leap of faith. The training set metric went up — does the model actually do the job better? You don't know. Without an eval suite, you can't refactor your training pipeline without risking a silent regression. You can't tighten one slice of the data without checking that another slice didn't degrade. You can't distinguish "the new model is better" from "the new model is better on the test set we happen to have."
Teams that have eval suites can ship 10x more model versions per quarter than teams that don't, because each ship is a routine push instead of a nail-biting deploy-and-pray.
Drift detection: feature drift vs concept drift vs label drift
Three flavours of drift kill production models. They're often conflated; it matters that you can tell them apart because the fix is different for each:
- Feature drift — the inputs have changed. Your fraud model was trained
in 2024; in 2026 customers started paying via UPI Lite and your
payment_methodfeature now has a value your model has never seen. Detection: track feature distributions over time, alert on KL-divergencethreshold.
- Concept drift — the relationship between input and output has changed. Customers who bought item A used to also buy item B; now after a competitor launched, they buy item C instead. Inputs look the same, but the right answer is different. Detection: monitor model accuracy on a rolling slice of labelled production traffic.
- Label drift — the distribution of correct answers has shifted. Your classifier output 12% "fraud" historically; now it's outputting 38% "fraud" on real traffic. Either fraud actually went up, or the model is miscalibrated. Detection: monitor output distributions and alert on significant shift.
We'll wire all three in week 7 of the course. For now, just know that "monitoring an ML system" is at least three monitoring jobs, not one.
Who owns a deployed model — the org chart trap
The hardest problem isn't technical. It's the org chart.
In most companies, models are owned by data scientists, who don't carry the pager. Endpoints are owned by platform engineers, who don't understand the model. Business outcomes are owned by product managers, who don't know which model is in production this week. When something breaks, you have three groups who each can see only part of the problem.
The MLOps move is to put ownership in one place: a single team that owns both the model and the service that serves it, with on-call rotation covering both. The team needs members fluent enough in both ML and platform engineering that they can debug a feature-drift incident at 2 AM without five Slack threads. This is rare; building toward it is the real organisational work of doing ML in production.
Throughout this course, when we deploy something, we'll be explicit about who owns it and what their pager looks like. The technical pattern always implies an org pattern. If your org can't support the pattern, the pattern won't ship.
Key takeaways
- The 70/30 rule — ML projects fail in the boring 70% (data, deployment, monitoring, ownership), not in the exciting 30% (model architecture).
- Demos vs products — a working notebook is a demo. A working endpoint that survives data drift, gets re-trained, has a pager rotation, and is versioned in git is a product. Everything in this course is about closing that gap.
- SageMaker is a toolbox, not a solution — using SageMaker notebooks doesn't make you an MLOps team. The discipline is in how you connect Pipelines, Registry, Endpoints, Monitor and Feature Store.
- Eval suites in CI are the single highest-leverage practice. If you do nothing else from this course, do this.
- Three kinds of drift exist and each needs its own detector. Don't conflate them.
- Ownership is an org problem, not a tooling problem. Tools that don't fit the org chart get abandoned.
What's next
In Lesson 02 we'll go hands-on: build a complete SageMaker Pipeline that trains a model on S3 data, registers a versioned artifact in the Model Registry, and deploys it to a real-time endpoint with shadow traffic. By the end of that lesson you'll have seen — end to end — what every later week of the course builds on.
Further reading
- Google's Hidden Technical Debt in Machine Learning Systems (Sculley et al., 2015) — the foundational paper. Still the clearest description of "the model is 5% of the system."
- Machine Learning Engineering by Andriy Burkov — chapter 4 on data and feature engineering is the most practical write-up of the "boring 70%" available in book form.
- Made With ML (madewithml.com) by Goku Mohandas — free, well-structured walkthrough of MLOps fundamentals; complementary to this course.
- The AWS SageMaker documentation home page — bookmark it; you'll reference it weekly.