A warehouse is worth building when two people can produce two different revenue figures from two tools and both are defensible. It ends that argument by making one definition the only one.
Start from the questions
We write the questions first: which channel produced customers who stayed, what a cohort is worth by month six, where the funnel loses people. The model is built to answer those. A warehouse designed without them collects tables nobody queries.
Layers, so the logic has a home
Raw landing tables stay untouched. A staging layer cleans and types them. A modelling layer holds the business definitions — what counts as an active customer, when a subscription is churned — versioned in a repository and reviewed. Reporting reads only that layer, so a definition changes in one place.
Getting data in
Product events from the application, transactions from the database, spend and performance from the ad platforms, CRM state from HubSpot. Loaded on a schedule with freshness checks, because a dashboard quietly showing yesterday’s data is worse than one that is obviously broken.
Cost control
BigQuery bills for what a query scans, so partitioning, clustering and a habit of not selecting everything are the difference between a sensible bill and a memorable one. Scheduled queries are reviewed like code; a dashboard that refreshes every minute usually does not need to.
What it unlocks
Attribution that survives scrutiny, reporting the finance team recognises, and a feature store for machine learning work later. The analysis practice built on top of it is analytics and CRO.
Related: Google Cloud, GA4, server-side tracking.