I work at the layer between operational databases and the decisions people make from them: data models, correctness of the numbers, and the reporting surface on top.
Most of my work happens in production systems that track medicine stock, orders, and cold chain across national distribution networks. The chart is usually the easy part. The work is making sure the number underneath it survives contact with the schema.
- Data modeling over transactional schemas that were never meant for analytics: legacy relational systems, their modern successors, and the migration window where both run at once
- Cross-database integration through foreign data wrappers, including the pushdown and type-mapping problems that come with them
- Correctness work on existing reporting: grain, cardinality, join semantics, and silent row loss. A join on the wrong key raises no error and returns no empty result. It returns a plausible wrong number, which is the failure mode I spend most of my time engineering against
- Query performance on wide operational tables: predicate placement, early aggregation, and index decisions backed by execution plans rather than intuition
- Reporting surfaces in Grafana: variables, cascading filters, geospatial and time-series panels
The unit and meaning of a field come from the source code, not from the column name or the panel label. A DDL proves type and key. A probe proves one environment. The source proves intent across all of them.
Every new join gets measured before it ships: row count before and after, null foreign keys, and coverage of the left side. Inflation and masking are different failures and need separate tests.
Reconciliation against a known number is part of delivery.
When an assumption cannot be verified, it goes back as a question instead of a guess.
Most of what I build lives in client-owned private repositories, so this profile shows activity rather than code.