Today we had some interesting discussions in our organization about departmental bottlenecks and the fact that even though we are fully immersed in Scrum that code is still delivered near the end of an iteration making it difficult or impossible for the test team to complete the testing of stories before the iteration end.
One issue our product owner brought up was that we are bumping up against the team's average velocity and only accepting that many points in an iteration, and while this in theory is the correct idea it doesn't necessarily take into account a good work flow for utilizing resources or setting a good cadence for having smaller effort stories upfront, medium effort stories delivered in the middle and larger stories delivered at the end.
Here are some ideas that I came up with:
- In addition to the top priority stories equalling your team's velocity, discuss several lower priority small estimate stories (5 or less points)
- Determine the best order for stories to be worked on, not only based on priority but by breaking the iteration into 3 phases. (1st period, 2nd period and 3rd period) I like hockey so I use this analogy.
- Now discuss stories based on what can be delivered in the 1st period the goal is to find a story that development can be handed off in a day, testing can be completed the next day and any reworked completed in the next day. Also you can identify any of the larger stories pieces that can be delivered and testing started within that first period.
- Next discuss stories that can be delivered in the 2nd period, items that will take longer than 3 days to fully code, or pieces of larger stories that take longer than 3 days to code that testing can start on during the 2nd period
- Lastly discuss the 3rd period items that need to be completed and ready for potentially shippable deliverables at the end of the iteration. This could include discussing what stories would be good candidates to pull into the iteration if time and velocity permitted.
- Other ideas to ensure a good cadence within an iteration is to plan on having a story or defects roll over, so basically accept more points within an iteration knowing that you would not get all of the work (probably not the testing or documenting) and that those tasks would carry over and provide a better cadence for the entire team.
- As I discussed with the QA team and the product owner organizing your iterations into periods should provide a better organization and even out the peaks and valleys for any teams that are still maturing through the specialized phase of Agile maturation.
- Ultimately as a self-organizing highly responsible team, they all should be less concerned about having testing items for testers, or no coding for developers and they should look at the priorities and determine how to complete the top business value with all resources on the team and with any team member taking the remaining open tasks and finding a way to complete them.
- Another approach is promoting static testing early and often and making sure that quality as important to the team as delivery, this way more test driven development approachs can be implemented and will reduce the rework and increase the quality. This can be done by the test members by creating test checklists, doing code or implementation reviews and testing in non-official environments to provide information quickly to the team.
Interestingly I interviewed a person for scrum master today who said that in the real world coding and testing are serial actions and require different iterations or elongated iterations that have the classical dev to test hand-offs. I was really not for this idea, and have actually tried it and my experience with it is it segregated the teams and allowed them to have different priorities. While this is an approach that can be implemented and can solve some of the cadence problems I worry about the precendent that this sets through out an organization, now it takes a longer iteration or at least 2 iterations to have potentially shippable software. I really think that this becomes a problem or that this becomes the solution when people do not want to undertake the tough changes that need to occur on an organization, employee responsibility and philosophy level to truly adopt and Agile process.
Lastly, I am truly irked by the continued statement of QA or Test bottlenecks and have been making the argument that these items cannot exist in an Agile team. You should have a fixed set of resource on a team that fluxuates very infrequently (this is how it is where I work), those resource each have different expertise, however any person on the team can try to do anything required including writing docs and testing. So any items that cannot be completed or added because their is insufficent testing cycles with a set number of resources then becomes the guage for the team on how much work can they truly start and finish within an iteration. If you look at it as what can developers accomplish, and then can QA test everything they coded and the answer is no, then the premise is that QA is a roadblock to getting items completed. This could or could not be true but it really comes down to determining those factors.
- Is there a good cadence for story delivery or is coding taking up 8 days of the iteration leaving testing to the final 2 days.
- Are UAC's poorly defined or changing on a consistent basis causing the team to be unsure of what needs to be validated or changing the previously defined size of the story
- Are new priorities (support of a product) getting in the way of completing coding or testing
- Are stories coding being finished but no integration or unit testing happening thus have a high defect find rate blocking test completion.
- Are more than just testers reviewing tests, writing automation and focused on quality or is that still left up to the test resources
- Are testers asked to do items outside of testing stories, such as doing performance or support of previously developed stories, that is not accounted for in the team's tasking for the iteration
- Are developer unwilling or unable to allow testers to test in sandboxes
- Are developers unwilling or unable to hand off code in increments that can be tested
- Are their UAC blocking defects that block the continued testing for a story
All of these items can contribute to what looks like a QA bottleneck but in reality just point to different obstacles, or improvement areas for the team to focus on and fix.
I will argue that there cannot be a department bottleneck in a fixed resource Agile team, just a lack of planning, understanding velocity and utilization of every resource on the team working towards common goals and priorities.
