In Inception, the top risks are often either business risks or technical risks. The dominant business risk early on is
typically ensuring project funding. Thus, a proof of concept prototype is often the result of the inception phase. The
proof of concept prototype either demonstrates key functionality or some essential technology.
The first iteration of a new product is usually the hardest. There are many new aspects a first iteration must achieve
besides producing software: For example, putting in place the process, team-building, understanding a new domain,
becoming familiar with new tools, and so on. Be conservative in your expectations about how much of the architecture
you can flesh out, or the degree of usable functionality you can achieve. If you aim too high, you risk delaying the
completion of the first iteration, reducing the total number of iterations, and hence decreasing the benefit of an
iterative approach. The first iterations should be focused on getting the architecture right. You must therefore
involve the software architects in the planning process of early iterations.
In Elaboration, the iterations focus on defining a stable architecture, on designing and implementing the essential
behavior of the system and exploring the technical architectural issues through a series of architectural prototypes.
"Architecturally significant" scenarios are sub-flows which exercise the architecture of the system in defining ways.
Toward the end of Elaboration, and during Construction and Transition, change requests (also known as Software Change
Orders or SCO's) begin to drive the iteration process. SCO's result from the following:
-
enhancement requests
-
change requests whose scope goes beyond the individual package or class.
-
changes in the iteration scope and objectives.
-
changes in requirements either proposing that the requirements baseline be changed, or accommodating an accepted
change to the requirements baseline.
These SCO's are balanced against the existing project plan, iteration plans, and the existing risk list. SCO's may
cause the priority of requirements to be re-evaluated, or may drive the re-prioritization of risk. SCO's must be
managed carefully, however, lest project control be lost.
During Construction and Transition, the focus is on fleshing-out the architecture and implementing all remaining
requirements.
Unlike the Waterfall model, where the entire system is considered at once, we only consider a portion of the
functionality of the system in each iteration. During each iteration, a subset of the total system is analyzed,
designed and implemented. The choice of what the subset should be and how deep to delve are critical to reducing risk
in subsequent iterations. There are two basic strategies: Wide/Shallow and Narrow/Deep.
In the Wide/Shallow strategy, the entire problem domain is analyzed, but only the surface details are considered. All
Use Cases are defined and most are fleshed-out in great detail, to get a clear understanding of the problem at hand.
The architecture is defined broadly as well, and the key mechanisms and services offered by architectural components
are defined; the interfaces of subsystems are defined, but their internal details are detailed only where significant
risk or uncertainty must be managed. Very little is implemented until Construction, where most of the iteration occurs.
The Wide/Shallow strategy is appropriate when:
-
The Team is inexperienced, either in the problem domain or in a technology area (including methodology or process).
-
Sound architecture is a key requirement for future capability, and the architecture is unprecedented.
The strategy has some potential pitfalls, however:
-
The team can get trapped in analysis paralysis (the illogical feeling that unless the design is perfect, one
cannot implement anything).
-
Early results are often needed to build confidence and credibility; the longer the project team goes without
producing something executable, the less confident they feel about their ability to do so.
-
Not enough of the technical details and challenges of the architecture are exposed to get a sense of the real
technical risks
In the Narrow/Deep strategy, a slice of the problem domain is analyzed thoroughly. The Use Cases related to this
narrow slice are defined and fleshed-out in great detail, to get a clear understanding of the problem at hand. The
architecture required to support the desired behavior is defined, and the system is designed and implemented.
Subsequent iterations focus on analyzing, designing and implementing additional vertical slices.
The Narrow/Deep strategy is appropriate when:
-
Early results need to be demonstrated to overcome a dominant risk, garner support or prove viability.
-
Requirements are continually evolving, making it difficult to completely define all requirements before starting
detailed design and implementation work.
-
The deadline is mandatory, such that getting an early start on development is key to successful delivery.
-
A high degree of re-use is possible, enabling a greater degree of incremental delivery.
The strategy is not without drawbacks:
-
There is a tendency with this strategy for each iteration to develop software that is vertically integrated but
horizontally incompatible. This is sometimes referred to as the stovepipe syndrome, and it makes a system
difficult to integrate.
-
It is not well-suited to developing systems in a completely new problem domain or based on an unprecedented
architecture, since a large part of the functionality of a system must be sampled in order to achieve a balanced
architecture.
Generally, early iterations will have more of a Wide/Shallow flavor, while later iterations (where a stable
architecture has been developed) tend to follow the Narrow/Deep strategy.
The first iteration is usually the hardest, since it requires the entire development environment and much if the
project team to be in place. Tool integration and team-building issues add to the complexity of the first iteration.
Focusing on the architectural issues can help to maintain focus and prevents the team from getting bogged down in
details too early.
-
Narrow/Deep strategy used in Inception
Where exploitation of a new technology is essential to the fundamental viability of the project. Many
e-business projects require new technologies to be explored to a much greater depth than might be done
traditionally. The proof-of-concept prototype is still considered a "throw-away", and merely explores the
viability of the project concept.
-
Wide/Shallow strategy used in Inception
This strategy is pursued to gain an understanding of the scope of the system, and to sample the breadth of
functionality of the system to ensure that the architecture is capable of delivering the desired capabilities.
-
Wide/Shallow strategy used in Elaboration
This approach can help develop a sound architecture, with selective Narrow/Deep focus to address specific
technical risks. In Construction, with a sound architecture established, the focus can return to Narrow/Deep,
where functionality is developed and delivered in a series of integrated increments.
-
Narrow/Deep strategy used in Construction
Construction iterations are always Narrow/Deep, with teams working in parallel to develop and deliver the
required functionality.
New teams are typically overly optimistic at first with what they can accomplish. To counter this, and to avert
potential morale problems which occur when actual results fall short of optimistic expectations, be modest in the
amount of functionality that can be achieved in the first iteration. Try to build experience while creating a sense of
accomplishment and project momentum.
If the development environment and/or methods are new to the team, reduce the functionality of the first iteration to a
minimum. Focus on integrating and tuning the environment and becoming proficient with the tools, then ramp-up the
functionality content in subsequent iterations.
Rework is good, up to a point. One of the major benefits of an iterative development is precisely to allow mistakes and
experimentation, but early enough so that corrective actions can be taken. However technical people in particular tend
to 'gold plate' or redo work to perfection between one iteration and the next.
At the end of each iteration, during the iteration assessment, the team should decide what part of the current release
will be reworked. Expect rework to be allocated among phases in the following percentages, relative to the total
system:
-
Inception, 40%-100% - this is where you may develop throwaway, exploratory prototypes
-
Elaboration, 25%-60% in early iterations; less than 25% in later iterations, or for an evolution cycle.
-
Construction, after the architecture baseline, 10% or less per iteration and 25% total.
-
Transition, less than 5%.
Rework is inevitable. When no one sees the need for rework, you should be suspicious. This may be due to:
-
Excessive pressure schedule.
-
Lack of real test or assessment.
-
Lack of motivation or focus.
-
Negative perception of rework as being bad, waste of resources, or an admission of incompetence or failure.
Too much rework is alarming. This may be due to 'gold plating' or to an unacceptable level of requirement changes. A
business case must be done to evaluate the necessity of some rework.
Note that we do not include work de-scoped from the previous iteration (because of the timeboxed approach to
iteration management) in the category of 'rework'. The Project Manager has to include this de-scoped work in the pool
of functionality from which to define the next iteration's contents. Obviously, such work will normally have high
priority. The Project Manager should also discover and carefully consider the reasons for the failure of the previous
iteration to achieve its planned goals. For example, although we do not advise the arbitrary addition of staff in a
desperate attempt to meet a schedule, running a project chronically understaffed - while repeatedly making
ambitious plans for each iteration - is not sensible either. It usually leads to poor team morale and an angry
customer. The right balance has to be found, and estimation models such as COCOMO II (see [BOE00]) can help with this. With each iteration, a project builds a history of
achievement - of productivity and quality. A strong indicator for a Project Manager, in planning the next iteration, is
what was achieved in the previous one.
When the first-cut iteration plan is complete, the team leads, perhaps in conjunction with the project manager, can
refine it into a working plan at the task level. The included Microsoft® Project Templates (at the task level) show how
this might appear. Note though that these working plans are derived from the iteration plan, they are not separately
produced, independent work products. It is important - if the project manager is to keep control - that the working
plans can be rolled-up to status the project manager's iteration plan.
|