Featured
Programming 576 words 3 min

Go Concurrency Patterns: A Practical Reading Order

A guided reading order through the Go concurrency patterns that compound: producer-consumer, generator, worker pool, pipeline, semaphore, context, and real-world examples. The shortest path to writing concurrent Go you can reason about.
Cover for Go Goroutines vs C# async/await: Who Carries the Cognitive Load?
Programming 2478 words 12 min

Go Goroutines vs C# async/await: Who Carries the Cognitive Load?

Goroutines and async/await solve the same problem from opposite assumptions. A polyglot's take on primitives vs compiler-managed patterns.
Programming 2083 words 10 min

Generic Methods Coming to Go

Go just accepted the proposal for generic methods on concrete types. Here's what changes, what doesn't, and why it matters.
Latest Posts
Programming 3033 words 15 min

Aggregates & Repositories — Refactoring Without Fear

Aggregates protect invariants across objects. Repositories abstract persistence. Learn how to build systems that don't break with TDD.
Cover for Building a Native x64-to-C# Transpiler: Why I Built Alicorn
Programming 702 words 4 min

Building a Native x64-to-C# Transpiler: Why I Built Alicorn

Building a native x64-to-C# transpiler sounds simple until you meet the RFLAGS register. The question behind Alicorn, and what the gap keeps teaching me.
Cover for Context and Cancellation in Go: Stopping Work That Shouldn't Have Started
Programming 1526 words 8 min

Context and Cancellation in Go: Stopping Work That Shouldn't Have Started

Go context cancellation without the fluff: timeouts, request lifecycles, errgroup fan-out, and graceful shutdown — no leaked goroutines.
Cover for Value Objects & Entities in TypeScript: Building Blocks That Can't Break
Programming 3366 words 17 min

Value Objects & Entities in TypeScript: Building Blocks That Can't Break

Learn how Value Objects and Entities make invalid states impossible in TypeScript. Build self-validating domain code with TDD — the blocks that can't break.
Cover for Beyond PGN: Designing an Ultra-Efficient Chess Storage Format
Programming 2668 words 13 min

Beyond PGN: Designing an Ultra-Efficient Chess Storage Format

Every chess database begins with the same question: how do we store a game? PGN is the default answer — human-readable, portable, and surprisingly wasteful. A walkthrough of moving toward binary coordinates and legal-move indexing, and the engineering trade-off between the smallest format and the fastest one.
Cover for Beyond Minimalism: A Japanese-Inspired UX for the Web
Design 1572 words 8 min

Beyond Minimalism: A Japanese-Inspired UX for the Web

The final UX Japan article: how ma, bento layouts, and designed density can give web interfaces more context, comparison, and confidence.
Cover for How to Merge PGN Files in F#: Streaming, Performance, and Discriminated Unions
Programming 709 words 4 min

How to Merge PGN Files in F#: Streaming, Performance, and Discriminated Unions

How I built a CLI tool to merge chess PGN files using F#'s type system, streaming I/O, and functional patterns — merging gigabytes of games with 64 KB of memory.
Cover for What Western UX Can Learn from Japanese Web Design
Design 1128 words 6 min

What Western UX Can Learn from Japanese Web Design

Japanese websites are often dismissed as cluttered. But their density reveals a different design logic: trust through context, comparison, and visible reassurance.