Connecting the dots between dbt, BigQuery and Terraform
I recently completed a technical take-home assignment that required me to build a small data platform using Terraform, BigQuery, dbt Core and GitHub Actions.
I had already encountered most of these tools separately. The assignment forced me to understand how they work together as one system.
Terraform defined the infrastructure and permissions.
BigQuery stored the data.
dbt transformed it into tested analytical models.
GitHub Actions checked that everything still worked when the project changed.
The part that taught me the most was IAM.
Creating a service account is easy. Understanding which permissions it needs, where those permissions should be assigned and how dbt or a CI pipeline authenticates with it is where the architecture starts becoming real.
I also gained a clearer understanding of the separation between staging models and data marts.
They are not merely different folders containing SQL.
Staging models prepare and standardize source-oriented data, while marts expose business-oriented models intended for analysis and reporting.
I am not claiming to have mastered the entire stack after one assignment. But dbt, BigQuery and Terraform now feel connected rather than theoretical.
I am preparing a longer article covering:
- The architecture I implemented
- The Terraform resources
- BigQuery datasets and IAM permissions
- The dbt project structure
- Staging and data-mart models
- Data tests
- GitHub Actions
- The mistakes I made
- A reusable playbook for future data-engineering assignments
Sometimes the best way to understand a data platform is to be asked to build a small one from nothing.

See alsoMy First End-to-End Data Engineering Take-Home Challenge·Working Is Not the Same as Understanding During a technical interview