Enterprise software doesn't die because it is too small. It dies because the few places that needed to stay simple were allowed to grow without anyone noticing.
We treat "lightweight" as a property you defend at specific seams, not a vibe you sprinkle over the whole codebase. Most of a system can be ordinary; a handful of boundaries decide whether it survives five years.
Find the load-bearing seams#
The domain model, the integration edges, and the data ownership lines are where complexity compounds. Keep those legible and you can afford mess elsewhere.
- One owner per piece of data — no shared mutable truth.
- Interfaces that model the domain, not the database schema.
- A deployment unit a single engineer can reason about end to end.
Complexity you can draw on a whiteboard is complexity you can pay down later.
The goal isn't fewer lines. It's fewer places where a change forces you to understand the whole.