Scaling and Architecture
ByOne of the concerns about Agile has been how to scale in a large enterprise system. How do you coordinate teams and have them provide a product that is based on a consistent architecture?
Some approaches are as follows:
- Do a big design up front and design the architecture that everyone has to follow
Well BDUF do not withstand the test of time. We know any architecture will be modified as soon as we start programming. - Have an architecture review board
This ends up being a bottle neck in the process. These architects are not really doing the coding so they do not always understand the issues that are being faced. - Do nothing and let the teams be
Well this is tempting and just let the architecture emerge from each team. But you lose consistency really fast. Also, the individual components do not work together well. - Use the Scrum of Scrums meeting
This is a meeting that focuses mainly on inter-team impediments. We have to remember to keep our meeting focused on their agenda and not to try to do to much in one meeting.
So I propose that a formal community of practice is the answer to this problem. We must recognize that teams left to their own will approach architecture is different ways. This is of real concern on a large project with multiple Scrum teams.
What is this community of practice and what do we expect of it?
- A weekly meeting with one developer from each team
This has to be an regularly scheduled meeting. It can range in length from 1 to 2 hours. I recommend that the developers be rotated who represent the team and make this a monthly rotation to keep consistency. - Each team presents the code they have developed during the last week
This is a high level review of the code. At this time the architecture of the code is reviewed.- Does the code follow best practices?
There should be automated tools to help enforce best practices. So the question here may be one of accountability. - Does the code enhance the overall design of the system?
- Is there duplicated code between the teams?
- Where can the code be more efficient?
- Does the code follow best practices?
- Each team is responsible for refactoring their code
The changes will be agreed to by the community and implemented. With this continuous inspection the architecture can be refined and adhered to.
One of the guiding principle of Agile is continuous inspection. The community of practice is a necessary meeting when working with multiple teams. It will scale in a similar matter as a Scrum of Scrums.