Architectural Analysis  «Prev  Next»
Lesson 4

System Partitioning: Conclusion and Key Takeaways

System partitioning separates what the system must do from how it is built. In this module you learned how to partition by domain (functional intent) and by technology (implementation choices), and how those decisions impact cost, performance, reliability, and iteration speed.

What you learned

  • The purpose of partitioning: reduce complexity, enable parallel work, and localize change.
  • Two complementary styles: Domain (functional) partitioning and Technical partitioning.
  • How to map user goals to cohesive features and then to deployable components.
  • How to evaluate trade‑offs (cost, performance, scalability, security, operability).

Two kinds of partitioning

Domain (Functional) Partitioning
Decomposes the system by business capability or user‑visible behavior. Goal: cohesive features with minimal coupling (e.g., “Orders”, “Billing”, “Inventory”). Often aligns to bounded contexts.
Technical Partitioning
Distributes behavior across implementation concerns (UI, services, data stores, integrations, messaging, edge). Goal: clear responsibilities, independent deployment, and fit‑for‑purpose technology choices.

Domain / Functional Partitioning — Artifacts & Outcomes

Inputs you produce during domain analysis and what each gives you.
ArtifactPurpose / Outcome
Use cases / user stories Capture user goals and success criteria; define boundaries of discrete features.
Problem‑domain model Identify core entities and relationships that the system manipulates (language shared with stakeholders).
Interaction diagrams (sequence/collaboration) Reveal message flow and responsibilities; surface hidden coupling and latency hotspots.
Cohesion & coupling analysis Group related use cases/features; minimize cross‑feature dependencies.
Interface requirements Describe how users and external systems interact with features (APIs, screens, events).
Transaction definitions Define atomic units of work and consistency needs (ACID vs. eventual, saga patterns).
Data requirements Clarify authoritative sources, reference data, and privacy/compliance constraints.

Technical Partitioning — Concerns & Decisions

Where functionality runs and how parts communicate.
ConcernDesign Focus
User interface Screens, devices, accessibility; server‑ vs. client‑rendering; offline behavior.
Service & integration layer APIs, domain services, gateways; sync vs. async; idempotency and back‑pressure.
Communication Protocols (HTTP/gRPC/MQ), contracts, versioning, observability of calls.
Data persistence Operational stores, analytics, caches; sharding/partition keys; consistency models.
Platform/runtime Deployment topology (monolith, modular, microservices); containers, serverless, edge.
Security AuthN/Z, secrets, data‑at‑rest/in‑transit protection, tenancy, compliance.
Reliability Redundancy, retries, circuit breakers, graceful degradation, disaster recovery RTO/RPO.
Operability Logging, tracing, metrics/SLOs, feature flags, rollout/rollback, cost visibility.

Partitioning principles

  • Separate policy from plumbing: Keep business rules independent from transport, storage, and UI.
  • Prefer vertical slices: End‑to‑end feature slices beat broad horizontal layers for speed and autonomy.
  • Balance cohesion & coupling: Merge until cohesive; split when change cadence, scale, or ownership diverge.
  • Make trade‑offs explicit: Use ADRs and measurable fitness functions (latency, SLOs, cost per txn).
  • Evolve incrementally: Start coarse‑grained; refine with production telemetry.

Structural vs. Functional approaches

Structural‑first: choose tech layers/components, then fit features into them. Fast to start, risk of accidental coupling.

Functional‑first: partition by capability, then assign to tech. Better change isolation and performance tuning; supports hybrid HW/SW when needed.

Practical workflow

  1. Map capabilities → define use cases, domain model, and transactions.
  2. Group into cohesive feature slices (bounded contexts).
  3. Assign slices to technical components (UI, services, data) with clear interfaces.
  4. Choose communication patterns and data ownership; document consistency rules.
  5. Add cross‑cutting concerns (security, reliability, observability) per slice.
  6. Validate with sequence diagrams and performance budgets; iterate using telemetry.

Ready‑to‑ship checklist

  • Each feature slice has a single owner and clear API/contract.
  • Partition keys and transaction boundaries are defined and tested.
  • Non‑functional budgets (latency, throughput, error rate, cost) are measurable.
  • Runbooks, dashboards, and alerts exist for each partition.

Glossary

Bounded context
A domain boundary within which a model and vocabulary are consistent and cohesive.
Partition key
A stable attribute used to colocate data and requests for scalability and performance.
Saga
A sequence of local transactions with compensations that ensures business‑level consistency across services.
Fitness function
An objective measure (e.g., p95 latency < 200ms) used to guide architectural choices.

SEMrush Software