Skip to main content
Data Engineering

Your data is not ready, and that is normal

Every company we talk to opens with an apology about its data. The apology is universal, which means it carries no information. Readiness is not a property a dataset has or lacks — it is a relationship between the data you have and the specific question you are asking, and the fastest route to a working system is usually to change the question rather than the data.

An interested party's view Precision Federal is a firm that gets paid to do data work, so treat any recommendation here that involves hiring someone with the appropriate suspicion. The main argument of this article runs against our short-term interest: most companies should scope smaller and clean less than they are being told to, and the large data-quality program is usually the wrong purchase.

Readiness is a relationship, not a property

There is no such thing as clean data in the abstract. There is only data that does or does not support a particular question at a particular tolerance. The same customer table is perfectly adequate for “how many accounts churned last quarter” and hopelessly inadequate for “which accounts will churn next quarter,” because the second question needs a stable identity, a consistent definition of churn over time, and the events that preceded it — none of which the first question cares about at all.

This matters because it changes what to do about it. If readiness were a property, the sensible response would be a program: fix the data, then start the projects. Because readiness is a relationship, the sensible response is to name the question, check the six conditions below against that question, and repair only what that question requires. The first approach takes eighteen months and frequently ends without a single shipped system. The second takes two weeks and ends with a decision.

It is also worth saying plainly that the state of your data is not evidence of mismanagement. Operational systems are built to run a business, not to be analyzed. Fields get repurposed because a release was due. A company gets acquired and inherits a second version of every entity. Someone adds a dropdown option in 2023 and the meaning of a column quietly changes underneath four years of history. Every company that has been operating for a decade has all of this. The ones that appear not to have it have simply not looked yet.

You are probably here because

  • A vendor told you the data needs to be fixed before anything can start
  • Two reports disagree and nobody can say which is right
  • You are being asked to fund a multi-year data program with no shipped output
  • A project stalled at the point where somebody had to actually pull the data

The six conditions are the diagnostic. The section on fixing in the path rather than in the warehouse is the one that saves the most money.

Six conditions, checked against one question

Write down the question you want answered, precisely enough that two people would compute it the same way. Then check these six. Every genuinely blocked project we have seen was blocked on one of them, and most projects that people believe are blocked turn out to satisfy all six for a slightly narrower version of the question.

Existence. Is the thing you need actually recorded anywhere? Not “could it be derived” — recorded. The single most common hard stop is that the outcome the business wants to predict was never written down: the reason a deal was lost, whether the technician's fix worked, which alert was a false alarm. No amount of engineering conjures a field nobody ever filled in.

Coverage. Does it exist for enough of the population, and for the part of the population you care about? Data present on 95 percent of small accounts and 40 percent of large ones is not 88 percent coverage in any useful sense if the large accounts are the point.

Identity. Can you tell that this record and that record are the same customer, part, property, or patient? This is the defect that most often masquerades as everything else, and it is the most expensive one to fix late because every downstream number depends on it.

Timeliness. How old is the data when it arrives, and is that inside the window the decision operates in? A nightly batch is fine for weekly planning and useless for a decision made at the counter.

Ground truth. For anything that learns or is evaluated, is there a recorded correct answer, and is it recorded consistently? A label that three different teams filled in with three different meanings is a moving target rather than a target.

Access. Can the people doing the work legally and practically get the data, on a path that will still exist in production? A one-off extract emailed by a friendly analyst is not an access path; it is a favor that will not scale and cannot be automated.

What “bad data” usually turns out to be

When we open a dataset that a company has apologized for, the same handful of defects come up. They have very different costs to fix and very different consequences if ignored, and it is worth being able to name them because “the data is messy” hides all of it.

No stable identity. The same company appears as four rows with four spellings, or a person exists once per system with no shared key. This is entity resolution, it is a real engineering problem, and it is usually the largest single line in a data project. It is also solvable to a useful standard in weeks rather than years, if you accept a match rate rather than perfection.

Meaning drift. A field means one thing before a certain date and another thing after, and nothing marks the boundary. Status codes get reused. A product is renamed. A team changes what counts as “active” and nobody updates the six-year-old report that uses it. Any analysis that spans the boundary is wrong in a way that looks completely plausible.

The real information is in the free-text field. The structured column says “Other” on 40 percent of records and the note field says what actually happened. This is annoying and it is also good news, because reading unstructured text is one of the things current tools genuinely do well.

Missingness that is not random. Fields are blank precisely when the situation was unusual, or when a particular team was busy, or for one region. Filling those blanks with an average bakes the bias in and hides it. Missingness is data; the fact that a field is empty is often the most informative thing on the row.

Duplicates from process, not error. Three rows because the order was amended twice. Two records because a system retried. These are not mistakes to be deleted, they are events to be understood, and deleting them silently changes the totals that finance already reconciled.

The system of record is not where the truth is. The official system says one thing and the team runs off a spreadsheet that a supervisor maintains, because the official system cannot express something the work requires. That spreadsheet is a specification. Find it before designing anything.

SymptomWhat it usually isCheapest honest fix
Two reports disagreeTwo definitions of the same word, both defensibleWrite down one definition, name an owner, keep both numbers visible until people trust the new one
Customer counts look inflatedNo stable identity across systemsMatch on a scored rule set, publish the match rate, review the uncertain band by hand
History looks strange before a dateMeaning drift, unlabelledFind the boundary, record it, restrict the analysis window or map the old values explicitly
Half the category field says “Other”The real information is in the notesExtract structure from the text for the specific fields you need, not all of them
The model does well in testing and badly liveThe test data was cleaned by hand in a way production data is notRe-run the evaluation on data pulled through the production path, unedited
Nobody can produce the extract twiceThe pipeline is a personWrite the query down, put it in version control, schedule it

Fix in the path, not in the warehouse

The instinct when data is wrong is to go and correct it at the source, across the whole history, for everyone. Occasionally that is right. Usually it is a much larger project than the one you were trying to do, it requires agreement from every team that touches the system, and it competes with the roadmap of an operational system that is busy running the business.

The alternative is to put the corrections in the path from source to use: a defined transformation layer, in version control, that maps the messy reality to the clean model the work needs, with the rules written as code rather than performed by an analyst each month. This has three advantages that matter more than they sound. The rules become visible and arguable rather than living in somebody's head. The raw data stays raw, so a rule that turns out to be wrong can be changed and the history reprocessed. And the work can start next week.

Clean data at the point of use is worth almost as much as clean data at the source, costs a fraction as much, and does not require the cooperation of every team in the company.

Two rules keep this from turning into a mess of its own. Never overwrite the source values — keep the original alongside the corrected one, so the correction can be audited and reversed. And test the assumptions in the pipeline rather than assuming them: if a rule depends on that field never being null, assert it, so the day it changes you find out from a failed check instead of from a customer.

Where fixing at the source is genuinely worth it is at the point of entry, for a small number of fields, going forward. Making one dropdown required and unambiguous today is worth more than reconstructing five years of what it should have said, and it is a change an operational team will usually agree to because it is small.

How much each defect actually blocks work — our read

The outcome was never recorded at all
97
No lawful or practical access path
92
No stable identity across systems
74
Unlabelled meaning drift in history
61
Non-random missingness
48
Messy free text and inconsistent formats
19

Our judgment, not a survey. The bottom row is what people apologize for; the top two are what actually ends projects.

The two-week assessment that replaces the two-year program

Before committing to any large data investment, run a short, bounded look at the actual tables against the actual question. Two weeks, one or two engineers, and access to the real systems. It ends with a document rather than a pipeline, and it is the cheapest decision-quality information available in this field.

What it produces: a written statement of the question and its tolerance. A profile of the relevant tables — row counts, fill rates by field, distinct values, date ranges, and where the shapes change over time. A measured identity match rate between the systems that need joining. A list of the definition conflicts found, with the people who own each side. A working end-to-end extract of a small sample, pulled through a path that could be automated. And a verdict on each of the six conditions, with the specific work each one would need.

Cost is typically $20,000 to $60,000 of outside work, or two weeks of an internal engineer if you have one who can be freed. Set against a data platform program with a budget in the hundreds of thousands, it is close to free, and it routinely finds either that the project can start immediately on a narrower question or that one specific blocker has to be solved first. Both answers are worth having before the platform is bought.

What is genuinely a stop

Four findings mean the project as posed does not work, and the honest thing is to say so early rather than to bill through the discovery.

The outcome does not exist. You want to predict something nobody recorded. The only route forward is to start recording it, which means the project is a process change first and a system in twelve to eighteen months. That is a legitimate plan; it is just not the plan that was funded.

There is no lawful or practical access path. Consent does not cover the use, a contract forbids it, or the data lives in a system whose owner will not integrate. This is a negotiation, not an engineering task, and no amount of technical cleverness resolves it.

The volume is too small for what is being asked. Forty examples of the rare event you want to detect will not support a learned model, no matter how the question is framed. Sometimes the right answer is a rules system that encodes what your experts already know, shipped in six weeks, which is not what anyone hoped to hear and is frequently the correct move.

The definition is contested and nobody will decide. If two departments hold incompatible definitions of the central word in the question, and no executive will choose between them, the technical work cannot land. Every number produced will be wrong in one of the two frames, and the project will die in review rather than in engineering.

The mistakes we see most

  • Funding a full cleanup before naming a question, so completeness has no definition and the program has no end
  • Cleaning the extract by hand and evaluating on data the production system will never see
  • Overwriting source values, so nobody can audit or reverse a correction
  • Deleting duplicates that were events, and quietly changing reconciled totals
  • Imputing missing values that were missing for a reason, and hiding the reason
  • Ignoring the shadow spreadsheet where the actual process lives
  • Buying a platform before profiling the tables it is supposed to hold
  • Treating identity matching as a preprocessing step rather than the largest task in the project

When you do not need us

Three situations where the right answer is to do it yourself, and we would tell you so.

If the question can be answered from one system with a query, write the query. A surprising share of requests that arrive framed as data projects are one join and a filter away from being answered by an analyst in an afternoon, and hiring an outside firm to do that is an expensive way to get an afternoon.

If the problem is that two departments disagree about a definition, that is a management decision and it costs nothing but a meeting and a memo. Bringing in engineers to arbitrate a definition produces a technically elegant version of an unresolved argument.

If you have a competent analyst and the main obstacle is that nobody has given them a week of uninterrupted time and access, give them the week. That experiment costs one week and it frequently ends the conversation about hiring anyone, which is a good outcome for you and an honest one for us to recommend.

Before you fund a data program

  • The question is written down precisely enough for two people to compute it the same way
  • The tolerance is stated: how wrong can the answer be and still be useful
  • All six conditions have been checked against that question, on the real tables
  • The identity match rate between systems has been measured, not assumed
  • An access path exists that could run in production, not a favor from an analyst
  • Corrections are planned for the path, with raw values preserved alongside
  • The shadow spreadsheets have been found and read
  • Someone with authority has settled any contested definition, in writing
  • The first shipped output is weeks away, not quarters

Bottom line

Your data is not ready for every question, which puts you in the company of every organization we have ever worked with. It is very likely ready for a narrower version of the question you asked, and finding that version is a two-week exercise rather than a two-year program. Check existence, coverage, identity, timeliness, ground truth and access against one precisely stated question. Fix what that question needs, in the path rather than in the source, keeping the raw values. Ship something small, watch what breaks, and let the real failures tell you where the next cleanup should go. The companies that get value out of their data are not the ones with clean data. They are the ones that shipped something narrow early enough to learn which mess actually mattered.

Frequently asked questions

Should we build a data warehouse before starting AI work?

Usually not first, and not for one project. A warehouse is the right investment when several teams need consistent access to the same definitions repeatedly. For a single question, a defined extract and a version-controlled transformation layer gets you an answer in weeks and tells you what the warehouse should actually contain. Building the warehouse first commonly produces a well-modeled home for data that nobody has yet proved they need.

How clean does data need to be for machine learning?

Less clean than most people expect on formatting and inconsistency, and far more consistent than most people expect on labels and identity. Models tolerate noisy inputs reasonably well. They do not tolerate a target variable that means different things in different years, or a training set where the same entity appears as three different entities. Spend the cleanup budget on identity and on the definition of the thing being predicted.

Can we start with a sample instead of everything?

Yes, and you should, with one condition: the sample must come through the same path the production system will use, unedited. A hand-curated sample answers a question about a dataset that will never exist again. A random sample pulled through the real path, including the malformed records, tells you what you are actually going to face.

Two reports disagree. Where do we start?

Almost always with definitions rather than with engineering. Take one specific number, have each side write down exactly how they compute it, and compare. In our experience the great majority of these disputes resolve to two defensible definitions of a word like “active” or “booked” rather than to a broken pipeline. Pick one, name an owner, and keep both numbers visible for a while so people can see the bridge between them.

What does a data readiness assessment cost?

Typically $20,000 to $60,000 for two weeks of outside work, or two weeks of an internal engineer's time if you can free one. It should end with a written verdict on each of the six conditions, a measured identity match rate, a profile of the relevant tables, and a working extract pulled through an automatable path. If a proposed assessment does not produce those, it is a discovery meeting with a longer invoice.

1 business day response

Not sure whether your data supports the question?

Send the question and a description of the systems involved and we will tell you plainly which of the six conditions look risky — including when a query you already have would answer it. Email bo@precisionfederal.com.

Email an engineerCapabilitiesMore insights →
Data ReadinessEntity ResolutionDefinitionsPipelines