Skip to main content
Navigation
HomeTechnical ReferenceJournalGitHubGitHub
Sidebar — toggle document categories via the logo
Categories

System Architecture Overview

System architecture defines the structure of a software system, the relationships among its components, and the principles guiding its design and evolution.

Core concepts

  • Components — deployable units that encapsulate behavior (services, databases, queues).
  • Interfaces — contracts that define how components interact.
  • Quality attributes — non-functional requirements such as availability, scalability, and security.
  • Constraints — limitations imposed by technology, budget, regulation, or organizational boundaries.
  • Trade-offs — deliberate choices between competing quality attributes.

Common architecture patterns

PatternUse caseTrade-off
Layered (n-tier)Enterprise applicationsCan become rigid at scale.
MicroservicesIndependent team ownershipAdds operational complexity.
Event-drivenAsynchronous workflowsRequires robust observability.
ServerlessVariable or infrequent workloadsCold starts and vendor lock-in.
Circuit breakerResilient external callsAdds latency and tuning overhead.

Key quality attributes

AttributeConcern
AvailabilityUptime and fault tolerance.
ScalabilityHandling growth in load or data.
MaintainabilityEase of change and testing.
SecurityProtection against threats.
ObservabilityAbility to diagnose behavior in production.
PerformanceResponse time and throughput.

Architecture Decision Record (ADR) template

Use the following structure when documenting significant decisions:

  1. Title — short name and date.
  2. Context — forces and constraints that require a decision.
  3. Decision — the chosen option.
  4. Consequences — positive and negative outcomes.
  5. Status — proposed, accepted, deprecated, or superseded.

Best practices

  • Design for failure rather than assuming perfect conditions.
  • Prefer simplicity until complexity is justified by measured need.
  • Document decisions with ADRs so future teams understand intent.
  • Validate architecture with prototypes, load tests, and chaos experiments.