I design data platforms, and the agentic systems that run on them.
Nine years on systems that have to keep working: terabyte-scale ingestion, the databases underneath, and agents that write into governed stores, not a chat window.
Ingestion, processing and serving that worked at one scale and stopped working at the next — plus the cost model underneath, which is usually the real reason the conversation started.
Not a chat demo. Typed output, provenance, evaluation and a review path, so a model result is only allowed to become state when it can be justified — and there is a defined answer for when it cannot.
Evidence Turning model output into auditable product state
High availability, backup, restore and upgrades, handed over with a runbook your team owns after I leave — and numbers taken from a rig you can rebuild rather than from a vendor page.
Evidence Orchestrated failover and a restore I performed
Selected work
Five systems, and the decisions that kept them running.
Six database engines, eight failover scenarios, one laptop — with the numbers
8 of 8failover scenarios passedmy own test plan, executed on Docker with 8 CPU / 12.5 GB · 2026
383 µsreplay lag measured on one hosta single pg_stat_replication reading with primary and hot standby on the same machine — loopback, no network, so it is a floor for the configuration rather than a latency anyone should expect across hosts
A production-shaped Postgres cluster on one laptop: killed the primary, rebuilt the replica, recovered a dropped table
10–20 sobserved promotion window after SIGKILLSIGKILL of the Patroni leader, then patronictl polled every 10 s until the survivor showed as Leader — so 10 s is the measurement resolution, not the precision of the result · 2026
under 5 sreplica rebuilt from backuppatronictl reinit, timed from the pgBackRest restore command begin to Patroni reporting the replica created · 2026
The two halves of the thesis as one system: Trino and Iceberg underneath, retrieval and answers on top, both measured
88 msone-month predicate over 1.5M Iceberg rowsmedian of 7 server-side runs from system.runtime.queries, after 2 warm-ups, on a month-partitioned Iceberg table · 2026
909,968rows recovered by snapshot rollbackunqualified DELETE, then ALTER TABLE EXECUTE rollback_to_snapshot, counted against the pre-incident total · 2026
Build a two-node Patroni cluster on Rocky 8 under QEMU, then SIGKILL the leader and measure the promotion, the timeline bump, and the pg_rewind rejoin.
Profile
Based in Kathmandu. Working across European afternoons and US mornings.