Two main categories
Partitioning
Technical vs. Domain-based
Partitioning by Technical Concerns
Code organized by functional roles or Technical layers
eg. Backend and frontend
Partitioning by Domain Concerns
code organized around business Domains or problem areas
eg. separated teams for loads, investments, account management
deployment
Monolithic vs. Distributed
Monolithic architecture
single deployment unit
+: easier initial develop
+: simplified debugging
-: difficult to scale independently
-: single bug can propotage to whole system
Distributed architecture
+: High complexity due to network dependence
-: network latency
-: Bandwidth is finite
-: The network is not secure
-: RollBacks can fail to
Multiple deplorable units communication over networks