
Your AI Project Will Fail on Data, Not the Model

Most AI projects that fail don't fail because the model was wrong. They fail because the data feeding the model was wrong, incomplete, or simply not fit for the purpose. If you've shipped production ML systems, you already suspect this. This post is about confirming it with specifics and giving you a framework for fixing it before it costs you a quarter.
The Model Is the Easy Part
Picking a model architecture is genuinely straightforward today. You have Hugging Face with thousands of pre-trained checkpoints, OpenAI and Anthropic APIs for foundation model access, AutoML pipelines in Vertex AI and SageMaker that will select and tune models for you. A competent ML engineer can have something running in a notebook in a day.
The hard part is everything that happens before the model sees a single row.
In our experience building production AI systems, roughly 70–80% of project time goes into data work: collection, cleaning, labelling, schema alignment, deduplication, lineage tracking, and drift monitoring. That ratio holds across domains, whether you're doing fraud detection, demand forecasting, or document classification. The model itself is maybe 10% of the real work.
This isn't a new observation. Andrew Ng's data-centric AI movement made this point clearly years ago, but teams keep underestimating it because data problems are less glamorous than model problems, and they don't show up in benchmarks.
Why Data Problems Are Hard to See Until It's Too Late
A bad model fails loudly. You run evaluation metrics, F1 scores drop, accuracy is clearly off, and you know something is wrong. A bad dataset fails quietly. The model trains, evaluation looks acceptable, you ship it, and then six months later you notice the predictions have been subtly wrong in production the entire time.
There are a few specific failure modes worth naming.
Label Noise at Scale
If your training set has 5% label noise, a model can often compensate. At 15%, you're in trouble. At 25%, the model learns the noise. The insidious thing is that label noise in real enterprise datasets is almost never uniformly distributed. It clusters in edge cases, which are exactly the cases you most need the model to handle correctly.
Annotation disagreement is a related issue. When you have multiple annotators labelling the same data, inter-annotator agreement (measured with Cohen's Kappa or Krippendorff's Alpha) below 0.6 is a signal that the task definition is ambiguous, not that the annotators are incompetent. Shipping a model trained on that data means you've baked the ambiguity in permanently.
Distribution Shift Between Training and Production
Your training data was collected in Q3 last year. Your production environment is Q1 this year. If anything changed in that window, the model is operating on out-of-distribution data. In retail, seasonality does this. In fintech, regulatory changes do it. In healthcare, ICD coding updates do it.
The standard fix is to monitor for covariate shift using something like the Kolmogorov-Smirnov test on feature distributions, or to use purpose-built tools like Evidently AI or WhyLabs. But monitoring only tells you the shift happened. You still need a data pipeline that can incorporate new labelled data quickly enough to matter.
Schema Drift in Upstream Sources
This one kills you slowly. An upstream service changes a field name, or starts sending null where it used to send zero, or changes a categorical encoding. Your pipeline doesn't break; it just silently passes degraded data to the model. Without data contracts enforced at ingestion (tools like Great Expectations or dbt tests make this tractable), you won't catch it until a stakeholder notices something odd in the output.
What Does "Good Data" Actually Mean?
There's a temptation to answer this with volume. More data is better. That's not wrong, but it's incomplete.
| Property | What it actually means | How to check it |
|---|---|---|
| Accuracy | Labels and values reflect ground truth | Audit sample, compare to source records |
| Completeness | Missing values are understood, not ignored | Missingness analysis per feature |
| Consistency | Same entity represented the same way across records | Entity resolution, deduplication |
| Timeliness | Training distribution matches production distribution | Feature drift monitoring |
| Relevance | Features have causal or strong correlational relationship to target | Feature importance + domain validation |
Volume matters only once the other five properties are satisfied. A dataset with 10 million rows and 20% label noise will produce a worse model than 100,000 carefully curated rows with 2% noise, in most practical settings.
/// Not sure where to start?
Get the architecture before you commit
Tell us what you're building and we'll map the technical approach, stack, and rough timeline. No cost, no obligation, no sales call required.
How Should You Structurally Approach This?
The answer depends on where your data comes from, but there's a general architecture that holds up well in production.
Treat Data as a Product
This means owning the schema, the quality guarantees, the SLA on freshness, and the documentation. It means having someone accountable for data quality the way a product manager is accountable for a feature. Data mesh frameworks formalise this with the concept of domain-oriented data ownership, where the team closest to the data source is responsible for its quality as a published product.
In practice, this often means building internal tooling: a feature store (Feast or Tecton are reasonable choices), a data catalogue (Apache Atlas or DataHub), and automated quality checks that gate data from entering training pipelines.
Invest in Labelling Infrastructure Before You Need It
If your task requires human labels, you will need to re-label continuously as the world changes. Building that infrastructure after you've shipped to production is painful. Label Studio is a good open-source starting point. For high-volume tasks, Snorkel's programmatic labelling approach can reduce dependence on manual annotation by writing labelling functions that encode domain rules.
The cost of labelling is real. Budget for it explicitly. Projects that treat labelling as a one-time cost are the ones that surprise themselves six months later.
Build Lineage From Day One
You need to be able to answer: where did this training example come from, who labelled it, what version of the preprocessing pipeline produced this feature, and what model version was trained on this dataset. Without lineage, debugging production failures becomes archaeology.
MLflow tracks experiments. DVC tracks data and model versions. Together they cover most of what you need. If you're already in a cloud ecosystem, Vertex AI Pipelines and SageMaker Pipelines both have lineage built in.
A Practical Checklist Before You Train Anything
Before a model trains in a well-run pipeline, these questions should have answers:
- What is the source of each feature, and who owns that source?
- What is the expected label accuracy, and how was it measured?
- Does the training distribution match the expected production distribution? On what evidence?
- Are there data contracts in place for every upstream dependency?
- Is there a documented process for incorporating new labelled data?
If more than two of these are unanswered, you're not ready to train. You're ready to do data work.
Conclusion
The model is a multiplier. If the data it trains on is off, the multiplier amplifies the error. Get the data right first and the model choice becomes almost secondary.
The next concrete step is to run a data audit on your current training set before your next training run. Not a full data engineering sprint, just a structured review: check label agreement on a sample, run a distribution comparison between your training split and recent production logs, and validate your schema contracts. What you find will almost certainly reorder your priorities.
FAQ
Does this mean I should always collect more data before building a model? Not necessarily. More data helps only if the new data is higher quality or covers gaps in the existing distribution. Collecting more of the same flawed data makes the problem worse, not better. Audit first, then decide whether the gap is volume or quality.
How much data do I actually need to start training? It depends heavily on the task. For fine-tuning a pre-trained language model, a few hundred labelled examples can be enough to get meaningful results. For training a tabular model from scratch on a rare-event detection problem, you may need tens of thousands. The rule is: enough to represent the full distribution of cases the model will encounter in production.
What's the difference between data drift and concept drift? Data drift means the distribution of your input features has changed. Concept drift means the relationship between your features and the target label has changed. Both degrade model performance, but they require different responses. Data drift often means retraining on newer data. Concept drift may mean rethinking your feature set entirely.
Should a data scientist or a data engineer own data quality? Neither should own it alone. Data engineers own pipeline reliability and schema contracts. Data scientists own the quality requirements specific to the ML task. Accountability gaps between these two roles are where most data quality failures live. A shared SLA, reviewed regularly, is the practical fix.
When is synthetic data a legitimate option? Synthetic data is useful for two specific cases: augmenting rare classes that are genuinely under-represented in real data, and creating privacy-safe training sets when the real data carries PII or regulatory restrictions. It's not a substitute for real data in general. Models trained primarily on synthetic data tend to learn the synthetic distribution, which often diverges from production in subtle ways.
Have a project in mind? Contact Sodio Technologies to discuss your requirements and explore the right technology solution for your business.
/// Work with us
Talk to the engineers who'd build it
You'll get a technical scope, timeline and cost estimate from the people doing the work, not an account manager. In-house team, no subcontracting, since 2016.
