Posts from 2025
-
Goroutines and Channels
Share memory by communicating, and where that principle stops applying.
-
ClickHouse Basics: MergeTree and Tiered Storage with S3
Getting started with ClickHouse, the interesting bits of MergeTree, and hot/warm/cold tiering onto AWS S3 — with a Docker quick start.
-
The Event Loop Is Not Multithreading: The Most Common Concurrency Misconception in Node.js
Node's non-blocking I/O looks like parallel execution, but it runs on a single-threaded event loop — a distinction that hits hard the moment your workload turns CPU-heavy.
-
Interfaces and Composition
Go interfaces are satisfied implicitly, making composition over inheritance natural and powering the adapter pattern.
-
Semantics Lost at the Boundary, and Why the Monolith Keeps Pulling
When a large system is hard to compose, the components are usually fine. What broke is the meaning, flattened into bytes the moment it crossed a service boundary.
-
"It Builds" Is Not the Same as Well-Designed
A working build is just the floor, not a signal that the design is sound.
-
Types Are Not Safety
TypeScript's type system is a tool for thinking through your data and your boundaries, not a way to buy a feeling of safety.