Took ownership of the analytics department's infrastructure, replaced manually managed data jobs with an automated and observable platform, and established reliable day-to-day operations.
Built a Go service with a Slack UI, PostgreSQL state and the Proxmox API so developers could provision and manage game development environments themselves.
Traced a Tableau Custom SQL failure to ClickHouse response-format precedence and shipped a targeted connector workaround while upstream fixed the Java driver.
Upgraded two shards × two replicas from 25.12.4.35 to 26.8.4.11 LTS one node at a time (order 4 → 2 → 3 → 1), watching replicas, the replication queue and ingestion after each node. The three Keeper nodes stayed unchanged; compatibility settings bridged the versions.
Limits: A risk-reduction procedure; downtime was not measured.
ClickHouse
Keeper
Replication
Databases & data
CDC under real backend constraints
MySQL → Debezium → Kafka → ClickHouse with Avro and Schema Registry, a custom Java SMT, and a move from self-hosted Kafka to DigitalOcean Managed Kafka, with connector monitoring.
Limits:errors.tolerance=all keeps the connector running by skipping records it cannot process — it is not a reliability guarantee. ReplacingMergeTree deduplicates eventually; nothing here is exactly-once.
Debezium
Kafka
Schema Registry
ClickHouse
Incidents & recovery
A converter that passed tests and failed in production
A custom Debezium converter passed synthetic tests but failed in production: real MySQL binlog string columns arrived as byte[], not the assumed String. Lesson: tests have to cover the real integration path and wire representation, not only idealized fixtures.
Limits: A lesson, not a shipped process change.
Debezium
Kafka Connect
MySQL binlog
Databases & data
PostgreSQL production operations
NVMe and RAID replacement with recovery, S3 backups, statement diagnostics, and a cron job whose repeated GRANTs blocked queries — replaced with default privileges.
Limits: Downtime of the hardware work was not measured.
PostgreSQL
RAID
S3
Databases & data · 6 Aug 2026
Migrating Tableau Server across operating systems
Moved Tableau Server 2024.2 on Debian to Ubuntu 24.04 with Tableau 2025.3.8 through a .tsbak backup; fixed permissions, the public host, ODBC and ingress; consolidated several sites.
Limits: Downtime was not recorded.
Tableau Server
Ubuntu 24.04
ODBC
Platform & infrastructure
Modernizing Airflow operations
Airflow 2.10.4 and 3.x side by side, on Docker Compose and Kubernetes, with Celery, images built in GitLab, SSO, Slack alerts, StatsD → Prometheus metrics and dbt through Cosmos.
Limits: HPA scales the Kubernetes workers; not every Airflow 3.x workload runs in Kubernetes.
Airflow
Kubernetes
Celery
dbt
Platform & infrastructure
SSO with Keycloak and FreeIPA
OIDC for Airflow, OpenMetadata, Lakekeeper and JupyterHub, separate service-to-service credentials, and access granted and revoked automatically.
Keycloak
FreeIPA
OIDC
Incidents & recovery · 13 Aug 2026
Diagnosing a distributed query timeout
Investigation note · unresolved
Code 209 SOCKET_TIMEOUT in a distributed query; the load pointed to heavy remote system.tables reads and catalogs of PostgreSQL-engine databases.
Limits: No confirmed final resolution.
ClickHouse
dbt
PostgreSQL engine
Incidents & recovery
Bare-metal recovery notes
Recovered a server's RAID10 and bootloader through Hetzner rescue mode; expanded a ClickHouse RAID10 array.
RAID10
Hetzner
Linux
Platform & infrastructure
Internal infrastructure automation
Ansible with DataGerry as the inventory source of truth, Proxmox with Ceph, self-hosted GitLab with Gitaly and LFS, and access tooling in Go.