Awhile back I wrote a post called The Cone of Sanity about how priorities can change like crazy leading up to an iteration, but that once the work hits the development team, it should stay pretty firm for the duration of the iteration.
I received a comment that raised a great (and common) question that is worth posting on its own.
The Question
I've found that this can work sometimes, but often the customer (in my case, the marketing department) demands changes now, NOT in the next iteration. This happens a half dozen times every iteration. How would you handle this kind of a demanding customer?
My Response
I agree that this can be a tough one. One of the main points of Agile is to remain flexible, but disciplined. I have worked and consulted at very fast-paced, dynamic companies where developers had 100% planned workloads but spent another x% handling ongoing requests. And while some requests were completely necessary, some were probably less pressing than some of the work already on the plan. Common examples: “But I already bought the ad space to run in 2 days!” or “We need to match a competitor’s offer NOW!” Developers were frazzled, releases were delayed and buggy.
I've found that you have a few options for improving the situation.
- Shorten your iterations - Consider shortening your iterations, e.g. from 2 weeks to 1 week. Most high priority (but non-critical) items could wait for the next iteration.
- Require department signoff - For the critical “rush jobs” we’d just take on easy things like misspellings, but anything that would actually impact the schedule had to be signed off by the relevant department director. This led to priority discussions within the departments. In the end, many of these critical issues had their priorities downgraded by their own division directors because they really weren't that pressing and conflicted with higher priority work already in the plan. Sometimes this led to self-selection, since on further reflection, it probably wasn't high priority enough to bother the director.
- Build in "on-the-fly" time - As we identified how much time was spent on planned work vs. on-the-fly requests, we started building time for these on-the-fly requests into our schedule.