Krzywda warns against microservices ('I'm sorry for you guys'), Rails engines (Adrian agrees engines actually suck), and Trailblazer-then-removed experiments seen in git history. All these pick a single wrong level of modularity and lock the project into it. Prefer the two-layer split (application + domain) and start from recognising typical domains; engines, if you use them, belong to the application layer.