About
I like the unglamorous parts of data.
I'm David Mwandairo, a data engineer and data scientist. The work I enjoy most sits between where data arrives and where decisions come out: the ingestion that survives a flaky API, the deduplication that makes the grain honest, the tests that catch the drift before the dashboard does.
My portfolio reflects that. One project lands raw market JSON in an immutable bronze layer and walks it through dbt to point-in-time-correct marts. Another streams every OLTP change out of a microfinance core through Debezium and Kafka into ClickHouse, with Grafana watching each hop. A third takes a churn problem end to end: EDA, leakage-safe features, model selection, then a tested FastAPI service behind Docker.
I care about the parts reviewers ask about: idempotency, auditability, latency you can measure, and numbers you can trace to a query.
How I work
01
Raw data is sacred
Bronze layers land bytes as they arrived: append-only, partitioned by ingestion date. When a downstream bug surfaces, we reprocess instead of re-fetching rate-limited APIs.
02
The grain decides
Every model states its grain before it states its columns. Deduplicate with window functions against explicit business keys, and the warehouse stops arguing with itself.
03
Test the pipeline, not just the code
Unit tests on ingestion, dbt tests on models, freshness and quality gates in front of consumers. A green build that never checked the data isn't green.
04
Write the decision down
Trade-offs live in ADRs and READMEs: why bronze is immutable, why this join is point-in-time-correct, why logistic regression beat gradient boosting. Future readers deserve the reasoning, not just the result.
Toolbox
Languages
Warehouses & stores
Modeling & quality
Orchestration & streaming
ML & serving
BI & observability
Platform
The best proof is the work itself: start with the case studies, or email me.