See it as a diagram
Everything below, as a diagram you can edit. Describe yours and see it in seconds.
No account needed · Editable canvas, not a picture
Five bands, not five logos in a row
Loading: Fivetran, Airbyte, or a custom extractor writing into raw schemas, one schema per source, with the sync frequency on each edge. Warehouse: Snowflake, drawn as storage and compute separately for reasons covered below. Transformation: dbt models organised into layers. Orchestration: Dagster, Airflow, Prefect, or dbt Cloud jobs. Consumption: Looker, Tableau, Metabase, or Superset, plus reverse ETL if the marts feed operational tools.
Draw them as horizontal bands with the flow going down or right, and keep each tool inside exactly one band. The instinct to give the orchestrator a central box with arrows to everything produces a spider, and orchestration reads better as a band alongside the flow with dashed control edges.
Data quality belongs somewhere explicit. dbt tests run inside the transformation band; an observability tool such as Monte Carlo watches from the side. Drawing quality checks where they actually execute is the difference between a diagram that helps during an incident and one that does not.
The Snowflake thing every diagram gets wrong
A Snowflake warehouse is a compute cluster. It is not where the data lives. Data lives in databases and schemas; warehouses execute queries against them. Diagrams that draw one Snowflake box labelled warehouse collapse the two concepts that Snowflake spent its whole architecture separating.
Draw databases and schemas as the storage side, for example RAW, ANALYTICS, and a per-developer sandbox, and draw the virtual warehouses as compute nodes attached to workloads: one for loading, one for dbt transformation, one for BI. Put the size and the auto-suspend setting on each. Those two numbers explain most of the cost conversation, and they are invisible in the logos-in-a-row version.
Add the role hierarchy if the review is about access. A loader role writing to RAW, a transformer role owning ANALYTICS, and a reporter role with read on marts is three nodes that answer a long list of questions. Snowflake grants are hierarchical, so the picture is small.
dbt is a layer, not a box
A single dbt logo in the middle of an arrow says the team uses dbt and nothing else. The useful rendering is the model layers: sources, staging models named stg_, intermediate models named int_, and marts holding fct_ and dim_ models. Draw them as a stack inside the warehouse, because that is literally where they run, as SQL executed by Snowflake compute.
Materialisation matters on the diagram: views cost nothing to store and everything to query, incremental models carry a merge strategy and a lookback window, snapshots capture slowly changing dimensions. Put the materialisation on each layer, and the performance conversation stops being guesswork.
Do not attempt the model-by-model graph on an architecture diagram. Four hundred models is a lineage view, not an architecture, and it belongs in a column-level lineage picture rather than on the canvas that describes the platform. Exposures are the exception worth drawing: they name the dashboards that depend on specific marts, which is the coupling between the data team and everyone else.
That rule is a shipped default here rather than advice. When a repository is synced with an architecture focus, the file selector caps dbt model files at three while allowing sixteen infrastructure files, out of a total budget of forty files and 250KB. The reasoning is the same as the reasoning above: a hundred model files would win the budget on volume and starve the classes that actually describe the platform, and three models are enough to establish the naming convention and the materialisation style without pretending to be the graph.
Environments, and the icons for all of it
Development and production are usually separate databases or separate schemas with the same model code, and which one you chose changes how a reviewer reads every arrow. Draw the environment split once, at the warehouse level, and note whether CI builds run against a clone. Zero-copy clones are cheap and widely used, and a reader who does not know one exists will assume the CI story is worse than it is.
On icons, the 32-file data tool set covers dbt, Snowflake, Fivetran, Airbyte, Dagster, Airflow, Prefect, Looker, Tableau, Metabase, Superset, Segment, RudderStack, Monte Carlo, Spark, ClickHouse, Databricks and Elasticsearch, sitting next to 439 AWS, 624 Azure and 226 Google Cloud marks in a library of 2,098 files. A stack that mixes vendor tools with cloud services resolves in one pass instead of one download per logo.
Describe the stack and the canvas comes back with the bands, the model layers, and labelled edges. Export to PNG or JPEG for the stakeholder deck, or put a live embed in the analytics repository README so the picture updates with the canvas. For the version generated from the dbt project itself, see living diagrams from dbt.
FAQ
What belongs on a modern data stack diagram?
Should the diagram show every dbt model?
How do I draw Snowflake warehouses versus databases?
Do I need to show environments on the diagram?
How do I keep the stack diagram current as models change?