Software Architecture Key Software Design Principles Paul Rayner — How Agile Can Cripple Effective Design Work (and what to do about it) "A good design is not one that correctly predicts the future, it's that makes adapting to the future affordable." -Venkat Subramaniam Good Architecture Qualities: Useful, satisfies the requirements Bug free given adequate effort (remember Microsoft worse is better to be first to market) Responsive enough Secure Reliable enough 99.9, 99.999... see this and this Ubiquitous/Portable access/environment Robust - tolerant of faults with minimal outage and no corruption Maintainable/Extensible: adequate test coverage, easy to refactor Scalable: ideally horizontal scale vs. vertical Implementation consistency Cohesive modularity with low coupling Defined layering and visibility Acyclic / unidirectional dependencies Convention over configuration Overarching concerns are abstracted and consistent: security (authenti...