Fundamentals 20 min read

Mastering the 21 Essential Software Architecture Characteristics

This article explains the twenty‑one key non‑functional characteristics of software architecture—such as performance, reliability, scalability, security and maintainability—detailing their definitions, typical metrics, and practical techniques for improvement, while linking each trait to ISO‑25010 and real‑world engineering practices.

21CTO
21CTO
21CTO
Mastering the 21 Essential Software Architecture Characteristics

1. Performance

Performance is the system's ability to respond to events within acceptable time limits, measured by latency, throughput, usable capacity, schedulable utilization and data loss.

Latency : time before a response is received, including minimum start time, deadline, priority and jitter.

Throughput : number of responses processed in a fixed interval.

Usable capacity : maximum throughput achievable without violating latency requirements.

Schedulable utilization : highest resource utilization that still meets timing constraints.

Data loss : cache miss rate when caching is used to boost performance.

Techniques to improve performance

Understand influencing factors—demand, hardware, software—and control demand with queues, throttling and back‑pressure. Optimize algorithms, set time‑outs and priorities, use vertical scaling, increase concurrency (Amdahl's law), cache effectively, and adopt horizontal scaling when load spikes.

2. Reliability

Reliability means consistent quality or performance that can be trusted, often expressed by Mean Time Between Failures (MTBF) and calculated as exp(‑t/MTBF).

Metrics include software complexity, code coverage, fitness functions, unresolved issue count, successful build/deployment count, and ISO‑9001 compliance.

Techniques to improve reliability

Adopt best engineering practices, robust management processes, mutation testing, chaos engineering, and overall system hardening.

3. Availability

Availability is the proportion of time a system is operational versus total scheduled time, reflecting the ability to mask or repair failures within defined thresholds.

Techniques to improve availability

Detect potential failures early, intervene promptly, and use monitoring and alerting to restore service quickly.

4. Resilience

Resilience (or fault‑tolerance) is the ability of a system to degrade gracefully rather than crash when encountering serious faults, by using defensive mechanisms such as circuit breakers.

Techniques to enhance resilience

Identify critical functions and hardware, set tolerance thresholds, limit request and thread counts, cache repeated requests, batch operations, and apply protective patterns.

5. Trustworthiness

Trustworthiness aggregates reliability, availability, resilience, sustainability (availability / resilience), recoverability, and robustness.

6. Scalability

Scalability is the system's capacity to handle increased load within acceptable thresholds, encompassing manual (vertical) and automatic (horizontal) scaling, also called elasticity.

Techniques to achieve scalability

Leverage cloud services (e.g., AWS Fargate), monitor CPU/memory, add or remove instances automatically, and use vertical scaling when needed.

7. Security

Security comprises confidentiality, integrity, authentication, authorization, and non‑repudiation, typically enforced via RBAC, ACL or ABAC.

Techniques to strengthen security

Detect threats early, revoke compromised access, avoid full system shutdowns, and adopt mature security solutions rather than building from scratch.

8. Interoperability

Interoperability is the ability of a system to communicate with external systems, relying on well‑defined contract interfaces and error handling.

Improving interoperability

Use enterprise integration patterns and support multiple communication protocols.

9. Adjustability (Variability)

Adjustability describes how easily a system can accommodate change; high variability components should be modular and loosely coupled.

Improving adjustability

Identify high‑change areas, apply SOLID principles, use fitness functions to measure coupling, and evaluate change cost versus reuse.

10. Deployability

Deployability means packaging the system as an artifact (WAR, JAR, Docker image, etc.) that can be deployed in appropriate environments.

Techniques to improve deployability

Implement CI/CD pipelines, automate tests, use infrastructure‑as‑code, and enable one‑click deployments.

11. Testability

Testability ensures a system can be verified against requirements; it requires controllable inputs/outputs and small, isolated components.

Improving testability

Keep components small, avoid reinventing wheels, write testable code, and adopt TDD.

12. Simplicity

Simplicity is often sacrificed for other goals; for MVPs it should be prioritized, while avoiding over‑engineering.

Techniques for simplicity

Build coarse‑grained components, use RAD frameworks (e.g., Vaadin, JHipster), follow KISS, and focus on speed of delivery.

13. Portability

Portability is the ability to move a system between operating systems, influenced by language runtime (e.g., JVM, Go binaries) and containerization.

Improving portability

Containerize applications with Docker to abstract underlying OS differences.

14. Usability

Usability includes configurability, localization (i18n), accessibility for disabled users, and supportability (help pages, 24/7 support).

15. Extensibility

Extensibility measures how easily plug‑in components can be added, exemplified by OSGi and Eclipse platforms.

16. Antifragility

Antifragility is the system's capacity to thrive under stress, noise, errors or attacks.

Techniques to foster antifragility

Use CI/CD to continuously test changes, apply defensive mechanisms, and employ tools like Netflix's Simian Army.

17. Upgradability

Upgradability is the ability to upgrade a system seamlessly, easier for mobile apps than for web applications.

Improving upgradability

Version services, adopt blue‑green or canary deployments for zero‑downtime releases.

18. Compliance

Compliance ensures legal use of third‑party tools, adherence to open‑source licenses, GDPR, and relevant ISO standards.

Techniques for compliance

Use license‑checking fitness functions, protect user privacy by design, and involve legal review when needed.

19. Cost

Cost encompasses financial, operational, and technical debt; investing in testing, CI/CD, and quality code reduces long‑term expenses.

20. Archivalability

Archivalability is the ability to retain historical data, often required for audit or legal reasons.

Techniques for archivalability

Timestamp records, move aged data to history tables via scheduled jobs, or use soft‑delete flags.

21. Audibility / Traceability

Audibility records critical operations for debugging, compliance, and legal evidence.

Implementing audibility

Centralise logs using ELK stack or Zipkin/Sleuth, and ensure every important action is logged.

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

performanceSoftware ArchitectureScalabilityDevOpsReliabilityNon-functional Requirements
21CTO
Written by

21CTO

21CTO (21CTO.com) offers developers community, training, and services, making it your go‑to learning and service platform.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.