Fundamentals of Software Architecture Flashcards
What are the four dimensions that define software architecture?
- Architecture characteristics
- Architecture decisions
- Design principles
- Structure
What is the difference between an architecture decision and a design principle?
- Architecture decisions define the rules for how a system should be constructed
- Design principles provide guidance for implementing architecture decisions
List the eight core expectations of a software architect?
- Make architecture decisions
- Continually analyze the architecture
- Keep current with latest trends
- Ensure compliance with decisions
- Diverse exposure and experience
- Have business domain knowledge
- Possess interpersonal skills
- Understand and navigate politics
What is the First Law of Software Architecture?
Everything in software is a trade-off
Describe the traditional approach of architecture versus development and explain why that approach no longer works
a. Architects have to see things differently by:
i. Understanding the difference between architecture and design
ii. Having a wide breadth of technical knowledge while still maintaining a certain level of technical depth in order to see solutions and possibilities that others don’t see
iii. Understanding, analyzing, and reconciling trad-offs between various solutions and technologies
iv. Understanding the importance of business drivers and how they translate to architectural concerns
List the levels of knowledge in the knowledge triangle and provide an example of each
a. Stuff you know
i. Technologies, frameworks, languages, and tools
b. Stuff you know you don’t know
i. Things you know a little about but have little or no experience
c. Stuff you don’t know you don’t know
i. Possible technologies, frameworks, languages, and tools that you have never heard of but could be the best solution
Why is it more important for an architect to focus on technical breadth rather than technical depth
Technical breadth falls into the stuff you know you don’t know, allowing the architect to consider more options that may better fit a problem
What are some of the ways of maintaining your technical depth and remaining hands-on as an architect
Building POCs, attacking technical debt, bug fixes, build fitness functions and automation
What is meant by the term connascence?
a quality metric to allow reasoning about the complexity caused by dependency relationships in object-oriented design
What is the difference between static and dynamic connascence?
Static refers to source code level coupling, dynamic refers to run time coupling
What does connascence of type mean? Is it static or dynamic connascence?
Connascence of type is static and refers to agreeing on the type of entity among multiple components
How long the system will need to be available
Availability
Disaster recovery capability
Continuity
Includes stress testing, peak analysis, analysis of the frequency of functions used, capacity required, and response times
Performance
Business continuity requirements
Recoverability
If the system needs to be fail-safe, or if it is mission critical in a way that affects lives
Reliability/safety