Flylib.com

Books Software

 
 
 

Have You Heard This One Before?


Have You Heard This One Before?

"Sometimes I hear software development project managers say 'We'll tackle that risk later; that'll give us much more time to think about it while we're doing all the easy stuff.' Whenever I hear that, my blood pressure goes through the roof!" exclaimed Roscoe.

"Ah, Roscoe, I know where that wrong thinking comes from," I said. "It's what we tell American students about how to take tests in a time-constrained setting. Over and over again, we admonish them to do the easy stuff first, to 'get money in the bank' and reserve the remaining time at the end to work on the harder stuff. The logic is to get as much credit as you can for what you know, and 'don't leave money on the table' because you run out of time."

Roscoe reflected for a moment. "Well, that might be a legitimate strategy for certain environments. The problem is, software projects are different. You don't get partial credit for an unfinished project the way you get partial credit for an incomplete test. In project settings, you must solve the hard problems. So the situation is not only not analogous; it is diametrically opposite ."

I agreed. "So what you're saying, Roscoe, is that the idea that a team will work on the 'hard' or 'high-risk' problems in the background is an exercise in wishful thinking, because:

  • While the team is working on 'the easy stuff,' they will not be thinking about the deferred risks. Teams have difficulty focusing on too many things at once, and once they start working on the easy stuff they will forget about the risky stuff they deferred. 'Out of sight, out of mind.'

  • Parkinson's Law says that the 'easy stuff' will expand to fill out the schedule. This will squeeze out the harder, more risky stuff. I have seen this happen over and over again. After taking 20 to 30 percent longer than expected on the soft issues, sometimes due to excessive perfectionism, the team finds itself behind schedule. Then it gets hit with the really hard problem. Which, of course, was there all the time; it didn't go away because they ignored it.

  • The net result is that the team winds up having less time to work on the hard problem rather than more time.

  • And here's the ultimate disaster: Sometimes, to solve the hard problem, you have to throw away the work you did on 'the easy stuff' and do it all over again."

I concluded with, "So once again, the moral of the story is: Prioritize your risks, and attack the biggest ones first. If there is not enough time left over to do 'the easy stuff,' then you were certainly going to fail anyway."

"Now you're striking oil, Sonny," said Roscoe, and added one more cogent observation to supplement mine: "If I were behind schedule, I would feel much more comfortable going to my boss and asking for more time if I could demonstrate that my team was executing on a plan that had already squeezed out most of the risks . On the other hand, if I had to admit that not only were we behind schedule but also that there were still high-risk items on the table, I'd be in a very weak negotiating position. I probably wouldn't get my extension, and the project might be cancelled. And maybe it should be."



More on Applied Learning

It was all coming together for me: short vectors, risk targeting, and hard problems first. One thing really hit me between the eyes: In iterative development, we are forced not only to learn as we go, but also to use what we have learned.

I pointed out to Roscoe that we can't plan the next iteration unless we take stock of what we learned in the previous one. There is no "autopilot" in iterative development; we can't be asleep at the switch. In some sense, iterative development not only encourages applied learning: it demands and requires it.

"Contrast this with organizations that don't develop iteratively," said Roscoe. "How often have you heard people say, 'Well, that's a mistake I won't make on my next project,' or 'We'll have to remember that for next time'? This happens because their project plan is so rigid that they cannot incorporate lessons learned right away. They have a 'plan of record' that either can't be changed or is very difficult to change. This is tragic for two reasons: One, the team becomes resigned to 'going down with the ship' because they think it's 'too late' to change the plan; and two, because the lesson will likely be forgotten by the time the next project rolls around, and the same mistakes will probably get repeated."

The vein on Roscoe's temple was starting to bulge, so I knew we were approaching a crescendo. "This is 'planning' run amuck," he exclaimed. "It amounts to confusing the map with the territory. Or using a tool as an excuse for failure. If the current plan is going to lead to disaster, then CHANGE THE PLAN!!!" He slumped back in his chair .

I had to agree. Iterative development mandates that you immediately apply the lessons you've learned on this project to all successive iterations of the same project . As any educator can tell you, learning is most efficient and effective when you apply lessons learned as soon as possible. This is a very crucial difference between iterative and waterfall development. Iterative development insists that you "strike while the iron is hot," even if it involves pain; if you apply the right technique while the pain is still fresh, then everyone involved will remember the lesson better and longer.