Page 168 -
P. 168
6.1 Architectural design decisions 151
6.1 Architectural design decisions
Architectural design is a creative process where you design a system organization
that will satisfy the functional and non-functional requirements of a system. Because
it is a creative process, the activities within the process depend on the type of system
being developed, the background and experience of the system architect, and the
specific requirements for the system. It is therefore useful to think of architectural
design as a series of decisions to be made rather than a sequence of activities.
During the architectural design process, system architects have to make a number
of structural decisions that profoundly affect the system and its development
process. Based on their knowledge and experience, they have to consider the follow-
ing fundamental questions about the system:
1. Is there a generic application architecture that can act as a template for the sys-
tem that is being designed?
2. How will the system be distributed across a number of cores or processors?
3. What architectural patterns or styles might be used?
4. What will be the fundamental approach used to structure the system?
5. How will the structural components in the system be decomposed into sub-
components?
6. What strategy will be used to control the operation of the components in the system?
7. What architectural organization is best for delivering the non-functional require-
ments of the system?
8. How will the architectural design be evaluated?
9. How should the architecture of the system be documented?
Although each software system is unique, systems in the same application
domain often have similar architectures that reflect the fundamental concepts of the
domain. For example, application product lines are applications that are built around
a core architecture with variants that satisfy specific customer requirements. When
designing a system architecture, you have to decide what your system and broader
application classes have in common, and decide how much knowledge from these
application architectures you can reuse. I discuss generic application architectures in
Section 6.4 and application product lines in Chapter 16.
For embedded systems and systems designed for personal computers, there is
usually only a single processor and you will not have to design a distributed architec-
ture for the system. However, most large systems are now distributed systems in
which the system software is distributed across many different computers. The
choice of distribution architecture is a key decision that affects the performance and