A Rails app grows. Changes in one corner start breaking another, two teams keep colliding in the same files, and eventually someone says the word microservices.
Almost always, that's the wrong instinct. What you usually need is a modular monolith: one deployable Rails app, with real, enforced boundaries between its parts. The interesting contrast isn't monolith versus microservices — it's an organised codebase versus a big ball of mud.
This is the current, Rails 8 / Zeitwerk-era version of how I think about it. No nostalgia, no hype.
When you actually want one
Reach for a modular monolith when:






