You can’t test what you haven’t looked at, and a small team hasn’t looked at most of its tables. That’s the case for doing observability first. It is cheap, it covers everything, and it tells you where to spend the expensive part, which is writing rules.
Two jobs, and each one is blind to the other
DataKitchen explains the split with a DevOps analogy: pets and cattle. Pets are the few tables you know by name. Cattle are the herd. You watch the herd for the cow that’s limping or missing, and you give the pets individual care.
| Data observability | Data quality testing | |
|---|---|---|
| Watches | Freshness, volume, schema, drift | Values against rules |
| Scope | Every table, as a herd | The few critical tables |
| Who writes the rules | Nobody: monitors learn from history | You, plus whoever knows the business |
| Catches | Late loads, short loads, double loads, dropped columns | Negative amounts, broken keys, impossible combinations |
| Misses | Wrong values in a table that arrived on time | A table that stopped loading on Tuesday |
| Setup | About an hour, per the Guide to DataOps Tests | Grows with every rule |
The bottom two rows are the point. A table can arrive on schedule at its usual row count with garbage in it. Another can pass every content rule because nothing new has landed since Tuesday. Process observability covers a third gap: the job that ran late, ran twice, or didn’t run.
The order that works for a small team
Week one: monitors on everything
Point table monitors at every schema you load. Freshness asks when the table last updated. Volume asks whether the right number of rows showed up: a table that normally grows by 1,000 rows and grows by 10 is a silent failure. Schema flags any added, dropped, or retyped column, with no prediction model needed. The Guide to DataOps Tests suggests letting a monitor learn a column’s shape over 90 days before you trust it, because a detector that hasn’t seen your weekends fires every Saturday.
Week two: pick your pets
Monitor results show which tables move, which are stale, and which break. Combine that with the obvious: the tables behind revenue, billing, and the report your VP reads. Keep the first list short enough that each table has a named owner.
Then: tests on the pets
Generate the structural tests from a profile (nulls, uniqueness, value ranges, patterns), then write the business rules by hand. DataKitchen’s coverage standard is two to three tests per table for freshness, volume, and schema, at least two per column, and one custom test per significant business metric.
Why generated tests alone aren’t enough
Generated tests learn what the data already looks like. In DataKitchen’s NYC taxi exercise, 62 generated tests all passed on a 300,000-row sample, because the minimum-fare test set its floor at negative $367, the lowest fare present. Seven business rules an AI wrote from the profile failed on that same sample, and again on the full month. A freshness and volume monitor alone would have passed that table too.
Neither one stops anything
Both layers find problems after the data has moved. To stop bad data, put a tripwire between two pipeline steps: a test task that exits with an error so the orchestrator never runs the next transform. Production keeps serving yesterday’s good data while somebody looks.
If you use DataOps TestGen, table monitoring sits in the same tool as profiling and test generation, so the first and third steps happen in one place. The order still holds. Monitors go everywhere. Rules go where they’ve earned it.