A dbt project is production-ready when a steward can step away from it and nothing catches fire in their absence. This document is the checklist that makes that true.

1. Project hygiene

2. Environment isolation

{% macro generate_schema_name(custom_schema_name, node) -%}
  {%- if target.name == 'prod' -%}
    {{ custom_schema_name | default(target.schema, true) }}
  {%- else -%}
    {{ target.schema }}{% if custom_schema_name %}_{{ custom_schema_name }}{% endif %}
  {%- endif -%}
{%- endmacro %}

Danger

Before any prod deploy, confirm generate_schema_name is in place. Without it, a developer's dbt run can silently write to prod schemas named the same as their dev schemas. The fastest way to lose confidence in a data platform is to find out a developer's test data ended up in the executive dashboard.

3. Materialization choices are justified

4. Testing

Unit tests run in dev and CI. Never in prod. dbt Labs is explicit on this.

5. CI pipeline

See Slim CI guide for the canonical pipeline.

6. Prod deploy

# Trailing steps of the prod deploy
dbt build --target prod
aws s3 cp target/manifest.json              s3://dbt-artifacts/prod/manifest.json
aws s3 cp target/manifest.json              s3://dbt-artifacts/prod/archive/$(date -u +%FT%H%MZ)/manifest.json
aws s3 cp target/partial_parse.msgpack      s3://dbt-artifacts/prod/partial_parse.msgpack

7. Orchestration

See Orchestrate with Cosmos for the full configuration.

Warning

BashOperator("dbt run") is banned in Causeway production code. It gives you one Airflow task for an entire dbt DAG: no per-model retry, no lineage, no parallelism, no per-task log isolation. If a team cannot adopt Cosmos for compatibility reasons, get an exception on file before shipping.

8. Source freshness monitoring

9. Observability

10. Documentation and contracts

Note

"Documented" means in the yml file, not in a Notion page. dbt's docs regenerate on every run; Notion pages do not. When yml and Notion disagree, yml wins. The fastest way to keep docs honest is to make them part of the artifact pipeline.

11. Backfills and recovery

See Failure triage for the 5-minute incident procedure.

12. Security

13. Scale readiness

When the project crosses these thresholds, extra attention is warranted:

Model countAction
100Partial parse must be on (default since 1.4). Verify.
300--empty CI path for sub-minute PR feedback.
500Cosmos TestBehavior.BUILD or per-model task groups to keep DAG parse tractable.
800Dedicated manifest archival, retention policy, and a documented recovery procedure.
1500Split into multiple dbt projects, glued by exposures and manifest handoffs (see dbt-loom).

14. The promote-to-prod gate

Before a dbt project (or a new mart) is considered production-ready, a reviewer confirms each section above with a concrete artifact: a PR review note, a link to the CI run, a screenshot of the object-storage manifest, etc. The gate is the checklist; there is no other ceremony.

Deviations require an RFD and a dated waiver in the project's README. Waivers expire.

See also