Home

Software Architecture Characteristics


CharacteristicDescription
AvailabilityPercentage of time the system is operational
PerformanceHow fast the system responds under given load
ReliabilityAbility to run consistently without errors
ScalabilityAbility to handle increased workload (users,data)
Fault toleranceAbility to gracefully handle errors and failures
MaintainabilityEase of making changes, fixing bugs, or adding new features
ExtensibilityAbility to add new functionality with minimal changes
SupportabilityHow easy it is to maintain and support the system over time
PortabilityThe system should work across different environments
ConfigurabilityAbility to configure the system according to needs
SecurityProtection against threats, unauthorised access
TestabilityHow easily the system can be tested
DeployabilityHow easy is it to deploy software
AccessibilityThe system is usable by a wide range of people, including those with disabilities
UsabilityEnsuring the system is easy to use and intuitive for users
PrivacyProtecting users’ sensitive information
FeasibilityThe system should be realistic to develop within the constraints
ElasticitySystem adjusts its resource consumption based on the load it is placed under
ObservabilityAbility to measure the internal states of a system

Software Architecture Styles


Predefined patterns and philosophies guiding how software systems are structured and deployed.

Two main categories for architectural styles:

  1. Partitioning
    • Technical vs. Domain-based.
  2. Deployment
    • Monolithic vs. Distributed.

Partitioning by Technical Concerns:

Partitioning by Domain Concerns:

Technical PartitioningDomain Partitioning
Layered by technical rolesOrganized by business areas
Easier for specialised teamsAligned closely with business needs
Risk of over-generalisationRisk of duplicating common functionalities

Deployment Models Overview

  1. Monolithic Architecture
    • Single deployable unit.
  2. Distributed Architecture
    • Multiple deployable units communicating over networks.

Monolithic Architecture

Distributed Architecture

Layered Architecture


Why choose layered architecture?

Strengths

Weakness

Summary

Modular Monolith


A monolithic architecture organized by domain, not technical layers.

Why Choose a Modular Monolith?

Structure

Strengths

Weakness

Summary

Microservices


Microservice


Granularity


Event-Driven Architecture


Asynchronous vs. Synchronous Communication


Database Topologies


How services access and manage data affects modularity and scaling.

Examples:

EDA vs. Microservices


Event-Driven Microservices


This hybrid model combines independent services with event communication, boosting flexibility.

Example:

EDA Challenges


EDA introduces challenges with observability and testing due to distributed asynchronous operations.

EDA Advantages


EDA shines in environments requiring responsiveness, scalability, and autonomy.

Examples:

Serverless Architecture


Key Characteristics


Serverless Design Principles


Limitations and Challenges


Cold starts:

Vendor lock-in:

Observability:

Resource limits:

Comparison: Serverless vs. Microservices


FeatureMicroservices (Containers)Serverless (Functions)
Deployment unitContainerFunction
ManagementDevOps / CI / CD pipelineFully managed by provider
Cost modelFixed per compute unitPer request, per execution time
ScalingContainer autoscalingScales with invocations
Startup timeLow latency (warm)Cold starts may delay execution
MonitoringFull stack observabilityRequires custom integration

Summary