Architectural Characteristics
Last updated: Sep 18, 2020
Architecture is abstract until it is operationalized.
Characteristic Vs Trait
According to Merriam-Webster’s dictionary, one of the definitions of the word characteristic is a quality or property of a person or thing and the definition of the word trait is an inherited characteristic of a person or thing
Within the context of software architecture, we could view a characteristic as a generalization of one or more traits that can be applied to a wide range of concerns critical to the success of the architecture.
$$ Trait \subset Characteristic $$
A characteristic, also referred to as Non-Functional Requirement or quality attribute, is qualitative in nature. It can be difficult to come up with the right objective tests to measure a characteristic whereas a trait provides a class of attributes to measure how the system is currently used and whether it is meeting expectations using observability techniques and other response indicators.
Below are a few architectural characteristics referenced in the works of Neal Ford et al. relevant to cloud native application architectures.
Agility
- The ability to respond quickly to changing business needs
Deployability
- The ability to deploy and release services independent of other services it depends on
- The ability to deploy and code using Continuous Delivery pipelines all the way to production
Testability
- The ability to verify the veracity of certain characteristics of the architecture using automated tests
- The ability to perform testing without requiring an integrated environment
Evolvability
- Evolvability is a meta-characteristic, an architectural wrapper that protects all the other architectural characteristics.