All Stories

DeepSeek-R1 reasoning models: Reinforcement Learning without Supervised Fine-Tuning

The standard recipe for a “reasoning” model is crushing amounts of supervised data: millions of human-curated chain-of-thought traces, distilled from a bigger model, cleaned by contractors, and fine-tuned into the...

Go Generics under the Hood: Performance Costs and Monomorphization

When Go 1.18 shipped generics, the design had to thread a needle: be fast like C++ templates without their binary bloat, and be ergonomic without Java’s boxing tax. The answer...

Detecting and Debugging Goroutine Leaks in Production Go Applications

A goroutine leak is the sneakiest way to lose memory in Go, because the memory is not garbage: it is a live stack, referenced by a blocked goroutine, unreachable to...

Fine-tuning vs Prompt-engineering – what to choose in 2025

The 2023 version of this question was about knowledge: “should we fine-tune so the model knows our domain?” That framing is dead in 2025. Current models — Claude Sonnet 4,...

Go Concurrency Patterns: Channels vs. Mutexes in High-Performance Applications

The advice “share memory by communicating” has done more damage than good. It was written for clarity, not throughput, and teams have shipped channel-based counters and caches that run 5-10x...

Rails Solid Cable: Redis-free WebSockets at Scale

ActionCable’s Redis dependency always annoyed me, and not for the reasons people usually cite. The latency argument against database pub/sub is mostly wrong at small scale — the real cost...