A Series A SaaS operations company had 8 data sources and zero trust in their dashboards. Their ops team was rebuilding the weekly report manually every Monday — 5 hours, copy-pasted from six different tools. Leadership was making headcount and budget decisions on data that was 48 hours stale.
The real issue wasn't bad dashboards. It was no real-time data layer underneath them.
What I built — and why each decision matters
Real-time CDC pipeline: Debezium captures every database change event at the transaction log level — zero polling overhead, zero missed events. This is the architecture pattern Stripe and Monzo run at scale, right-sized for a Series A company.
Kafka as the event backbone: Every database change streams to Snowflake in under 90 seconds. No nightly batch jobs. No stale data. No silent failures at 3am.
Medallion Architecture in Snowflake: Bronze (raw events, immutable) → Silver (validated, deduplicated) → Gold (business-ready KPIs, tested with dbt). Every dashboard reads from Gold only. One number. Everywhere.
dbt transformation layer: All business logic version-controlled in GitHub. Every KPI has a test. The ops team can add new metrics without touching pipeline code — no dependency on me.
Airflow orchestration: Full retry logic, schema validation at ingestion, Slack alerting on every failure. Nothing breaks silently.
Timeline: 14 days. Architecture diagram delivered on Day 2 before a line of code was written.
Results
→ Real-time dashboard latency: under 90 seconds (was 48 hours)
→ Monday manual report: eliminated — fully automated
→ Silent pipeline failures per week: 0 (was 3–4)
→ New data source onboarding: 2 hours (was 3+ days)
→ Client on monthly retainer since go-live — infrastructure has never missed a run
Their words
"We were flying blind on operations. Now I open the dashboard before my first coffee and the data is already there, already right. The ops team stopped talking about 'the data problem' — because it stopped being a problem."