Microservices & Agile Architecture
After many years working on evolution and maintainability of our software architecture, I want to share with you some fundamentals points we found aligned with our vision and practices, from the book of Rajesh R V “Becoming an Agile Software Architect”.
1- Agile means quick and easy “as long as value is continuously delivered” : While reducing BUFD (Big Upfront Design), the microservices are helping to have an appropriate ratio of Architecture upfront according to the MVP (Minimum Viable Product).
2- Principles of Agile Architecture
Architecture needs a collective effort : By using techniques like Shared nothing Architecture and Screaming Architecture in designing and building Microservices, It is easy to empower Collective knowledge, intelligence, and ownership.
Architecture is continuous : The mix of Intentional Architecture and Iterative Emergent design helps us to address product releasing with an hybrid approach illustrated in the following pictures :
The first one is from an interesting paper describing perfectly the 3 methodologies we are using and the facts that their intersection is what matter the most.
Hybrid practice can refer to many activities depending of the goal and the team. For us It represents the Emergent Design as a practice and below a description.
One of the Microservices Architecture advantage used here is supporting iterative or incremental modernization.
Architecture is lean and efficient : No source of wastage, by using the capability of multiple technology cohabitation. We are combining usage of specialized frameworks and languages as long as they are addressing the technical & business requirements.
Test and Learn Architecture early and often : The microservices Decomposition patterns contributes enough in this part. We have chosen the decomposition by business capability which facilitates the learning path in our organization.
Architecture enables agility : Microservices helps to reduce the blast radius in cases of issues or changes.
3- Microservice as an Agile product
Here is an illustration of the common principles to maintain technical alignment and cohesion.
4- Architecting for Quality with Quality Attributes
Understanding quality is the first requirement as Quality is influenced by 3 forces (Environment, Usage and Business Context). Microservices patterns are good as they are naturally organized in the Systems thinking approach :
Decomposition Patterns -> Design of the service components and service boundaries.
Integration Patterns, Database Patterns -> Design of service components interactions.
Cross-Cutting Patterns, Observability Patterns -> Design of the service components environment and evolving context.
Once the quality attributes have been identified, we can then apply a built-to adapt strategy using some Microservices architecture principles : Scalability, Resiliency, Availability, Flexibility, Auto-provisioning, …
References
[1] Becoming an Agile Software Architect Book by Rajesh R V
[2] https://perspectives.mobilelive.ca/blog/value-of-tdd-bdd-ddd
[3] https://dzone.com/articles/design-patterns-for-microservices