Over the last months I’m thinking more and more about, how architectural work can be done agile. Of course, I know the standard answers: architecture is done by the team, use a KANBAN boards, involve stakeholders, … But I think the problem is deeper as architects who aren’t integrated in teams can’t be agile. I think, there is a contradiction deeply lying under the surface.
As architects we take care of non-functional requirements like performance, stability, availability, modifiability, …*bility a.s.o. When we found some solution for a critical problem – and all those *bilities are critical – we don’t want to change them. But any dedicated product owner wants to change the system as soon as possible to implement new functions every day to satisfy the customer. This is the contradiction, we need to solve.
So how we get a stable architecture which allows to add functions constantly. … Oh, I see “stable architecture” is the wrong term. The correct term needs to be “flexible architecture”. “Flexible Architecture” means here an architecture which allows adding functions constantly without jeopardizing the already achieved non-functional indicators. Even more, the non-functional requirements might be evolving over the time as well, e.g. the stability might be in danger as more and more users hit the platform. The flexible architecture changes, so that other indicators are not changed in the wrong direction.
How we can reach such a flexible architecture. Of course, one of the most fundamentals are micro services. Business functions like “Create a new business” are implemented as their own service with their own database, which minimizes side effects to other services minimal. Comparable approaches are needed to implement smaller functions to a service itself. Comparable approach means here, that the functions inside of a micro service are loose coupled as well.
Before I had some technical arguments, but I would have liked to have a methodology. I think, only such a flexible architecture can ensure an agile approach in architectural work. As an architect, one needs to be a coach to the team. The team needs to be enabled to take their own decisions. The architect has to give them this freedom – without challenging others. Others means here other stakeholders, but even other teams. Decisions of one team really need to be independent. To limit decisions of other teams by the decision of one team would be really ugly.
Overall it means, that flexible architecture ensures *bilities by known principles such as loose coupling on one hand, but it ensure the independence of teams and the freedom of their technical decisions on the other hand. The independence of the teams allows the continuous delivery of new functions.
- Architecture ensures non-functional requirements
- Changes to architecture by new functions can jeopardize non-functional requirements
- Flexible architecture allows constant functional adaptions on one hand and stable achievement of non-functional requirements as well
- Agile methodologies allow to create and govern such a flexible architecture
An architect needs to be a coach to the agile teams in technology as well as in methodology.