The Essence of Software Engineering with the SEMAT Kernel: Planning an Iteration
The art of planning an iteration is in deciding which of the many things the team has to do should be done in this iteration—the next two to four weeks. Every iteration will produce working software, but there are other things the team needs to think about. They need to make sure they develop the right software in the best way they can. The kernel helps the team reason about the current development context, and what to emphasize next, to make sure a good balance is achieved across the different dimensions of software development.
You can think of planning an iteration as follows.
- Determine where you are. Work out the current state of the endeavor.
- Determine where to go. Decide what to emphasize next, and what the objectives of the next iteration will be.
- Determine how to get there. Agree on the tasks the team needs to do to achieve the objectives.
In our story, because of the way the team chose to run their iterations, the iteration objectives were put into the team’s iteration backlog and broken down into more detailed tasks. In this way the iteration backlog served as the team’s to-do list. We will now look at how Smith and his team used the alphas to guide the planning and execution of an iteration.
8.1. Planning Guided by Alpha States
When you plan an iteration the alphas can help you understand where you are and where to go next. By aligning the objectives they set for each iteration, Smith’s team made sure they progressed in a balanced and cohesive way. This relationship between the alphas, and the objectives and tasks in the iteration backlog, is illustrated in Figure 8-1.
Figure 8-1. Working from the tasks and objectives in an iteration backlog
8.1.1. Determine Where You Are
When preparing for an iteration, the first step is to understand where you are. This involves, among other things, understanding details relating to technology, risks, quality, and stakeholder needs. But it is also important to have a shared understanding of where you are with the software endeavor as a whole, and this is where the kernel can help.
There are a number of ways you can use the kernel to do this. If you are using alpha state cards, as discussed in Part I, you can do this as follows.
- Walkthrough: This is a simple approach using one set of cards.
- Lay out the cards for each alpha in a row on a table with the first state on the left and the final state on the right.
- Walk through each state and ask your team if you have achieved that state.
- If the state is achieved, move that state card to the left. Continue with the next state card until you get to the state that your team has not yet achieved.
- Move this state card and the rest of the pending state cards to the right.
- Poker: Another approach that sometimes works better is poker.
- Each member is given a deck of state cards.
- For each alpha, each member selects the state card that he or she thinks best represents the current state of the software development endeavor.
- All members put their selected state card face down on the table.
- When all are ready, they turn the state card face up.
- If all members have selected the same state card, then there is consensus.
- If the selected state cards are different, it is likely there are different interpretations of the checklists for the states. The team can then discuss the checklists for the state to reach an agreement.
Using state cards is not required to use the kernel, but they are a useful tool to get the team members to talk, and to discuss what state the endeavor is in and what state they need to focus on next.
Once you have determined the current state of the endeavor, you can start discussing what the next set of states to be achieved should be.
8.1.2. Determine Where to Go
Identifying a set of desired alpha states guides the team in determining what to emphasize in an iteration. In fact, the iteration objective can be described as reaching a set of target alpha states.
Once the team has determined the current state of their alphas, it is fairly easy to select which of the next states they should target in their next iteration. The target states make well-formed objectives as their checklists provide clearly defined completion criteria.
Selecting the target states can easily be done as an extension to the walkthrough and poker techniques described in the preceding section.
8.1.3. Determine How to Get There
After identifying a candidate set of objectives for the iteration, the team has to decide how they will address them and whether or not they can achieve them in the iteration timebox. Typically this is done by identifying one or more tasks to be completed to achieve the objective.
Again the alpha states help the team with the checklist for each state providing hints as to what tasks they will need to do to achieve the objective. In this part of the book we are just considering a small software endeavor. Later in the book we will discuss how you identify tasks and measure progress on more complex efforts.