Design architecture aims
Aspects of software that is engineered to have the following, although some will conflict, and thus a trade off is required. These trade offs and choices of what is a priority change and occur during the lifecycle of a system/application:
accessibility
affordability
compatibility
customizability
dependability
effectiveness
fault tolerance
integrity
mobility
portability
provability
reproducibility
safety
securability
sustainability
accountability
agility
composability
debugability
deployability
efficiency
fidelity
interoperability
modifiability
precision
recoverability
resilience
scalability
simplicity
tailorability
accuracy
auditability
configurability
degradability
discoverability
usability
flexibility
learnability
modularity
predictability
relevance
responsiveness
seamlessness
stability
testability
adaptability
autonomy
correctness
determinability
distributability
extensibility
inspectability
maintainability
operability process
capabilities
reliability
reusability
self-sustainability
standards compliance
timeliness
administrability
availability
credibility
demonstrability
durability
failure transparency
installability
manageability
orthogonality
producibility
repeatability
robustness
serviceability
survivability
traceability
To improve design to meet design requirements not only depends on the logic of your program, but other factors in the software stack
software stack from top to bottom dependencies
your programs
libraries/api
compilers
assembler
virtualisation
operating system
hardware
As everything depends on hardware, improving this despite improving it's dependents can lead to better performance
but is an easy way out, but can be exponentially expensive for little gain after a while
So design needs to take to deal with other levels first, the higher levels are generally cheaper to fix or improve first
Last updated
Was this helpful?