The software industry is considered a new industry compared to other old industries like automotive, banking, manufacturing, …etc, which makes professionals from different industries may not able to understand what is the role of the architect? what is the difference between architecture levels Why the architecture is important and when it is needed?
There is a lot of mix between the architecture roles, from enterprise architect, Business architect, data architect, system architect, infrastructure architect, software architect …etc? Moreover, there is a lot of misunderstanding about the different levels of architecture and design. Even some of the software engineers may not know the difference when each level is needed. I explained before the difference between the software architecture, software design, and software structure in this article, while it needs some extra illustration.
This article mainly will focus on why the architecture is important and when and what are the different levels from conceptual to the detailed design level from the software architecture perspective. So, let us start.
Architecture is not only IT/Technology, architecting is mainly an activity of balancing different stakeholders concerns and objectives, but it also contains several activities, such us, understanding, analyzing, communicating, describing, constructing, guiding, and evaluation, why we need architecture?
- Validations if we meet stakeholders concerns and business objectives
- Better feasibility for the system, through understanding what this system should deliver, why, and how
- Killing silos, through seeing the whole picture and how the system interacts with other system and improve interoperability.
- Reducing time to market, by enabling the reuse of existing styles, building block, patterns, or reference architecture
- Reducing development cost, through communication and description of each element
- Reducing maintenance cost, by understanding and foreseeing the changes
Architecting is not only about the solution space, but also about the problem space: identifying, scoping, understanding the problem space.(Paris Avgeriou, 2017)
The architecture actually can occur when we want to develop a new system, change an existing one, integrating an existing system with another system, decommissioning a system, or as a communication method for better common understanding.
Some business decisions may affect the architecture as well, for example, budget reduction or priorities changes, this also may need revisiting some architecture decisions, that’s why it is not only about IT or technology.
The architecture is mainly a description of the important collection of conceptual elements and the relationship between each those elements. The most important about architecture is the architectural design decisions of why the system or software looks like that. So, the decisions are described and justified.
“The architecture of a software-intensive system is the structure or structures of the system, which comprise software elements, the externally visible properties of those elements, and the relationships among them.”(Bass, Clements, & Kazman, 2003)
Personally, I liked this definition
The fundamental organization of a system embodied by its components, their relationships to each other and to the environment and the principles guiding its design and evolutionIEEE Standard P1471 Recommended Practice for Architectural Description of Software-Intensive Systems
The architecture can have different views to match and meet the stakeholders’ concerns, for example, security architecture to satisfy the security concern, integration architecture to satisfy the interoperability concerns in the organization, or deployment architecture to satisfy how the system will use the resources, should it support high availability?
Each one of these views has its architecture decisions of why we made it like that way.
The high-level design
Do you remember the architecture elements that we have collected in the architecture definition? the difference here that you take one of these elements and start describing its relationship with other elements as if it is an independent separated system, for example, what is the components and elements of this main element we have selected, what is the role of this element? what are the interfaces between this element with other elements of the big system?
This actually helps the software coder who is working on one element to be aware of how he can communicate and use the other elements without knowing about them or reading their codes.
It is called as well Non-Architecture Design and Micro-Architecture, as the decisions on how to build these elements are left for software designer, not the architect. It seems that it is architecture from the designer perspective as it is focused on a single element. The high-level design is governed by the architecture design decisions and principles, in terms of this element, for example, this element should exist, and it should communicate with other elements with this style or this protocol. Lack of governance may lead to architecture drift or erosion.
We do that for each element of the architectural elements, and then the high-level design is ready. Most of the time, this step is combined either with software architecture or the next step detailed design.
The detailed design
You know the trick now, we have broken down the big system into pieces and describe and design each piece. Similarly, the one element we have selected in high-level design, we start to broke it down and describe its structure of different components which are the classes to be implemented.
Each component or class we describe as well its relationship with other classes through interfaces, contracts, and describe what is the role of this class and why it exists, what is semantic of this component?
The detailed design is mainly the structure, and it should be also governed by the non-architecture and architecture design decisions.
“Architectural design. Concerned with the overall form of solution to be adopted (for example, whether to use a distributed system, what the major elements will be and how they will interact).”
“Detailed design. Developing descriptions of the elements identified in the previous phase, and obviously involving interaction with this. There are also clear feedback loops to earlier phases if the designers are to ensure that the behavior of their solution is to meet the requirements.”(Budgen, 2003)
I hope this article helped in clearing the vague difference between the architecture and design levels and in illustrating the importance of architecture in general. There is a good illustration of the C4 architecture model, which you may find it interesting to visualize the different levels of architecture.
Help to do more!
The content you read is available for free. If you’ve liked any of the articles at this site, please take a second to help us write more and more articles based on real experiences and maintain them for you and others. Your support will make it possible for us.