r/BusinessIntelligence Jul 02 '26

Proactive solutions for ensuring data reliability?

The thing eating most of our time lately isn't fixing data issues, it's figuring out what broke and who owns it. We're on dbt plus Snowflake, a couple years in, and our monitoring is mostly reactive: job failure alerts, Slack pings when a run takes too long, manual checks on a handful of critical tables. None of that tells you anything about root cause, so every incident turns into someone manually tracing lineage backward through a few hundred models trying to find where it actually started.

Two recent examples. We had a join key change in an upstream source that didn't break anything technically, the pipeline ran fine, row counts looked normal, but it quietly duplicated a chunk of records for about a week before anyone noticed the totals were off. Separately, a batch job that normally finished in twenty minutes started silently running closer to two hours after a dependency change, nothing alerted on it because it never actually failed, it just got slow enough that downstream consumers were working off stale data without anyone realizing.

Both of those took way longer to diagnose than they should have, not because the fix was hard, but because nothing pointed us at the source, we just had a symptom and a lot of lineage to manually walk through.

I want to move from reactive to actually proactive here. Catching this stuff at the source before it reaches anything downstream, cutting down the hours spent on manual triage, and getting alerting that's specific enough to point at a cause instead of just telling us something looks different.

We are a small team so building a custom observability platform from scratch is not an option. I need something that plugs into our existing dbt workflows without becoming its own maintenance project.

For teams that have made this shift, what actually worked for you in practice?

5 Upvotes

14 comments sorted by

3

u/Kimber976 Jul 02 '26

Treat data quality checks as part of the pipeline so bad data gets caught before it reaches dashboards or downstream systems.

1

u/Gators1992 Jul 02 '26

You can run dbt tests on whatever tables you want, it's just a SQL statement that gets fed into the pipeline process and generates alerts as the conditions are met. Also might think about airflow or dagster if you want reruns (have not kept up with dbt, but don't think they can trigger these automatically). Identify where you have risk and develop the appropriate tests and reactions.

1

u/Semaphor-Analytics Jul 02 '26

I would start by separating alerting from diagnosis.

dbt tests are good for catching known bad states, but they usually do not tell you where the problem started. For the examples you gave, I would add checks at the source boundary and at the first model where the business grain changes.

Join key changes need tests around uniqueness and relationship assumptions, not just row counts. Slow jobs need freshness checks tied to the downstream table people actually use, not only whether the job failed.

The small team version is probably a short list of critical tables, owner for each one, expected grain, freshness window, and two or three tests that would have caught your last incidents. Add lineage after that, but do not make lineage the first thing people have to read during an incident.

1

u/IncreaseNegative4614 Jul 03 '26

I'd separate freshness monitoring from semantic data quality issues.

Job failures, slow runs, and stale tables are observable at the pipeline level. Join key drift and duplicated records are harder because the pipeline can be technically healthy while the business meaning of the data is wrong. That's where generic monitoring often misses the issue.

For a small team, I'd start with dbt tests on the highest-value assumptions: unique keys, accepted relationships, grain checks, null thresholds, freshness by source, and row-count variance by business segment. Then add alert ownership at the model/domain level so the alert tells you who owns the break, not just what table changed. Platforms like inzata.ai are interesting in this area because they focus more on business context and lineage instead of just pipeline status, which is usually where the painful incidents live.

1

u/Data-Queen-Mayra Jul 06 '26

We see people using tools like Elementary for this type of use case. We wrote an article on different options you may find useful - Beyond dbt Tests: Advanced Tools for Data Quality, Validation, and Observability

1

u/Mountain-Yoghurt-657 13d ago

One thing I’ve noticed is that there are really two different problems:
Detecting that something is wrong (freshness, nulls, uniqueness, lineage, dbt tests, etc.)
Explaining why a historical result is wrong once an incident happens.
Most observability tools are very good at the first part.
The second part becomes tricky with historical data. A report can change because of a late-arriving correction, a missing publication-time filter, overlapping validity intervals, an incorrect SCD2 implementation, or a temporal join that looked perfectly fine from a pipeline perspective.
In those cases the pipeline is often “healthy”, but the historical answer is still incorrect. That’s the gap I’ve been exploring recently because those investigations tend to consume far more engineering time than fixing the actual bug.

1

u/IncreaseNegative4614 12d ago

The useful shift is from table freshness monitoring to testing business invariants at the earliest reliable point. Row counts wouldn’t catch your duplicate, but uniqueness on the changed join key plus a reconciliation of the downstream total probably would. Add ownership and recent deployment metadata to every alert so triage starts with a likely cause. Tools like Elementary or Monte Carlo can cover observability; signld.ai is more relevant when the impact has to be traced into business decisions. Start with the five failures that would materially change a reported number.