Writing
Essays on software architecture, modular Rails, and the craft of building for the long game.
Reading a Binary Game Format in Ruby
Ruby is the last language most people would reach for to take a binary game archive apart. It turned out to be one of...
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
- 10 Reading a Binary Game Format in Ruby Jun 30
The View Layer Rails Couldn't SeeNotebook · 09
Every layer of a Rails app has had a parser-based linter for years — except the one that ships HTML. Marco Roth's Herb makes...
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...