Methodology
1. Source-first, schema-second
Every engagement starts with understanding where the data lives and how it moves. We map the source schema to a normalised relational model before writing a single query. This catches inconsistencies early — mismatched keys, implicit nulls, undocumented transforms — that would otherwise surface as "dashboard discrepancies" months later.
2. SQL as the interface
Not because SQL is fashionable (it's not), but because it's the only language every analytics tool understands. A clean SQL schema with documented views, indexed temporal columns, and validated foreign keys works with DuckDB, Polars, Tableau, Power BI, Python notebooks, and streaming pipelines equally well. No lock-in, no translation layer.
3. Benchmark before you build
Before choosing an engine or architecture, we run the data through a standardised benchmark — ingestion, aggregation, window functions, self-joins, multi-dimensional GROUP BY — across contenders. The PPR Engine Benchmark on this site is a public example. The right choice depends on data volume, update frequency, and who needs to query it.
4. Ship static, iterate fast
Dashboards and reports are delivered as static HTML with embedded charts. No server, no login, no SaaS renewal. Push to deploy, version-controlled in git, reproducible from source. If a number looks wrong, the query that produced it is in the same repository.