Software Architecture – Part 1 (SE Radio)
In episode 23 of the Software Engineering Radio, Alex, Michael and Markus talk about the fundamentals of software architecture. Here is the summary.
Introduction
Software architecture is the art and science of designing and building software. To create a system architecture, you need to know the requirements and functionalities that the system has to fulfill and the interaction and dependencies between those functionalities. The hard part in system architecture is usually to address the non-functional requirements.
Software architecture is different from software design. Architecture is at a top level that guides and shapes the overall system with design guidelines and principles that the design should adhere to. The design is one level below specifying individual classes, objects, variables, etc.
The design is at a level that is not critical to non-functional requirements so different designs can fulfill the same architecture. So, if something is needed to be done in a specific way to address a certain requirement, then it is a part of architecture.
Agile Architecture
Some may think that Agile development doesn't need software architects but, actually, any software system has it own structure, architecture and important design decisions. Agile teams don't have an architect as a role because the architecture is not explicitly planned but created while developing the system. Of course, they always have to follow some guidelines to be able to grow without refactoring the whole system.
The Role of a System Architect
- Communicates with all stakeholders to ensure consistency and resolve any conflicts. This includes communication with project management regarding requirements, with developers to share design guidelines, and sometimes with customers if some requirements affect the architecture. They should be concerned about technical goals without getting into politics.
- Ensures the consistency of the overall architecture by regularly reviewing the design implemented by developers.
- Guides and coaches developers to take good design decisions.
- Defines the basic building blocks and the vocabulary that is used to discuss the system.
- Contributes their knowledge and technical skills.
It is also important to notice that:
- The full software architecture has to be built incrementally but the number and severity of the changes should become less frequent, otherwise the initial architecture was wrong.
- Big projects, distributed over several locations, typically have a group of architects with only one lead architect who takes final decisions. But there should be a continuous communication to ensure they are all aware of different parts of the system.
- Not every good programmer can become a good architect, they need to have strong communication and social skills besides their technical skills.








Leave a Comment