> For the complete documentation index, see [llms.txt](https://hanfak.gitbook.io/workspace/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://hanfak.gitbook.io/workspace/general-paradigms/design-architecture-aims.md).

# 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
