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.
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.
Signed-in readers can open the original source through BestHub's protected redirect.
This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactand we will review it promptly.
21CTO
21CTO (21CTO.com) offers developers community, training, and services, making it your go‑to learning and service platform.
How this landed with the community
Was this worth your time?
0 Comments
Thoughtful readers leave field notes, pushback, and hard-won operational detail here.
