Monday, August 12, 2019

Agile Architecture within Scrum

You are applying the agile, lean approach to your software product development. Your teams use Scrum or Kanban to deliver running software every two weeks.

Agile architecture is a key element to improve the quality of your product and reduce cycle-time of your product outcomes.

Your journey toward greater business agility starts by identifying what outcomes are most important to your company’s success. A key component is to find out how to create great architecture within the Scrum framework.

What Is Agile Architecture?

An agile architecture shall have four characteristics.

  1. Allow change quickly - because we cannot foreseen the future -
  2. Always verifiable - because we want changes without impeding integrity -
  3. Support rapid development - because we want effective and efficient implementation of new features
  4. Always working - because we want continuous deployment to have customers' feedback -
These characteristics are essential for successful agile development of great software products.

What Is The Scrum Approach?

Scrum is silent how architecture shall be performed during sprints. We can use the Scrum values, the Scrum guide and the agile manifesto principles to infer it.

The architect shall be part of the Scrum development team. This is the most embedded way an architect would fit into a Scrum team. It may not even be an individual who has the title of architect, because the big idea behind Scrum teams is that team members have different skills and their roles may change to deliver what is required for a particular sprint.

So it could be that senior developers within the team got architecture skills, or are in the best position, or have the best knowledge, to make those architectural decisions. Those team members with architectural skills are involved in the sprint on a day-to-day basis. They attend the daily Scrum meetings, take items off the backlog, and work on them.

Interestingly LeSS is more opinionated and describe successful approaches for agile architecture and design.

How Do You Perform Agile Design?

Scrum is silent about technical practices. The Scrum fathers and community strongly emphasize to adopt eXtreme Programming practices. For bigger systems use the good practices described in LeSS.

An actual very good practice is to use event storming and domain driven design to model the application domain and partition the system.

Use fitness functions to monitor and validate continuously all non-functional requirements.

The well-established practices from the object-oriented and DevOps communities are
  • Develop very early a working skeleton,
  • Clean architecture implies clean code and requires clean coders in your team (see our post clean code),
  • Aggressive refactoring and understand technical debt,
  • Continuous integration, continuous delivery, and continuous deployment.
For a detailed discussion consult the post Pragmatic Craftsmanship.

What is the Architect Role?

The architect shall
  • Be part of the team, work daily with team members and attend all team events,
  • Maintain the pace of development,
  • Communicate often and early as a coach and mentor - meaning pair programming and design sessions -,
  • Be fluent in domain driven development, hexagonal architecture, refactoring, and clean code,
  • Use architecture design record ADR and light documentation to describe architecture decisions - meaning no lengthy Software Architecture Document SAD or overwhelming UML models -,
  • Be a master programmer and writes code in the application technological stack. He writes actual source code as current good practices are,
  • Have rich knowledge of architecture and design. We have mentioned refactoring, which is how we evolve an ever-improving design and architecture while building the product incrementally. To do that, we need to know the difference between good architecture and design and not-so-good. We need a rich pool of architecture and design options in our bag of tricks, ranging from very simple options to the more complex and rich options that we may need as the system grows. One never knows too much about the quality of architecture, code, and design. One does, of course, need to apply that knowledge smoothly, incrementally, little by little.

Agile Architecture Series

The agile architecture track contains the following blogs
We also published our agile architecture course (3 ECTS) used for teaching computer science students at bachelor level at Swiss technical universities.



No comments:

Post a Comment