Tuesday, July 21, 2009
Test Team Changes Needed to Support Agile ... Part 1
In this blog I will be working on the Test Team and Management direction changes that need to occur.
The first thing to focus on when implementing Agile into an engineering organization is helping the test team understand that they still have a major role to play in Agile teams. This is not an easy task as most published works support the developer testing principle and do not mention software test engineers roles in Agile.
As if testers do not have enough of an identify crisis and inferiority complex, Agile books and implementation is once again devaluing the contributions that test engineers can have on engineering teams. One thing for sure is that if your company has any legacy products there will have to be a long transition period for the Agile teams to catch up on technical debt and unit and integration testing before any team can truly do away with testing positions.
I agree that the best principle in Agile teams is having a group of individuals who are strong in coding, testing, documenting but the reality of the situation is that you have a group of experts coming together on the Agile teams that do not have the cross functional expertise to sign up for any task whether it be documentation, coding or testing.
So how do you convince your test engineers that there is still a role for them in Agile teams. Here are some options:
1. Support their role as testing experts and encourage them to bring up testing challenges for each story.
2. Help them to learn how to identify testable or non-testable UAC, this will provide immediate value to the product owner and the team.
3. Train the team in different methods of automation testing tools such as Fitnesse, Selinum or automation testing techniques like Unit, Integration or Performance Testing.
4. Get your test engineers to learn about Test Driven Development and how to move the testing upstream, and then get them involved in promoting the values to their Agile teams.
5. Implement a Lightweight Test Approach like Fusion Testing to reduce the documentation but to increase the testing quality and visibility.
More to come ....
Thursday, June 4, 2009
Setting a good inter-Iteration Cadence
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.
Monday, June 1, 2009
Department Designations in Defining Tasks
So a testing expert could pick up a coding task, a coding expert can pick up a documentation task or a documentation expert could pick up a testing task. If the team and the product owner are supportive, even in a team that has silo'd knowledge they can begin to break that down and begin to cross train each other and remove barriers to getting specific tasks completed.
I consider everything in a agile team development whether it be the code, the tests, the documentation, the training, the marketing material all of these items need to be developed, reviewed, and published and all of these go into having a potentially shipping product at the end of the iteration.
So in this light, the teams that I work with have gotten into the habit of labeling their tasks in the following manner:
- QA - test the system
- TP - document the system
- develop/write the code for the system
Instead of designating departments I would like to see the tasks defined by what the action is, or even more preferably is to utilize the idea that task in Agile is a development task. Here is how I would define the tasks:
- develop the test, automation and execution to validate the system
- develop the documentation to enable a user to utlize the system
- develop the code to meet the UAC of the system
Agile Metrics - What Management Wants to Know!
• Only measure a story when it has passed all User Acceptance Criteria and the team agrees it is done.
• Capture the priority (P) of the story. (P1=100 points, P2=75 points, P3=50 points, P4=25 points)
(Key Measure - Not enough emphasis on higher priority stories)
• Capture the number of iterations (I) that it took the team to achieve done & pass UAC for the story.
(Key Measure - Average number of iterations larger than 1
• Number of Story Points (D) (Difficulty)
(Key Measure - Stories are being estimated incorrectly, or stories are defined at the wrong granularity.)
• Number of Tasks(S) (Size)
(Key Measure - shows the amount of work needed to complete the story.)
SCV = (P/I)*(D+S)/100
For example a Priority 1 story is completed in 1 iteration achieving 100 points.
It had a small degree of difficulty - story points = 8 points
It also had a few tasks - 4 tasks
SCV = 24, if the same story was completed in 2 iterations it would have a SCV = 12
You calculate the SCV for each story that was completed in the month and trend the number for the entire organization. Once data is collected you can then notice trends and corrective action you can take within the agile project teams and review it during your scrum master brainstorming events.
For instance if your average iteration completion for a month is 2.1 then the scrum masters should work with the product owners to break down stories further, or brainstorm with the team on why it takes more than an iteration to complete a story. It could be that the UAC cannot be completed for some reason.