Writing
Essays on software architecture, modular Rails, and the craft of building for the long game.
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...
The Engineer's Notebook
A throughline on modular Rails: how to find boundaries, when to reach for engines, and how to keep a codebase legible as it grows.
- 01 Why Architecture Matters in Rails Applications May 5
- 02 How to Identify Boundaries in a Rails Monolith May 12
- 03 The Modular Monolith as the Default Starting Point May 26
- 04 Rails Engines vs Packwerk: When to Use What May 19
- 05 When Rails Engines Are the Wrong Tool Jun 9
- 06 Testing Strategy for a Modular Rails Application Jun 2
- 07 From One Controller to Thirteen Handlers: A Webhook Refactor Jun 16
- 08 The Propshaft Version Lever You Were Told Was Gone Jun 23
- 09 The View Layer Rails Couldn't See Jun 24
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...
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...
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...
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,...
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...
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...
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...
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...