Recently, Dimitri Zimine wrote an excellent little story about context switching. Joel Spolsky writes in “From the ‘You Call this Agile’ Department“:

Dmitri is only looking at one side of the cost/benefit equation. He’s laid out a very convincing argument why Sarah should not interrupt her carefully planned two week iteration, but he hasn’t even mentioned arguments for the other side: the important sale that will be lost.

Okay… I’ll bite.



Let’s look at that argument from the perspective of the sales person first since that is where Joel’s concern starts:

The Sales Guy Perspective

“I need the ‘ezhibal’ feature now! Big bucks coming soon if we can get it now.”

Let’s suppose that this urgent email has come in somewhere near the start of our two week iteration. The normal response to this in Scrum is to push back a little. The ScrumMaster says something to the effect of: “Look if you wait 7 days we can put this on the top of the list for our next iteration.”

First reaction, and it’s a normal one, is for Sales Guy to freak out. I’ve actually heard people saying things like “You’re going to lose your job over this! I’m getting the VP involved and he’s not going to like it” and then they stalk off to find the big dog to come and bark at us. Anyway, let’s pretend that the Sales Guy is willing to be reasonable and not instantly escalate the “problem”. So what he actually says is: “Look, this is super important, it’ll probably only take a few minutes for us to talk about it and then we can figure out how long it will take to fix. Let’s just do a quick phone call and yadda, yadda, yadda, blah dee blah…”

Enough of the Sales Guy perspective.Nowadays, if I’m in this situation, I do a value assessment. I tell the team to keep working on their plan, nothing’s changed yet, and I sit down with Sales Guy and the person who’s sponsoring the current work and we start a discussion about the options of which there are really only two that work in Scrum:

Stay the Course Cancel the Iteration

First, let’s talk about how we decide which option to take. Then we’ll talk about why.

Deciding on the option is easy. You look at the value of the work currently being done and compare it to the value of the work that Sales Guy needs. You take into account probabilities. If Sales Guy doesn’t have a signed contract, then it’s hard to say if there’s going to be any real revenue from the ‘ezhibal’ feature. Still, you might be able to do an assessment of the probabilities based on your level of trust and history with the client, etc. You also need to take into account the time value of money. Does delaying the current work have consequences for another client or stakeholder? What is the cost of those consequences.

This is a relatively simple cost/benefit analysis and comparison. If you’re not comfortable with money and numbers and spreadsheets, you better get comfortable!

Okay, so we have a way of comparing the two bits of work. Now let’s look at the two “allowed” responses and a third “bad” response.

Stay the Course

Turns out that the potential benefit of the stuff Sales Guy wants is not quite as high as the potential benefit of the stuff that Suzie Stakeholder prioritized for the current iteration. Well, that’s easy. Put the request from Sales Guy in our prioritized list of work and get to it when there is an appropriate level of benefit relative to the other work.

Cancel the Iteration

The stuff Sales Guy wants is super-valuable. So let’s get the whole team to stop what they are doing and everyone supports this very valuble work. Stopping the whole team is appropriate because obvioulsy, the stuff they’re working on isn’t as valuable. Oh, and because we treat a team as a unit in Scrum. And because the team needs to commit to work, not individuals. This isn’t so obvious… more later.

Peel Sarah off to do the ‘ezhibal’ Feature

This is what normally happens, and in a “normal” non-agile environment, it’s probably okay. In a non-agile environment, Sarah hasn’t made any commitments (she’s been forced to agree to dates and scope, etc., but she hasn’t made a commitment that she is empowered to live up to). So if she goes off and does this one little thing, it probably will be just business as usual. In an agile environment, the team has made a commitment and doing this work this way invalidates the team’s commitment.

Why do we do it this way? The main reason is around trust and commitment. Yup, it’s that soft icky stuff that we’re so incredibly bad at that customers think that bugs are normal, that management shoves the kitchen sink into projects in the frustrated hope that they’ll get something out of the IT team at the end of the project. Sound familiar to anyone?Anyway. An iteration is a commitment. It is a firm and solid commitment. The team as a group of smart and honorable people is making a definite commitment to the rest of the organization to get a certain amount of work done in a fixed amount of time. In return, management is agreeing to give the team every support in reaching this commitment. When a team is new at this, they might get it wrong. But having done this with dozens of teams now, I know that after a few tries, the team gets the hang of it and commits to appropriate amounts of work, and management provides appropriate levels of support.

This commitment is essential for developing trust. And anything that comes in the way of the team meeting its commitment is considered “BAD”. An obstacle to do away with.

This is interesting, because Joel’s second example is about defects. And I strongly agree that defects are “BAD” and need to be dealt with at a very high level of priority. The reason is simple: they prevent a team from meeting its commitment.

One team I was coaching was constantly bombarded by these types of it’ll-just-take-a-few-minutes-need-it-asap requests. They had many stakeholders and very very limited resources to service these requests. They had several small projects that were taking literally years to do because they couldn’t get enough concentrated time on any one thing. This was considered normal and good in their environment.The trouble is, no one had really looked at the overall consequences. Everyone was doing local optimization. For us geeks, we all know that local optimization is something to be avoided if possible. We climb a peak only to discover that we have to climb back down a ways to get up to the higher peak we now see is next to this one. We climb up that one only to discover yet another higher peak even further along thus requiring us to climb down and up again… When really what we should have done is stepped back a ways, looked at the lay of the land and said, “hey, that peak over there is the highest of them all, let’s go climb that one.”

Scrum helps us avoid local optimization by forcing all feature requests for a team to be prioritized in a list of work, and by allowing the team to complete small pieces of work so it actually gets _something_ done that you can learn from.

Joel said:

Agile is not supposed to be about swapping out one set of bureaucratic, rigid procedures for another equally rigid set of procedures that still doesn’t take customer’s needs into account.

True enough! But it also demonstrates a serious lack of understanding about what is being done in Dmitri’s example! First of all, without being agile at all, it is possible to switch from 18 month projects to two week projects. Both can be bureaucratic as you please (well, actually, there’s only so much bureaucracy you can cram into two weeks and still get something done). The shorter projects will allow you to be much more responsive to customer needs… by definition!

So what happens when you add in all the other things that agile really is about? Transparency. Truthfulness. Creativity. Learning. Meta-Learning. Prioritization. Self-Organizating Teams. Eliminating Waste.

Well, first of what you get is something that’s damn hard to do right. It goes against almost everything we’ve been taught to do: the extreme of heroics of the extreme of careful planning and process.

Secondly, what you get is something that needs safety zones and meta-rules. Like mutual, freely-given, team-to-stakeholders commitment. Like assuming positive intent.

And thirdly, what you get is an environment where not only is the business getting what it needs more than it used to, but also, the team likes working with the business, and the business likes working with the team.

I admit that the point Joel is making isn’t too different. Yes: look at the costs and the benefits. But agile isn’t quite about instantaneous responsiveness. That’s a red herring and I’m suprised that Joel threw it’s stinky carcass into the discussion. Agile is also about balancing that responsiveness with the overall view of value for the team and the organization. The tool for doing that is the prioritized list of work, not the email message from Sales Guy to Sarah.