Divide and conquer.
We took the following approach. We established a run team.
The run team handled customer support issues and fixed existing production defects.
Members from other teams would rotate through the run team every iteration.
Thus, no one was stuck supporting production perpetually and everyone had an
opportunity to learn what our production support issues were.
By having a few developers focused on production issues per
iteration, the run team’s productivity would increase as they did not have to
switch between new feature development and defect fixes. The run team also
provided a firewall to the teams focused on new feature development. By
protecting the feature teams from interruptions, the feature teams’
productivity also increased thus protecting our product roadmap.
We created the following metaphor. We would call defects in production “water in
the boat”. The run team would fix defects in priority order. By taking this
approach the run team was able to empty the “water in the boat” i.e., fix all
production defects over a sequence of iterations. We developed a zero tolerance
policy regarding defects and we did not cut corners. We would have entry an
exist meetings for each defect, just like we did for features and we would test
drive our fixes. This helped ensure that we fixed defects right the first time
and with test wrapped around the fixes they would squeak should some future
change break what had been fixed.
Meanwhile, the feature teams were busy adding new features
to our product. Initially, we did not have our regression tests automated.
Thus, after an iteration, we would find that we introduced new defects into our
product. The introduction of new defects was called “leaks in the boat”. These
leaks existed in spite of pairing, TDD and ATDD. All of these practices did
contribute significantly to the quality of our product but did not get us to zero
defects. Only when we put in place an automated regression suite that ran daily
against all customer configurations were we able to plug the “leaks in the boat”.
The metaphor of “water in the boat” and “leaks in the boat”
was a powerful one. It helped everyone visualize an important goal for the run
team and the feature teams. Developing a zero tolerance policy for defects did
much to reduce our cost and increase our velocity. By having practices in place
that ensured what was built today would not need to be fixed tomorrow, it enabled
the teams to remain focused on new features and not be distracted by fixes.
We still have a run team, and it does handle the occasional production
support issues. However, it now spends the majority of its time working on
small enhancements that improve our product and customer experience but by themselves
would never make it to the product backlog, which highlights another point. We
have learned there is a benefit to providing some limited capacity for those
small features which by themselves never make it to the backlog but in aggregate
improves our product and brings benefit to our customers. It has made the
difference between a good product and a great product.
No comments:
Post a Comment