Archive for design
Pre-Planning or Sprint 0
Posted by: | CommentsAdopting Agile in an large organization presents many challenges. This is especially true when a project contains multiple teams that have to create an unified product. One must be able to parse a project so that individual teams can work on a sub-system and have it integrate smoothly with the product.
In the organization I work with we have added a new step in the process. I will call this our Sprint 0 iteration. This iteration is used to create the initial backlog for the release. The participants in the meeting involved the team working doing the programming, the lead architect, best practices team, product owner, service representatives, user interface designs, quality assurance and management.
The goals are as follows:
- Understand any major architectural issues
- Identify where the software has to interface with external subsystems
- Define how to communicate with external systems
- Define the overall system constraints
- Have the product owner clarify the requirements
- Define the initial user stories.
- Size the user stories
Even though I believe very much in team making its own design choices, having the experts available to assist the team is very beneficial. This allows us to better understand what we are developing. This has given us a level of confidence in our estimations for the upcoming sprints.
This does not minify the role of the product owner during a sprint. Their involvement is very critical to the team maintaining their velocity during a sprint. The product owner has to constantly reviewing the working software to make sure we are on track with the expectations.
Scaling and Architecture
Posted by: | CommentsOne 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.