Traces
A record of work, projects, travels, tournaments, and the lessons they left behind. Mostly for myself, so future me can remember how any of it happened.
At work
Jun 2024 — Jun 2025
ChessMood
Making chess analysis searchable
At ChessMood I built the backend for game analysis. I designed the ingestion pipeline: an outbox, ordered queues, and idempotent SQS workers. I also built Lab, a shared store for games, engine evaluations, and metadata.
As principal maintainer of the Go chess library, I rewrote more than half the codebase. PGN parsing dropped from 26 seconds to 0.888 seconds in multithreaded mode; replacing the legacy Python parser gave a further 14× speed-up.
I processed 300+ hours of chess video. OpenCV and FFmpeg pre-filters made the board-recognition model roughly 10× faster, and made frame-accurate position search possible.
Built there
Related chess writing
Oct 2025 — May 2026
Basalt
Making traces useful at scale
At Basalt, I redesigned a trace platform processing roughly one terabyte of telemetry per day. I moved storage toward Kafka, ClickHouse, and Quickwit, then reshaped ClickHouse queries: work that took dozens of seconds and hundreds of gigabytes of RAM now completes in under a second.
I built a custom OpenTelemetry Collector extension that adds authenticated, transformed ingestion. I also fixed multi-day traces that broke the original partitioning assumptions.
I led an internal workshop on refactoring toward TDD, clearer domain boundaries, CQRS where it helps, and end-to-end coverage across Go and TypeScript services.
Related technique
Related practice
Craft, with proof
I write concurrent Go as something people can reason about.
Go Concurrency Patterns: A Practical Reading OrderI treat observability as a property of the system, not a dashboard added later.
OpenTelemetry Go Compile-Time with otelcI use tests to make structural change safer.
TDD Isn't About Bugs — It's Your Permission to RefactorPGN parsing: 26 s → 0.888 s · ~1 TB of traces/day · 95 stars on Chess
The record
2026
Writing nearly every week
SummerGo, TypeScript, domain-driven design, observability. The Go Patterns series finds its reading-order page — ten parts, one path.
Three essays on Japan, density, and Ma
JuneThe design series I wanted to read and couldn't find — so I wrote it.
Alicorn — a native x64-to-C# transpiler
In progressNobody asked for it. That's partly the point. Code-generation over emulation, learned the hard way.
2024
Yerevan — the Karen Asrian Memorial
MayNine rounds across the board from grandmasters. +34 Elo, one winning position lost on time, and a country that changed how I see the world.
The Go Patterns series begins
WinterProducer-consumer, generators, worker pools — written as I learned them, in the order I wish I'd had.
2023
First tools, first benchmarks
Jan — AugGoroutines vs simple functions, parallel merge sort, the sum of squares, dnf5. Learning in public, awkwardly, honestly.
2022
Next
Japan
—Not yet written. (planned)