Lorbic._

Decoding the mechanics of high-performance systems.

Technical Journal // Recent Articles
Mar '26

ClickHouse vs. Postgres: When to Move Your Logs Out of a Relational DB

Postgres is the swiss-army knife of databases, but when you hit the 10-million row mark for write-heavy logs, the relational wall becomes real. Here is why we moved our observability stack to ClickHouse.

Mar '26

The WSL2 Performance Tax: Why Your Go Apps Are Slow on Windows

If you're building Go applications on WSL2 and keeping your source code on the Windows filesystem, you're paying a hidden performance tax on every build. Here is how to reclaim your CPU cycles.

Mar '26

AI Coding in 2026: Productivity Multipliers vs. Skill Replacements

Two years of coding with AI every day: what actually saves time, what creates hidden debt, and why your fundamentals are your only real defense against hallucinated correctness.

Feb '26

Stop Rebuilding Docker Images on Every Code Change

Waiting 2 minutes to see a typo fix? Runtime containers separate your code from your runtime, enabling instant feedback without sacrificing containerized consistency. Mount your code instead of baking it in. Edit files, see changes instantly. No rebuilds, no waiting.

Feb '26

Building Production-Ready Background Workers in Python

Your background jobs crash on deployment, fail silently, and corrupt data. Here's how to fix it with worker pools, retry strategies, idempotency, and graceful shutdown. A guide to building production background processing systems that don't break under load. Tested at 20 req/sec.

Jan '26

Go Struct Field Alignment

Your Go structs might be wasting up to 32% of their memory due to invisible padding bytes. This deep dive into struct field alignment reveals how the compiler arranges memory, why field order matters, and provides benchmarks showing real memory savings. Learn the simple reordering rules that can shrink your heap, reduce GC pressure, and improve CPU cache efficiency.

Jan '26

I Added Session Management to Aider

Aider is my favorite AI coding assistant. It lives in the terminal, commits directly to Git, and actually understands my codebase. But it was missing one thing: the ability to save and restore chat sessions. So I built it. The PR never got merged, but I've been running my fork for months now. Here's the story.

Jan '26

ClickHouse as a Vector Database

Vector databases are everywhere now. Pinecone, Weaviate, Milvus - the list goes on. But what if you're already running ClickHouse and don't want yet another database to manage? Turns out, ClickHouse can do vectors too. This post explores what vector databases actually are, why ClickHouse might be a surprisingly good choice, and how to get semantic search running with plain SQL.

Jan '26

Memory Mechanics In Go - Stack vs Heap

When thinking about performance, it's easy to focus on Big O notation. But in Go, the difference between the Stack and the Heap is often the difference between a service that scales and one that chokes on GC pauses. This post explores escape analysis, the "Pointer Myth", and why passing by value is often 40x faster than passing by pointer.

Jan '26

OLTP vs OLAP - Why You Need Two Databases

"The database that runs your app cannot be the database that analyzes your app". It's a hard lesson learned at scale. Early on, Postgres does it all. But as you hit massive scale, your analytics queries start killing your login APIs. This post breaks down the physics of Row-oriented (Couchbase) vs Column-oriented (ClickHouse) databases, and how to bridge them using Change Data Capture (CDC) for a robust, lag-free architecture.