close

Writing

Essays on software architecture, modular Rails, and the craft of building for the long game.

Latest · June 24, 2026 · The Engineer's Notebook

The View Layer Rails Couldn't See

Every layer of a Rails app has had static analysis for years — RuboCop on Ruby, Brakeman on security — except the one that...

Jun 23, 2026

The Propshaft Version Lever You Were Told Was GoneNotebook · 08

Community feedback claimed Rails 8's Propshaft removed config.assets.version. I read the source and ran the experiment on a clean Rails 8.1.3 app: it's still...

Jun 16, 2026

From One Controller to Thirteen Handlers: A Webhook RefactorNotebook · 07

Refactoring a 200-line Stripe webhook god-object into thirteen single-purpose handlers, using Template Method, Strategy and Registry to make adding an event type a one-class...

Jun 9, 2026

When Rails Engines Are the Wrong ToolNotebook · 05

Rails engines aren't free. When adding engine boundaries is over-engineering — the performance, boot-time and memory costs — and how to tell when a...

Jun 2, 2026

Testing Strategy for a Modular Rails ApplicationNotebook · 06

How a modular Rails test suite runs in 4 minutes instead of 40: per-engine unit tests, dummy apps, contract tests for boundaries, selective execution,...

May 26, 2026

The Modular Monolith as the Default Starting PointNotebook · 03

Why a modular monolith built with Rails engines beats microservices as your default. The operational cost of distribution, the companies that came back, and...

May 22, 2026

Spec is the Artefact

A passing test tells you the implementation is correct. The second-order question — was the work behind this code the work we meant to...

May 21, 2026

The Perception Gap

An engineer opens a pull request. It is eighteen hundred lines across roughly fifteen files. The description has the kind of structure you write...

May 19, 2026

Rails Engines vs Packwerk: When to Use WhatNotebook · 04

Rails engines enforce hard runtime boundaries; Packwerk catches violations with static analysis. A side-by-side comparison — plus gems, namespaces and Hanami slices — to...

Browse the full archive (41 posts) →