Fundamentals of Software Architecture
Abstract of the book from Mark Richards and Neal Ford
About the book

Chapter 1 : Introduction
1. What are the four dimensions that define software architecture?





2. What is the difference between an architecture decision and a design principle?
3. List the eight core expectations of a software architect.
4. What is the First Law of Software Architecture?
Chapter 2 : Architectural Thinking
1. Describe the traditional approach of architecture versus development and explain why that approach no longer works.
Traditional View : Architecture vs Design

Making architecture work through collaboration

2. List the three levels of knowledge in the knowledge triangle and provide an example of each.

3. Why is it more important for an architect to focus on technical breadth rather than technical depth?

4. What are some of the ways of maintaining your technical depth and remaining hands-on as an architect?
Chapter 3: Modularity
1. What is meant by the term connascence?
2. What is the difference between static and dynamic connascence?
3. What does connascence of type mean? Is it static or dynamic connascence?
4. What is the strongest form of connascence?

5. What is the weakest form of connascence?
6. Which is preferred within a code base—static or dynamic connascence?
Chapter 4: Architecture Characteristics Defined
1. What three criteria must an attribute meet to be considered an architecture characteristic?
2. What is the difference between an implicit characteristic and an explicit one? Provide an example of each.

3. Provide an example of an operational characteristic.
4. Provide an example of a structural characteristic.
5. Provide an example of a cross-cutting characteristic.
6. Which architecture characteristic is more important to strive for—availability or performance?
Chapter 5: Identifying Architecture Characteristics
1. Give a reason why it is a good practice to limit the number of characteristics (“-ilities”) an architecture should support.
2. True or false: most architecture characteristics come from business requirements and user stories.

3. If a business stakeholder states that time-to-market (i.e., getting new features and bug fixes pushed out to users as fast as possible) is the most important business concern, which architecture characteristics would the architecture need to support?
4. What is the difference between scalability and elasticity?
5. You find out that your company is about to undergo several major acquisitions to significantly increase its customer base. Which architectural characteristics should you be worried about?
Exercise
On what Architecture Characteristics should we focus ?
Chapter 6: Measuring and Governing Architecture Characteristics
1. Why is cyclomatic complexity such an important metric to analyze for architecture?

2. What is an architecture fitness function? How can they be used to analyze an architecture?

3. Provide an example of an architecture fitness function to measure the scalability of an architecture.
4. What is the most important criteria for an architecture characteristic to allow architects and developers to create fitness functions?
Chapter 7: Scope of Architecture Characteristics
1. What is an architectural quantum, and why is it important to architecture?
2. Assume a system consisting of a single user interface with four independently deployed services, each containing its own separate database. Would this system have a single quantum or four quanta? Why?
Chapter 8: Component-Based Thinking
1. We define the term component as a building block of an application—something the application does. A component usually consist of a group of classes or source files. How are components typically manifested within an application or service?
2. What is the difference between technical partitioning and domain partitioning? Provide an example of each.
3. What is the advantage of domain partitioning?
4. Under what circumstances would technical partitioning be a better choice over domain partitioning?
5. What is the entity trap? Why is it not a good approach for component identification?
6. When might you choose the workflow approach over the Actor/Actions approach when identifying core components?
Chapter 9: Architecture Styles
Chapter 10: Layered Architecture Style
Chapter 11: Pipeline Architecture
Chapter 12: Microkernel Architecture
Chapter 13: Service-Based Architecture
Chapter 14: Event-Driven Architecture Style
Chapter 15: Space-Based Architecture
Chapter 16: Orchestration-Driven Service-Oriented Architecture
Chapter 17: Microservices Architecture
Chapter 18: Choosing the Appropriate Architecture Style
Chapter 19: Architecture Decisions
Chapter 20: Analyzing Architecture Risk
Chapter 21: Diagramming and Presenting Architecture
Chapter 22: Making Teams Effective
Chapter 23: Negotiation and Leadership Skills
Chapter 24: Developing a Career Path
Architecture katas
Resources
Last updated