What do we mean by a software architecture? To me the term architecture conveys a notion of the core elements
of the system, the pieces that are difficult to change. A foundation on which the rest must be built.
What do we mean by a software architecture? To me the term architecture conveys a notion of the core elements of the system, the pieces that are difficult to change. A foundation on which the rest must be built.
Important architectural decisions are those that might endanger central project conditions: budget, schedule or product quality. Rigid designs or too early decisions are unnecessary for topics that can easily be changed later or carry only minor risks. It is therefore advisable to prioritize architectural work on the basis of risk.
High risks typically arise, for example, from
If architectural work is not approached in a structured way, there is a risk that fundamental non-functional requirements cannot be met. In the worst case, this is noticed late in the project and can't be changed anymore. For example, an acceptable performance level may no longer be possible without rebuilding large parts of the solution. Also, maintainability will most likely suffer, and missing architecture documentation will make it difficult for new team members to familiarize themselves with the structure of the software.
Creating an initial architecture vision together with stakeholders and the development team is a lean way to work out a common direction. This without decisions being made unnecessarily early, thus keeping the learning window open for as long as possible. The architectural vision should include the following key points:
Over time, the following points can be added to the architecture vision as they become more solid:
We recommend separating architectural work from the implementation and scheduling it in the product backlog:
How the architecture work is distributed in the team and thus which architecture roles are necessary and is dependent on the existing architectural factors: Is the system distributed and complex, or is it a simple forms application? Are new technologies required or are complex interfaces to be connected? Are there very high quality requirements in an area, for example performance or flexibility? Depending on these factors and the experience available in the team, one of the following role models is conceivable:
When using agile methods, the question of documentation often arises. An architecture documentation is always required from our point of view, whereby the work to be invested in it depends on the complexity of the system. The most important elements of such a documentation are
It is not recommende to document detailed implementation aspects of the system, which can be read from the code and are subject to frequent changes. These are typically not relevant to architecture.
It is important to consider who the stakeholders consuming the documentation are. One of the most important stakeholder is the new project team member, who should be able to quickly gain an overview of the system and its requirements and goals.
The form of documentation should be easily accessible and editable: collaborative systems like Confluence are well suited, for example. What also works well are approaches in which the documentation is directly stored in the version control system together with the source code, e.g. as Markdown or Asciidoc. We have also seen good results in customer projects using Structurizr, a tool which allows to describe the documentation as code and create views from it.
We would be happy to support you taking an active approach towards software architecture when using agile methodologies: Our contact details