Before dbt, my SQL transformations lived in scattered scripts — Airflow tasks, stored procedures, notebooks. There was no version control, no lineage, and certainly no tests. If a column rename broke something downstream, I’d find out days later when someone complained their dashboard looked wrong.
dbt introduced a concept that was missing from my workflow: treat your transformations like software. Models are just SQL files, versioned in Git, reviewed in pull requests. When I rename a column, I can see every downstream model that references it before I merge. That alone would be worth the adoption.
But the real value is the layered architecture. I organize models into staging, intermediate, and mart layers. Staging cleans and renames source data — nothing clever, just consistent. Intermediate joins and aggregates. Marts expose business-level entities that analysts can trust. Each layer has a clear purpose, and the dependency graph makes it obvious which models feed which.
Tests are another game-changer. I define expectations — not_null, unique, accepted_values, relationships — and dbt runs them after every build. When a source field starts shipping nulls, I know immediately instead of discovering it through a broken report. Custom tests handle more complex rules: revenue should never be negative, a customer should only appear in one segment, dates should be in chronological order.
Documentation lives alongside the code. Every model can have a description, every column a comment. dbt generates a documentation site from the project, so analysts can search for a table and understand what it contains, where it comes from, and how it’s built — without asking me.
The biggest shift hasn’t been technical. It’s cultural. dbt made data work collaborative in a way it wasn’t before. Analysts can propose model changes. Engineers can review them. Everyone speaks the same language — SQL — and the project structure makes it hard to create chaos.
If you’re writing transformations outside of dbt, you’re solving problems that dbt already solved.