Every Staff Analytics JD Lists dbt. Here's What It Actually Does — and Why It's the Trust Layer.
A field guide to the trust layer underneath every modern data stack — and why the job descriptions never explain it.
Most Fridays I track what moved this week. This one is different — a special issue on a single skill, because the same word keeps showing up in the job descriptions I read and almost none of them explain it. dbt. Every Staff and Principal Analytics Engineer req lists it. Half the Senior Analyst reqs do now too. The bullet usually reads “experience with dbt” and stops there, as if the name is self-explanatory.
It isn’t. So this week I want to do the thing the JDs don’t: explain what dbt actually is, why it’s valuable, and why it sits alongside Snowflake and Databricks rather than against them. I just spent a session wiring dbt models into one of my own case studies, so this is fresh — not theory.
What dbt actually is
dbt — data build tool — is the T in ELT. You extract and load raw data into your warehouse first; dbt is what transforms it once it’s there. It does that transformation in SQL, in place, on the warehouse’s own compute — it doesn’t move your data or run its own engine (dbt docs).
That last point is the one most people miss, so let me be blunt about it: dbt does not compete with Snowflake or Databricks. It sits on top of them. Snowflake and Databricks are where your data lives and where the SQL runs. dbt is the layer that turns a pile of raw tables into governed, tested, documented models — and then hands the compiled SQL down to the platform to execute. Databricks runs dbt directly on its Lakehouse compute; Snowflake made dbt selectable as a native version inside the platform and named dbt Labs its 2026 Data Integration Product Partner of the Year (Snowflake, Databricks). Industry analysts frame the three as complements, not rivals (Sacra).
The one-line version: the warehouse is the engine; dbt is the discipline. Its whole reason to exist is to let analysts apply software-engineering practice — version control, modularity, testing, code review — to SQL that used to live in a tangle of unversioned queries and dashboard formulas.
The four things it does better than anything else
1. Modularity that wires itself into a DAG. You don’t hardcode schema.table in dbt. You write {{ ref('stg_orders') }}, and dbt resolves the dependency, builds a directed graph of every model, and runs them in the right order. Change a staging model and everything downstream knows. This is the difference between “a folder of SQL scripts” and “a data platform” (dbt docs).
2. Testing as a first-class citizen. dbt tests are just SQL select statements that return the rows that break a rule — if the query returns zero rows, the test passes. Four generic tests ship out of the box: unique, not_null, accepted_values, and relationships. They run on every build, in CI, before anything reaches a dashboard (dbt docs). This is the part I find people underrate most: a null primary key or a negative revenue figure fails the build instead of quietly poisoning a board deck.
3. Lineage and documentation for free. Because dbt already knows the full dependency graph, it generates a visual lineage DAG and a documentation site automatically — every model, every column, every upstream source (dbt). When a VP asks “if I change this field, what breaks?”, you don’t guess. You read the graph.
4. Metrics defined once. The semantic layer (MetricFlow) lets you define a metric — revenue, active customer, LTV — exactly once, in version-controlled code, and serve that single definition to every BI tool and, increasingly, every AI agent that asks (dbt docs). This is the technical machinery behind the phrase every data leader says and few can back up: one source of truth, not twelve spreadsheets.
Where it shines — concretely
The pattern that earns its keep is layered modeling: raw sources → staging (light cleanup, renaming, typing) → intermediate (business logic, joins) → marts (the wide tables analysts actually query). Each layer is ref()-wired to the last, so logic is defined once and reused everywhere downstream instead of copy-pasted into fifteen dashboards.
Here’s the version I just shipped into my own portfolio. I had a cohort-LTV query written as raw warehouse SQL. Productionizing it in dbt took three moves, and each maps to one of the four strengths above:
- The raw
acima.leasestable reference became{{ ref('stg_acima__leases') }}— now the metric is defined once and every downstream model inherits it. - I added a
schema.ymlwithnot_nullon the cohort key and a range test on cumulative LTV — so a negative lifetime value fails CI before it ever renders. - For a second model, the charge-off guardrail that used to live in a
WHEREclause became anaccepted_rangetest oncharge_off_rate. The guardrail stopped being a footnote and became enforced governance: growth that breaches the loss band breaks the build.
That’s the whole pitch in miniature. The SQL logic didn’t change. What changed is that it’s now modular, tested, and governed — which is exactly the gap between “I can write SQL” and “I can be trusted to own the metric.”
The 2026 frontier — and an honest caveat
dbt is mid-rewrite. The Fusion engine is a ground-up reimplementation in Rust (built on the SDF technology dbt Labs acquired) that adds true SQL comprehension — it understands the SQL, not just templated text — for faster compiles and real-time error catching. As of mid-2026 the Fusion runtime was open-sourced as dbt Core v2.0 under Apache 2.0, and it’s selectable as a version inside Snowflake (dbt, Snowflake). On top of that, dbt Labs shipped dbt Agents — AI assistants reachable over an MCP server — and is positioning the governed Semantic Layer as the accuracy-critical interface between LLMs and your data: the agent doesn’t free-text SQL against raw tables, it queries through governed metric definitions (TechTarget, dbt).
Now the caveat, because it’s the senior move to name it: a lot of the eye-popping numbers here are vendor-run. dbt Labs’ benchmark showing the Semantic Layer crushing raw text-to-SQL on accuracy was conducted on eleven questions — directionally believable, statistically thin. And Fusion 2.0 / dbt Core v2.0 were still in preview/alpha for much of mid-2026. The direction — governance as the thing that makes AI-generated SQL trustworthy — is real and worth betting on. The specific percentages in the launch posts deserve a raised eyebrow, not a citation in your strategy deck.
What I’d do this week
Don’t read about dbt. Build the smallest possible real thing in it. The skill is muscle memory, not vocabulary, and a hiring manager can tell the difference in ninety seconds.
- The user moment: The next time a Staff or Senior AE JD lists "dbt" and you'd have to bluff it in the screen. Or the next time you say "one source of truth" in a meeting and can't point to where that truth is enforced.
- The shape: One tiny dbt project — two or three models, `ref()`-wired, with a `schema.yml` that actually tests something.
- The time budget: 90 minutes. `dbt init` against DuckDB or a free Snowflake trial. Take any query you already trust. Split it into a staging model and a mart model. Wire them with
ref(). Add anot_nulland anaccepted_valuestest. Rundbt buildand watch a test fail on purpose. - The artifact: A `schema.yml` with a test that catches a real failure mode from your own data — a null key, an out-of-range rate, a category that shouldn't exist. Not a tutorial's toy data. Yours.
- What success looks like: When the interviewer says "tell me how you'd make a metric trustworthy," you don't reach for adjectives. You describe the test that fails the build. That's the whole job, stated in one sentence.
The reason dbt is on every senior JD isn’t that SQL got hard. It’s that trust got expensive — and dbt is where trust is defined, tested, and version-controlled. The warehouse is the engine. dbt is the discipline. Learn the discipline.
Sources
- What is dbt? — Introduction — dbt Labs (primary)
- Data tests — dbt Labs (primary)
- About MetricFlow / the Semantic Layer — dbt Labs (primary)
- What is data lineage? — dbt Labs (primary)
- The dbt Fusion engine — dbt Labs (primary)
- Semantic Layer vs. text-to-SQL (2026) — dbt Labs (primary; benchmark N=11, vendor-run)
- dbt Fusion is now available on Snowflake — Snowflake (primary)
- dbt on Snowflake — partner page — Snowflake (primary)
- Simplified analytics engineering with Databricks and dbt Labs — Databricks (primary)
- dbt Labs targets costs with new data engine, adds AI agents — TechTarget (secondary)
- dbt Labs vs. Databricks vs. Snowflake — Sacra (secondary)
Crafting runs weekly. The job is to be useful, not to sell. If a line in here is close to a move you're working on, the email reaches a person.
Hiring rather than hunting? Signal is the column for your side of the desk.
← All Crafting issues · Drafted with Claude · Edited by Paul Brown