Written by
Halkwinds Editorial Team
Halkwinds Research & Editorial

Building a Business Intelligence Platform from Scratch
How to select and assemble a BI stack that scales from ten to ten thousand users — data model design, semantic layer, and governance.
Every data engineer who has been handed the mandate to "build a BI platform" knows the trap. You start by picking a dashboarding tool, wire it directly to your production database, and six months later you're drowning in duplicate metric definitions, mystery queries slowing down your primary Postgres instance, and a Slack channel full of "why does revenue say something different here?" A business intelligence platform is not a tool — it's an architecture of data models, a semantic layer, governance rules, and delivery surfaces that must survive growth from ten curious analysts to ten thousand daily active users. This article walks through how to select and assemble that stack deliberately, from data modeling decisions to the tradeoffs between Looker, Metabase, Redash, and Superset.
- Background / Why This Matters
- Core Concepts and Architecture
- Implementation Strategy
- Scaling and Operational Considerations
- Common Mistakes / What to Avoid
- Frequently Asked Questions
- Conclusion
Background / Why This Matters
The cost of a badly assembled BI platform is rarely visible on day one. It shows up later as metric drift — when the finance team, the growth team, and the executive dashboard all report different numbers for the same concept — and as query sprawl, where thousands of ad hoc SQL statements hammer your warehouse with no lineage or reuse. Research and industry surveys consistently suggest that organizations spend far more time reconciling numbers than analyzing them, and the root cause is almost always missing structure between the raw data and the charts.
For a data engineer, the stakes are specific. You own the correctness contract. When a VP looks at a dashboard, they are implicitly trusting your pipeline, your joins, your timezone handling, and your definition of "active user." A BI platform built as a coherent system — rather than a pile of dashboards — lets you enforce that contract in one place instead of relitigating it in every report.
Takeaway: Treat BI as an engineering discipline with versioned definitions and testable models, not as a tool procurement exercise. The tool is the last decision, not the first.
Core Concepts and Architecture
A modern business intelligence platform separates cleanly into layers. Each layer has a single responsibility, and the boundaries between them are where scale and governance live.
1. The storage and compute layer
This is your cloud data warehouse — Snowflake, BigQuery, Redshift, or a lakehouse like Databricks. The critical rule: BI tools query the warehouse, never your production OLTP database. Ingesting data via a tool like Fivetran, Airbyte, or a custom pipeline into a dedicated analytics warehouse decouples reporting load from application performance.
2. The transformation layer
Raw ingested tables are messy. A transformation framework — dbt is the de facto standard — turns raw tables into clean, tested, documented models. This is where you implement the medallion pattern: bronze (raw), silver (cleaned and conformed), gold (business-ready marts). dbt gives you version control, unit tests on your data, and lineage graphs.
3. The semantic layer
This is the single most under-invested layer and the one that determines whether your numbers ever agree. The semantic layer is where a metric like weekly_active_users or net_revenue is defined once and consumed everywhere. Looker pioneered this with LookML; dbt now ships the dbt Semantic Layer (formerly MetricFlow); Cube is a dedicated open-source option. Superset offers a lighter-weight metric layer inside datasets.
4. The delivery / consumption layer
This is where the tool choice actually matters — dashboards, self-serve exploration, alerts, and embedded analytics. Here's how the four commonly evaluated open-source and commercial options compare:
| Tool | Model | Semantic layer | Best fit | Watch out for |
|---|---|---|---|---|
| Looker | Commercial (Google Cloud) | Strong — LookML, governed by design | Enterprises needing centralized, version-controlled metrics | Cost; LookML learning curve; per-user pricing at scale |
| Metabase | Open-source + paid cloud | Basic (models, metrics) | Startups and SMBs wanting fast self-serve for non-technical users | Governance features maturing; heavy dashboards can strain it |
| Superset | Open-source (Apache) | Moderate (datasets, metrics) | Data teams wanting full control and rich visualizations, no license cost | Operational overhead; you own upgrades, auth, scaling |
| Redash | Open-source | Minimal — SQL-first | SQL-fluent teams needing query sharing and simple dashboards | Not a self-serve tool for business users; lighter roadmap |
Takeaway: Choose your consumption tool after deciding where your semantic layer lives. If governance is paramount and budget allows, Looker's built-in semantic layer is compelling. If you want open-source and are building your own semantic layer with dbt or Cube, Superset or Metabase both pair well.
Implementation Strategy
Assembling the stack in the right order prevents rework. Here is a phased approach that works for teams starting near zero.
- Stand up the warehouse and ingestion first. Pick one warehouse and get three to five core source systems flowing in reliably before touching a single dashboard. Reliability of ingestion is the foundation; everything downstream inherits its problems.
- Build a modeling foundation in dbt. Start with staging models (one per source table, lightly cleaned) and a handful of marts (e.g.,
fct_orders,dim_customers). Add dbt tests for uniqueness, not-null, and referential integrity from day one. This is your correctness contract in code. - Define your first ten metrics in the semantic layer. Resist the urge to define hundreds. Get consensus from stakeholders on the exact definition of revenue, active users, churn, and a few others. Document them in the semantic layer so every tool reads the same definition.
- Deploy the consumption tool against the semantic/gold layer only. Connect Metabase, Superset, or Looker to your modeled tables, never to raw or staging. Build a small set of certified dashboards.
- Establish access control and a certification process. Distinguish "certified" dashboards (reviewed, trusted) from "exploratory" ones. Users need to know which numbers to trust.
This is exactly the kind of end-to-end assembly the Halkwinds Data & Analytics team builds for clients who need a platform stood up in weeks rather than quarters — pairing warehouse design with a governed semantic layer so the metrics are right before the first dashboard ships.
Takeaway: Ship a narrow, correct platform first — five sources, ten metrics, a handful of certified dashboards — then expand. Breadth without governance is technical debt.
Scaling and Operational Considerations
Scaling from ten to ten thousand users is less about the number of dashboards and more about concurrency, cost, and trust. Each dimension needs a deliberate plan.
Query concurrency and caching
At ten users, every query can hit the warehouse live. At ten thousand, that's financially and technically unsustainable. Introduce caching layers: Superset and Metabase both support result caching; Looker has its persistent derived tables and aggregate awareness. A dedicated caching engine like Cube can serve pre-aggregated results with sub-second latency, dramatically cutting warehouse spend.
Cost governance
Warehouse bills scale with query volume, and self-serve BI is a query volume machine. Set up query monitoring, warehouse auto-suspend, and cost attribution by team. Materialize expensive, frequently-used models as tables in dbt rather than views so users hit precomputed results.
Row- and column-level security
As user counts grow, so do access requirements. A sales rep should see only their accounts; a regional manager only their region. Implement this in the semantic layer where possible (Looker's access filters, or attribute-based rules) rather than duplicating filtered dashboards, which is unmaintainable at scale.
Reliability and observability
Broken dashboards erode trust faster than slow ones. Add data freshness monitoring (dbt source freshness, or tools like Monte Carlo / Elementary), alert on failed pipeline runs, and expose "last updated" timestamps on every dashboard so users can self-diagnose staleness.
Takeaway: Budget for caching, cost controls, and row-level security before you hit them as fires. The transition from hundreds to thousands of users is where unplanned platforms collapse.
Common Mistakes / What to Avoid
- Connecting BI tools directly to production databases. This is the most common early mistake. A single heavy dashboard query can degrade your application. Always route through a dedicated warehouse.
- Skipping the semantic layer. Defining metrics inside individual dashboards guarantees drift. If "revenue" is calculated in twelve different SQL queries, you will eventually have twelve different revenue numbers.
- Letting everyone build "certified" content. Without a distinction between trusted and exploratory dashboards, users lose faith in all of them. Governance is a trust feature, not bureaucracy.
- Over-modeling too early. Building a thousand dbt models before anyone uses a dashboard wastes months. Model to demand — build the marts your first dashboards need, then expand.
- Choosing the tool first. Teams that fall in love with a dashboarding UI before designing their data model end up retrofitting the model to the tool. Do it the other way around.
- Ignoring the human process. A BI platform without a data literacy effort — documentation, definitions, a data catalog — will be underused regardless of how good the engineering is.
Takeaway: Most BI failures are architectural and organizational, not technical limitations of any specific tool. Get the layering and governance right and the tool choice becomes forgiving.
Frequently Asked Questions
Should we build our own semantic layer or use one built into a tool like Looker?
It depends on how many consumption tools you need. If
Explore Further