SAIP Distilled, Chapter 2 - Why Is Software Architecture Important?
In this post, you will find the list of thirteen and the notes for each item.
- An architecture will inhibit or enable a system’s driving quality attributes.
- The decisions made in an architecture allow you to reason about and manage change as the system evolves.
- The analysis of an architecture enables early prediction of a system’s qualities.
- A documented architecture enhances communication among stakeholders.
- The architecture is a carrier of the earliest and hence most fundamental, hardest-to-change design decisions.
- An architecture defines a set of constraints on subsequent implementation.
- The architecture dictates the structure of an organization, or vice versa.
- An architecture can provide the basis for evolutionary prototyping.
- An architecture is the key artifact that allows the architect and project manager to reason about cost and schedule.
- An architecture can be created as a transferable, reusable model that forms the heart of a product line.
- Architecture-based development focuses attention on the assembly of components, rather than simply on their creation.
- By restricting design alternatives, architecture channels the creativity of developers, reducing design and system complexity.
- An architecture can be the foundation for training a new team member.
2.1. Inhibiting or Enabling a System’s Quality Attributes
- A good architecture is necessary, but not sufficient, to ensure quality.
- Achieving quality attributes must be considered throughout:
- Design
- Implementation
- Deployment
2.2. Reasoning About and Managing Change
- Every architecture partitions possible changes into three categories: local, nonlocal, and architectural.
- A local change can be accomplished by modifying a single element.
- A nonlocal change requires multiple element modifications but leaves the underlying architectural approach intact.
- An architectural change affects the fundamental ways in which the elements interact with each other and will probably require changes all over the system.
- Local changes are the most desirable, and so an effective architecture is one in which the most common changes are local, and hence easy to make.
2.3. Predicting System Qualities
- It is possible to make quality predictions about a system based solely on an evaluation of its architecture.
2.4. Enhancing Communication among Stakeholders
- The architecture is sufficiently abstract that most nontechnical people can understand it adequately.
- The abstraction can be refined into sufficiently rich technical specifications to guide:
- Implementation
- Integration
- Test
- Deployment
2.5. Carrying Early Design Decisions
- An architecture design can also be viewed as a set of decisions.
- The early design decisions constrain the decisions that follow, and changing these decisions has enormous ramifications.
2.6. Defining Constraints on an Implementation
- An implementation exhibits an architecture if it conforms to the design decisions prescribed by the architecture.
- The implementation must be implemented as the set of prescribed elements.
- These elements must interact with each other in the prescribed fashion
- Each element must fulfill its responsibility to the other elements as dictated by the architecture.
- Each of these prescriptions is a constraint on the implementer.
2.7. Influencing the Organizational Structure
- The architecture includes the broadest decomposition of the system, it is typically used as the basis for the work-breakdown structure.
- The work-breakdown structure in turn dictates:
- Units of
- Planning
- Scheduling
- Budget
- Interteam communication channels
- Configuration control and file-system organization
- Integration and test plans and procedures
- Units of
- A side effect of establishing the work-breakdown structure is to freeze some aspects of the software architecture.
- A group that is responsible for one of the subsystems will resist having its responsibilities distributed across other groups.
- If these responsibilities have been formalized in a contractual relationship, changing responsibilities could become expensive or even litigious.
2.8. Enabling Evolutionary Prototyping
- Once an architecture has been defined, it can be analyzed and prototyped as a skeletal system.
- Build a little infrastructure to support a little end-to-end functionality; repeat until done.
- Systems built as plug-in architectures are skeletal systems.
2.9. Improving Cost and Schedule Estimates
- One of the duties of an architect is to help the project manager create cost and schedule estimates early in the project life cycle.
- Top-down estimates are useful for setting goals and apportioning budgets.
- Cost estimations that are based on a bottom-up understanding of the system’s pieces are typically more accurate.
- The best cost and schedule estimates will typically emerge from a consensus between:
- The top-down estimates (created by the architect and project manager)
- The bottom-up estimates (created by the developers)
2.10. Supplying a Transferable, Reusable Model
- Reuse of architectures provides tremendous leverage for systems with similar requirements.
- Not only can code be reused, but so can
- Requirements
- Experience
- Infrastructure
be reused.
- When architectural decisions can be reused across multiple systems, the early-decision consequences are transferred.
- A software product line or family is a set of software systems that are all built using the same set of reusable assets.
- The architecture (for product lines) defines what is fixed for all members of the product line and what is variable.
2.11. Allowing Incorporation of Independently Developed Components
- Architecture-based development often focuses on composing or assembling elements that are likely to have been developed separately, even independently, from each other.
- The architecture constrains possible replacements (or additions) according to
- How they interact with their environment
- How they receive and relinquish control
- What data they consume and produce
- How they access data
- What protocols they use for communication and resource sharing
2.12. Restricting the Vocabulary of Design Alternatives
- Engineering is about discipline, and discipline comes in part by restricting the vocabulary of alternatives to proven solutions.
- Architectural patterns guide the architect and focus the architect on the quality attributes of interest in large part by restricting the vocabulary of design alternatives to a relatively small number.
- Properties of software design follow from the choice of an architectural pattern.
2.13. Providing a Basis for Training
- The important uses of software architecture is to support and encourage communication among the various stakeholders.
- The architecture is a common reference point.
Reference Book: Software Architecture in Practice (3rd Edition)