Core Idea
Architecture partitioning determines how a system is divided into components. The two fundamental approaches—technical partitioning (organizing by technical layers) and domain partitioning (organizing by business capabilities)—represent fundamentally different ways of thinking about system structure, each with distinct trade-offs for maintainability, scalability, and team organization.
The Two Fundamental Approaches
Software systems can be partitioned in two primary ways, each reflecting a different organizational philosophy.
Technical Partitioning (Layered Architecture):
- Organizes components by technical capabilities and concerns
- Structure: Separates presentation logic, business logic, and data access into distinct layers
- Example: All user interface code in one layer, all business rules in another, all database interactions in a third
- Alignment: Mirrors traditional separation of concerns and specialized technical teams (frontend team, backend team, database team)
Domain Partitioning (Modular Architecture):
- Organizes components by business capabilities or domains
- Structure: Each component encapsulates all technical layers needed for a specific business function
- Example: E-commerce system with separate components for Order Management, Payment Processing, and Inventory—each containing its own presentation, business logic, and data access code
- Alignment: Aligns with domain-driven design principles and enables teams to own complete business capabilities
Cascading Implications:
Technical partitioning tends to create:
- Horizontal slicing: Broad, shallow components that share data structures
- Coordination requirement: Coordination necessary across layers for any feature change
- Dependencies: Changes ripple across layers
Domain partitioning creates:
- Vertical slicing: Narrow, deep components that are more independent
- Parallel development: Enables teams to work independently
- Trade-off: Potentially duplicates technical infrastructure
Conway’s Law Reinforcement: Organizations naturally produce architectures that mirror their communication structures:
- Technical teams (frontend/backend/database) → System tends toward technical partitioning
- Domain teams (by business capability) → System tends toward domain partitioning
Context-Dependent Choice: Neither approach is universally superior—the choice depends on the system’s dominant architecture characteristics:
- Domain partitioning favored when prioritizing:
- Independent deployability
- Scalability
- Fault isolation
- Technical partitioning favored when prioritizing:
- Code reuse
- Technical consistency
- Simplicity
Why This Matters
The partitioning approach shapes everything downstream: component boundaries, team structure, deployment strategies, and the system’s ability to evolve. Choosing the wrong approach for your context creates persistent friction—domain partitioning in a system that needs maximum code reuse leads to duplication, while technical partitioning in a system that needs independent scaling creates deployment bottlenecks. Making this decision explicit and intentional, rather than accepting it by default, is a fundamental architectural responsibility.
Related Concepts
- Component-Definition — What components are and how they manifest partitioning decisions
- Component-Identification-Process — How to systematically identify components
- Component-Granularity — Determining the appropriate size and scope of components
- Conway’s-Law — How organizational structure influences architecture partitioning
- Modularity-Definition — The logical foundation underlying physical partitioning
- Cohesion — Measuring how well elements within a partition belong together
- Architecture-Quantum — Understanding deployable units that emerge from partitioning
Sources
- Richards, Mark and Neal Ford (2020). Fundamentals of Software Architecture: An Engineering Approach. O’Reilly Media. ISBN: 978-1-492-04345-4.
- Chapter 8: Component-Based Thinking
- Discusses technical vs. domain partitioning in component identification
- Available: https://www.oreilly.com/library/view/fundamentals-of-software/9781492043447/
Note
This content was drafted with assistance from AI tools for research, organization, and initial content generation. All final content has been reviewed, fact-checked, and edited by the author to ensure accuracy and alignment with the author’s intentions and perspective.