All Entries

2026

The Unreasonable Effectiveness of Writing Things Down

Notebook on desk
architecture review

I brought a spiral-bound notebook to a system architecture review last week. Eight engineers with laptops open, and me with a pencil. They thought I was being contrarian. But by the end of the meeting, three people asked to photograph my pages. There's something about the physical act of drawing boxes and arrows that forces a different kind of thinking — slower, more deliberate, with room for the uncertain squiggly line that says "I'm not sure about this connection yet."

CONTINUE READING →
important!

SSH Keys, Git Identities, and the Multi-Org Developer

When you manage repositories across a dozen GitHub organizations — corporate, personal, client, and open-source — the default git configuration falls apart quickly. I've spent the last month perfecting an SSH config that maps each organization to its own identity key, paired with a GitHub CLI profile-switching workflow. The trick isn't technical complexity; it's discipline. Every gh command starts with verifying which profile is active.

CONTINUE READING →

Self-Hosting in 2026: A Field Guide

Server rack
the vps setup

The math finally made sense. After years of paying per-app hosting fees across multiple platforms, I moved everything to a single $24/month VPS running Dokploy. The migration took a weekend. The learning curve was real but manageable. What surprised me wasn't the cost savings — it was the control. Wildcard DNS, custom reverse proxies, environment isolation between staging and production, all on hardware I understand.

CONTINUE READING →

On Naming Things (Again)

Phil Karlton's famous quip about the two hard things in computer science keeps proving itself. But I think naming repositories is harder than naming variables because the stakes are different. A bad variable name causes confusion in one file. A bad repository name causes confusion across teams, CI pipelines, documentation, and mental models. After years of iteration, I've settled on a prefix-based taxonomy: docs-*, poc-*, iac-* — boring, predictable, and that's exactly the point.

CONTINUE READING →

The Monorepo Question Nobody Asks

Every "monorepo vs. multirepo" debate I've witnessed focuses on tooling. Nx or Turborepo? Bazel? But the real question is about organizational coupling. A monorepo is a bet that your teams share enough context, cadence, and trust to deploy from the same source of truth. When that bet is right, it's beautiful. When it's wrong — and it's wrong more often than the blog posts admit — you get a ball of mud with excellent build caching.

CONTINUE READING →
2025

Node 22's Native Fetch Changed My Testing Story

I'd been carrying node-fetch and nock as dependencies in every API service for years. The migration to native fetch wasn't just about removing packages — it fundamentally simplified how I mock HTTP in tests. No more monkey-patching a require'd module. The global fetch is just there, and mocking a global is straightforward.

CONTINUE READING →

Building CLI Tools That Feel Like Home

Terminal window
the daily view

The terminal is where I live. Not because I'm nostalgic for the 1980s, but because text is the fastest interface for someone who types 120 words per minute. Over the past year, I've been building a collection of personal CLI tools — a DNS manager, a deployment watcher, a repo scaffolder — and the design principles are surprisingly similar to good API design: be predictable, fail loudly, and never surprise the user.

CONTINUE READING →

Twenty Years of Shipping: What Actually Mattered

Two decades in, the patterns are clear. The technologies that defined my early career — jQuery, Backbone, early Angular — are footnotes. But the principles haven't changed: understand the problem before you write the code, name things with care, write for the person who will read this at 3 AM during an incident, and never confuse activity with progress. The tools are incidental. The thinking is everything.

CONTINUE READING →
THAT'S ALL THE PAGES FOR NOW
— 2 —