Traditional data warehouse (Inmon or Kimball): the classic approach using normalised data vault or dimensional star schemas. Suited to stable business processes where data models last for years and governance requirements are strict, such as financial reporting, annual accounts and regulatory data. Kimball, with fact and dimension tables, remains a strong choice for analytics-heavy workloads where speed and consistency outweigh flexibility. We build this on Postgres with Citus for on-premises deployments, or on a cloud warehouse such as Snowflake or Azure Synapse as data volumes grow.
Modern data stack (ELT and dbt): the standard of recent years. Raw data is loaded via Airbyte, Fivetran or Meltano into a cloud warehouse, transformations are built in dbt, orchestration runs through Airflow, Dagster or Prefect, and a BI layer sits on top. The ELT approach (extract, load, transform, rather than extract, transform, load) suits cloud warehouses that have the compute capacity to run transformations at query time. dbt has democratised the transformation layer: SQL with version control, tests, lineage and documentation as a by-product. For most mid-market organisations, this is the right starting architecture.
Lakehouse (Iceberg or Delta): the architecture that combines the best of a data lake and a data warehouse. It uses open file formats (Parquet) beneath a transactional table format layer (Apache Iceberg, Delta Lake, Apache Hudi) that delivers ACID guarantees without vendor lock-in. Suited to organisations with both structured and unstructured data that want several compute engines running on the same storage. Databricks delivers this with Delta Lake, Snowflake with Iceberg tables, or you can run your own open-source stack on S3 or GCS with Trino, Spark or DuckDB.
Data mesh (federated): for enterprise organisations with multiple business units or subsidiaries that want to keep managing their own data but need to collaborate across it. Each domain team owns its own data products, and a central team provides governance, the data catalogue and the federated query layer. It works well when the organisation is mature enough to carry decentralised ownership; for mid-sized companies it is usually overkill. We build mesh implementations on Snowflake Data Sharing, BigQuery Analytics Hub or a custom Trino layer.
Which route is right depends on your scale, use cases and organisational maturity. We deliberately don't always recommend the same thing, as one architecture for everyone is the wrong answer.