Automated validation is what turns data quality from a one-time fix into something that holds up over time. But "automate our data validation" isn't a single task, it's a handful of decisions that need to happen in order. Skipping straight to picking a tool is usually where this goes wrong.

1. Define what you're actually checking for

Before touching any tool, get specific about which checks matter for this dataset. Not every dimension applies everywhere. A reporting table might live or die on completeness and timeliness. A customer identity table lives or dies on uniqueness and consistency. Write down the actual checks in plain language first: which fields can never be null, what ranges are valid, which values must be unique, how fresh the data needs to be. This list is the real spec. The tool just executes it.

2. Decide where in the pipeline checks run

There are two natural points, and most mature setups use both:

  • At ingestion, before anything is stored. Catches bad data before it enters the system at all. Cheaper to fix here, but you're validating raw, often messy data, which makes the rules harder to write.
  • Post-transform, before it reaches consumers. Confirms the finished product is correct. The rules are easier to write against clean, modeled data, but by this point bad data may have already been stored somewhere upstream.

Ingestion checks catch problems earliest. Post-transform checks confirm what people actually see is right. Neither replaces the other.

3. Pick an approach that matches your team

This is where a tool decision actually belongs, after the checks are defined, not before. See my comparison of Great Expectations, Soda, Informatica and custom Python checks for how to choose based on your stack and team.

4. Decide what happens when a check fails

Not every failure should behave the same way. A hard fail blocks the pipeline entirely, which is right for anything financial, compliance-related, or where wrong data reaching people is worse than no data reaching them. A soft fail logs the issue and lets the pipeline continue, which is right for lower-stakes or exploratory data where a pipeline that never runs is worse than one that occasionally has a flagged issue. Deciding this dataset by dataset, rather than applying one policy everywhere, is what keeps automation from either being ignored or blocking things it shouldn't.

5. Route the failure to someone who will actually see it

A check that fails silently into a log file nobody reads is barely better than no check at all. Alerts need to land somewhere a human will see them soon enough to act, and they need an owner. This is where validation setup runs into governance: automation surfaces the problem, but a person still has to be accountable for responding to it.

6. Track results over time, not just pass or fail in the moment

A single pass or fail tells you about right now. A history of results tells you about a trend, a completeness rate that's been slowly dropping for three weeks, or a freshness check that's been getting closer to its threshold every day. That trend is usually the first real warning sign, and it's invisible if you're only looking at the latest run.

Automation is the mechanism. It's not the whole solution on its own. Checks that nobody owns and nobody watches degrade into noise, and eventually get ignored entirely, which puts you back where you started.

Setting up validation that actually gets watched and acted on, not just run, is the work I do.

See My Approach