◢ CASE · 2023 — 2025
DIM9000 the whole analytics stack
14mo
Solo build
9×
Faster reporting
0
Spreadsheets shipped
The brief
A 28-person SaaS had grown past the point where founder-led dashboards in spreadsheets could keep up. Decisions were lagging, the same number meant three different things across teams, and ops were finding out about outages from support tickets instead of monitoring.
I was hired to build the analytics function end-to-end and own it solo.
What I built
- Ingestion. Postgres → BigQuery via incremental Airbyte syncs. Latency budget: < 5 minutes for operational data.
- Modeling. A Star Schema in dbt, with a small set of conformed dimensions — customer, plan, period — and clearly-named fact tables. No surrogate-key magic.
- Serving. Looker explores for operations, finance, and product. Every metric in one place, one definition.
- Alerting. Per-metric anomaly detection in Python (rolling Z-score with quiet hours and on-call routing), posting to Slack. False-positive rate kept under 5 % by design.
What changed
- Reporting cycle compressed from days to minutes for the leadership weekly.
- Three “single source of truth” debates closed with a documented model spec.
- First two months of alerting caught two real revenue bugs that had been silently costing money in a billing edge case.
What I’d do differently
The first warehouse modeling pass was too clever — too many surrogate keys and “smart” coalesces. Round two was deliberately dumber and easier to read. The second version is still in production.
Full stack
- Postgres
- BigQuery
- dbt
- Looker
- Slack
- Python