Common structures.
MONOLITHIC
One deployable unit containing everything.
Simple to build, deploy and debug. Harder to scale parts independently.
MODULAR MONOLITH
One deployable unit with strong internal boundaries.
Provides most of the benefits of separation without distribution.
LAYERED
Divided horizontally: presentation, logic, data.
Familiar, and prone to changes touching every layer.
SERVICE-ORIENTED
Separate services communicating over a network.
Independent deployment and scaling. Substantial operational complexity.
EVENT-DRIVEN
Components reacting to events rather than calling each other.
Loose coupling, at the cost of harder reasoning about flow.
PIPELINE
Data passing through stages of processing.
Suits data transformation work.
WHAT MOST SYSTEMS SHOULD START AS
A well-structured monolith.
WHY
It is simpler in every respect, and its boundaries can be extracted later if genuinely needed.
WHAT TO AVOID
Choosing distribution for its reputation rather than a requirement.