|
|
||||||||||||||||||||
| Home > Software Quality News > Using iterations to help balance priority and risk | |
| Software Quality News: |
|
||
Imagine a parallel universe where idealized development occurs. All features selected for a software development project are reasonable, stable, and free of both contradiction and risk. Each stage of development fully delivers all the features that were planned for it. Thus, estimates are perfect predictions, and there are no surprises. Returning to our universe, reality is played out slightly differently. Software development is a multivariable challenge. Estimates are estimates, not predictions, and there are many surprises. Iterative and incremental development is motivated by a need to elicit feedback, reduce uncertainty and offset the common tendency to underestimate large tasks. Prioritizing business value
Even if stakeholders insist, "But they're all high-priority requirements!" not all requirements will have the same value. If everything is important, then nothing is important. It therefore makes sense to focus development effort on the higher-priority items ahead of the lower-priority ones. Priority is typically rated on a simple scale (e.g., high to low, 1 to 5, MoSCoW), but in principle it can be with respect to a global ordering of all requirements -- this is trickier, but such relative placing can unblock stakeholders who insist that everything is high priority. But what is the role of iteration from this point of view? Isn't development now simply a matter of working through the backlog of requirements in order of descending priority? Why do we need iterations? Because there are surprises, because we need to be able to get feedback on progress and on substance, and because priorities are dynamic rather than fixed. Quantum time As for the ideal iteration length, advice varies, but the general consensus appears to be between one and six weeks, with around two and four weeks (or one month) being the most popular. XP2 describes a weekly cycle. Classic Scrum favors 30 calendar days per sprint. The Eclipse Foundation uses six-week iterations. Any longer than six weeks and it is likely that the sense of rhythm diminishes, focus wanders and feedback becomes less visible. In some cases, particularly for short projects, the question of iteration length should also take into account the number of iterations. A four-month project is probably better off with eight or nine two-week iterations than four monthly iterations.
Iterations with elastic rather than fixed deadlines are less likely to give useful feedback on how much progress a team is making. They are also likely to mess up the comfortable rhythm of demonstrations and kick-off meetings, which often involve arrangements with stakeholders whose diaries are already filled with meetings and uncertainty. Elastic iteration end dates dilute the meaning and significance of iterations, becoming another abstract milestone in the diary that just comes and goes. Although it is popular for teams to claim to be practicing agile development, many fail to pass even the simplest test of iterative development. The first part of the Nokia Test for Scrum, for example, focuses on iterative development. It includes the stipulation that a team must be using iterations timeboxed to less than six weeks in duration. Accounting for risk As a principal driver business value is a sound one, but it should not be the only driver. It needs to be tempered with a sense of responsibility and appropriate wisdom. One aspect of appropriate wisdom is the understanding of business value. Although business-focused stakeholders are in a better position to assess this than technically focused developers, that does not make them instant experts. There is still scope for learning when it comes to understanding the relationship between business value and software features. I still find many business stakeholders who fail to distinguish between want and need. And it is all too easy to become distracted by the pursuit of detailed features to the exclusion of the bigger picture, the actual desired outcomes. Another aspect of appropriate wisdom is development skill. The development team is in the best position to assess development implications and duration, but this still takes learning. The most relevant form of learning in this context is related to risk. Risk is related to uncertainty, not just hard work or complexity -- something can be known to involve a lot of work, but that it takes time and effort is unsurprising. Risk is about having something jeopardize the viability of delivery, product or company. Uncertainty can arise from any one of the question words: how (technology, architecture), what (requirements), why (business case, individual motivation), when (change, delivery), who (developers, stakeholder roles and responsibilities), and where (offshore, near-shore, in-house).
In this sense, much risk relates to things that we don't know, and one of the best ways of dealing responsibly with things we don't know is to learn about them. Much risk can be reduced by taking advantage of the feedback-supported learning cycle inherent in iterative development. Of course, there are risks that are beyond a team or a company's control, but being unable to distinguish these is perhaps an even greater risk. Risk-driven development However, using risk as a development driver is not about ignoring business value. It is complementary rather than contradictory. It can help to introduce a more meaningful partial ordering over features that are otherwise prioritized as equal. Risk can be pulled forward from the end of the development cycle. On the other hand, being risk-driven does not necessarily mean attacking all risk up front. It may make sense to look for some easy wins early on, giving a team an opportunity to gel and get in the swing of the project, before tackling some of the riskier items. There are other reasons to defer certain risks, but the take home message is that without making risk an explicit consideration in development it is likely that it will become an implicit problem. But beware of false risks. For example, big use cases are an artificial risk. You should be able to single out specific and nameable scenarios or split use cases with goals that can be separated into distinct and disjoint goals. Use cases with a laundry list of variations and large bodies of description are worth rethinking -- go back and recast them using index cards. The risk being addressed is easily handled by restating the problem; it is not a risk related to the solution or the business. -----------------------------------------
'); // -->
|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| About Us | Contact Us | For Advertisers | For Business Partners | Site Index | RSS |
|
|
|
|||||||