Warehouse and dbt models
Snowflake, BigQuery, or Postgres, modelled in dbt. Every transformation has tests. Every model has docs and a named owner.
Warehouses, pipelines, and the forecasting, scoring, and recommendation models built on them. Tested, versioned, monitored for drift, and owned by your team.
Data first, models second
Models are only as good as the tables under them. We build the warehouse layer first, then the models that read from it.
Snowflake, BigQuery, or Postgres, modelled in dbt. Every transformation has tests. Every model has docs and a named owner.
Producers publish a schema contract. A breaking change fails their CI, before it breaks a dashboard.
Dagster or Airflow schedules with retries, backfills, and partitions. A rerun is one command, not a war room.
Freshness, volume, and null-rate checks on the tables people decide from. Alerts go to the table's owner, with lineage attached.
Demand forecasts, churn and fraud scores, and product recommendations. Trained on the warehouse you already trust. Served in batch or in real time, and measured against the baseline you use today.
Experiments tracked in MLflow. Champion–challenger promotion, shadow mode, and drift alerts on every model.
Data contracts
Most broken dashboards start with a column someone changed in the app database. We put a contract between the teams that produce data and the warehouse that reads it. A change that would break a downstream model fails the producer's CI, with the affected models listed.
Models in production
A model is only as good as last month's data. Customers change, inputs shift, and accuracy decays quietly. We monitor feature and prediction drift on every model we ship, with thresholds agreed with the business before launch.
Every model
Ships with tests, docs, and a named owner
Pre-merge
Contract checks block breaking schema changes
Shadow
New model versions run in shadow before promotion
Day 1
Code in your repo, data in your warehouse
The contract check failed the app team's pull request before the column rename merged. Finance never saw a broken number.
Questions
Ready when you are
A 30-minute call. We'll trace it back to its source with you and say what we'd fix first.