monolith-firstlisted
Install: claude install-skill Amey-Thakur/AI-SKILLS
# Monolith first
Most systems should start as a well-structured monolith and stay one
longer than fashion suggests. A modular monolith gives you clean
boundaries without network complexity; you extract services later,
from seams you have proven, when a specific pressure demands it.
## Method
1. **Build modules with the discipline of services, minus
the network.** Clear internal boundaries (packages/
modules by business capability: see
microservices-boundaries' capability split), each owning
its data and exposing an interface other modules call:
in-process, but as if it were a contract. This is the
whole trick: service-grade boundaries, in-process
simplicity (see module-boundaries, layered-architecture).
2. **Enforce boundaries the compiler cannot forget.** Module
dependencies point one way (see coupling-analysis),
cross-module access goes through the interface not the
internals, and tooling (visibility modifiers, package
rules, architecture-fitness tests) fails the build when
a module reaches past a boundary. Boundaries maintained
by good intentions dissolve; enforced ones survive to
become extraction seams.
3. **Keep data ownership clean inside the monolith.** Each
module owns its tables; other modules query through the
owning module, not by joining across (even though one
database makes cheating trivial). This is the single
most valuable discipline: it is what makes a future
service extraction a boundary move, not