Process GuidePrevious (disabled)Next - IntroductionGlossaryShortcutSummaryUp (disabled)

Increment Definition

Introduction
Concepts
Documentation
Steps
Tutorial
In Practice
References


Process GuidePrevious - Increment DefinitionNext - ConceptsGlossaryShortcutSummaryUp - Increment Definition

Increment Definition

Introduction

Increment Definition is concerned with planning a systems development (or systems integration) project so that the system is developed and delivered to the business in a series of increments. This increment definition technique is designed to be used with the Team Fusion for OO process (and derivatives of it).
The definition of increments is driven by Use Cases and Requirements. Increments are prioritized primarily according to business value delivered, but also taking into account technical risk and dependencies between increments.
This technique also covers allocating the work of an increment to multiple parallel teams, and planning how to integrate several streams of work. It is designed to be used in conjunction with the Timeboxing technique.

Process GuidePrevious - IntroductionNext - DocumentationGlossaryShortcutSummaryUp - Increment Definition

Increment Definition

Concepts

Incremental Delivery
The incremental delivery approach is based upon a 'divide and conquer' philosophy. It takes a large project and breaks it down into a series of increments. Each increment may be developed in parallel or serially with other increments depending upon technical dependencies and business priorities.
Using the incremental approach requirements and detailed designs can be evaluated at the beginning of each increment. Because an increment takes less time than the whole project, there is a better chance of developing more stable requirements successfully for the duration of an increment than for a whole project. Further (and this is an unpleasant reality) requirements definition is sometimes difficult so that some requirements only emerge when users start real work with an early increment or prototype of the application.
The Incremental approach differs from a succession of independent projects in that there is/are:
  • an overall plan
  • an overall view of requirements
  • an overall view of the use cases, object model and system architecture
  • processes and procedures for the synchronization and management of the individual increments within an overall program
  • clear responsibility established for the management of the overall program.
These views may be subject to revision at the start of each new increment.
Projects differ in the amount of change that is encountered. In some the key requirements and the software architectures are well known and stable throughout the project. In others there are recognized uncertainties that are only resolved during the second or later increments. In a few what was thought to be well known and stable turns out not to be.
In the Team Fusion for OO process delivery increments are defined during the Solution Definition stage. Each increment consists of an instance of the Evolutionary Delivery and Distributed Deployment stages.

Process GuidePrevious - ConceptsNext - Increment PlanGlossaryShortcutSummaryUp - Increment Definition

Increment Definition

Documentation

Increment Plan
Increment Definition

Process GuidePrevious - DocumentationNext - Increment DefinitionGlossaryShortcutSummaryUp - Documentation

Documentation

Increment Plan

This is a high level plan, listing the proposed increments and the timeframes within which it is planned to deliver them.
Each increment has a name, and an approximate effort estimate (e.g. person months).
Dependencies between increments are shown, and whether they will be delivered in sequence or parallel.

Process GuidePrevious - Increment PlanNext - StepsGlossaryShortcutSummaryUp - Documentation

Documentation

Increment Definition

This is the detailed definition of a single increment.
It includes:
  • a list of Use Cases and a list of Requirements which the increment will support - these products are the primary drivers of the increment definition.
  • acceptance criteria for the increment. These are the criteria by which the business will accept (or reject) the increment for deployment. They typically restate the Use Cases and requirements in a way which can be verified in an acceptance test.
  • a System Object Model, a list of System Operations and a set of architecture components which will be included in the increment. These products are derived from the Use Cases and Requirements.
  • a team allocation plan, integration plan and (later) a timebox plan

Process GuidePrevious - Increment DefinitionNext - Step 1:  Agree Increment Objectives and ConstraintsGlossaryShortcutSummaryUp - Increment Definition

Increment Definition

Steps

Step 1: Agree Increment Objectives and Constraints
Step 2: Identify Priority Increments
Step 3: Refine Increment Definition
Step 4: Create Increment Plan
Step 5: Define Increment Acceptance Criteria
Step 6: Plan Allocation of Work to Teams
Step 7: Define Integration Cycles

Process GuidePrevious - StepsNext - Step 2:  Identify Priority IncrementsGlossaryShortcutSummaryUp - Steps

Steps

Step 1: Agree Increment Objectives and Constraints

Increment definition is motivated by objectives and constraints, so it is important to have these explicit and agreed. They can often be derived from the project scope and objectives in the Project Plan.
Objectives may include:
  • deliver main business value as early as possible
  • deliver 'operational pilot' which validates business case and clarifies requirements from use
  • provide sound architectural base for future increments, minimize technical risk
Constraints may include:
  • date constraints (e.g. must be operational by financial year end)
  • resource constraints (e.g. maximum 6 developers for project)
As well as considering the required date for the first increment to be delivered, consider how frequently the business wants subsequent releases (e.g. once every three months, or six months, or even every month). This is related to the cost and complexity of rolling out incremental releases to the user base (i.e. number of sites, number of users, data migrations, user training, systems management).

Process GuidePrevious - Step 1:  Agree Increment Objectives and ConstraintsNext - Step 3:  Refine Increment DefinitionGlossaryShortcutSummaryUp - Steps

Steps

Step 2: Identify Priority Increments

Focus on identifying what should be delivered in the first (and to a lesser extent second) increment.
Two basic and often conflicting factors govern the choice of what should be included in the first increment(s):
  • the first is to deliver to the users the most useful functionality given the time and cost constraints, the "biggest bang for their buck", the earliest delivery of business value. Deliver the easiest, most useful things first.
  • the second is to minimize the risk on subsequent increments. Deliver components which put the architectures in place and which build experience in any new tools and techniques. Do the hardest things first.
Define these increments primarily from the business point of view - what use cases and requirements are required first. Also consider them from the architectural point of view - what technical subset is separable and could be delivered early.
If the system is small, it may be agreed that splitting to increments is not useful, and that the first 'increment' will deliver the entire system.

Process GuidePrevious - Step 2:  Identify Priority IncrementsNext - Step 4:  Create Increment PlanGlossaryShortcutSummaryUp - Steps

Steps

Step 3: Refine Increment Definition

Refine the definition of the first one or two increments. From the use cases, identify what subset of the System Object Model would need to be implemented, and what subset of the System Architecture Model would have to be in place.
Use this more precise definition of scope (Use Cases, Requirements, System Objects, System Operations, architecture components) to prepare an effort estimate for the first increment (or two).
Assess whether this is compatible with resource and date requirements. Iteratively refine the scope and priorities until all parties feel that the best achievable solution has been defined.

Process GuidePrevious - Step 3:  Refine Increment DefinitionNext - Step 5:  Define Increment Acceptance CriteriaGlossaryShortcutSummaryUp - Steps

Steps

Step 4: Create Increment Plan

Identify subsequent increments, and prepare a plan showing all the increments. The first one or two increments have been defined and estimated in detail, and represent an agreed commitment. In contrast the later increments are only defined in outline, and their contents and sequencing are provisional.

Process GuidePrevious - Step 4:  Create Increment PlanNext - Step 6:  Plan Allocation of Work to TeamsGlossaryShortcutSummaryUp - Steps

Steps

Step 5: Define Increment Acceptance Criteria

For the first increment, define (or update) Acceptance Criteria for each Requirement, in order to specify precisely what has to be delivered in this increment.
Ensure each criterion is described as a precise, user-defined measure which can be used to ensure the acceptability of the increment.
Acceptance criteria typically relate to business process measures (e.g. cycle time), to Use Cases (e.g. process 95% of letters without manual intervention), or to requirements (e.g. usability requirement of being able to use system after 1 hour training).

Process GuidePrevious - Step 5:  Define Increment Acceptance CriteriaNext - Step 7:  Define Integration CyclesGlossaryShortcutSummaryUp - Steps

Steps

Step 6: Plan Allocation of Work to Teams

Decide whether the increment will be developed by a single team, or by two or more teams working in parallel. There are several reasons why multiple teams might be appropriate:
  • there are multiple development sites, with one team at each site
  • there are too many development staff to manage as one team (e.g. more than 10)
  • the work divides naturally into independent subprojects.
Though note that having several teams increases the management complexity of the project, increasing some areas of risk, and the overheads of communication, coordination, etc.
Decide what work to allocate to each team. Each team's work should be cohesive, and only loosely coupled to the work of other teams. The best way of achieving this is to divide the work along the lines of divisions in the software architecture, for example, if there is a services interface, one team might develop the client components which call the services, and another team the server components which implement the services. Each component should be the responsibility of a single team.
As part of project organization, decide on intergroup coordination arrangements - how teams will communicate with each other, resolve technical issues, etc.
One coordination approach is to nominate 'feature owners' - for each system operation, requirement, or other feature, there is one person who has an overview of what is needed from each component and team. This person has responsibility for seeing that the work by different people on design, integration and testing 'hold together' to deliver the feature satisfactorily.

Process GuidePrevious - Step 6:  Plan Allocation of Work to TeamsNext - TutorialGlossaryShortcutSummaryUp - Steps

Steps

Step 7: Define Integration Cycles

If there are two or more parallel teams developing an increment, integration of the components needs to be planned.
One approach would be for each team to complete all their EVO cycles and to integrate at the end. This is undesirable, both because of the risk of serious incompatibilities only being discovered late, and because it would prevent the evolutionary delivery of whole system operations and use cases to the business for review.
At the other extreme, components from different teams could be integrated each EVO cycle before passing to users for review. This can work well, but there are situations in which this is not feasible (e.g. there is a high overhead time and cost to integrate the components).
A useful compromise is to have an intermediate level of cycle in the development process - an increment is divided into a number of integration cycles, each of which consists of two or more EVO cycles (see diagram below). The teams synchronize at the integration points. Work is allocated to integration cycles so that the same system operations (or other features) are developed across all teams, integrated at the integration points, and passed to the business for review.
The diagram shows an increment where two teams are working in parallel. The increment is divided into three integration cycles. Note how the teams can have different length EVO cycles, provided that they synchronize at the integration points. For example team A might be a server team, with 2 week EVO cycles, and team B a client team, with weekly EVO cycles for the GUI.

Process GuidePrevious - Step 7:  Define Integration CyclesNext - Step 1:  Agree Increment Objectives and ConstraintsGlossaryShortcutSummaryUp - Increment Definition

Increment Definition

Tutorial

Step 1: Agree Increment Objectives and Constraints
Step 2: Identify Priority Increments
Step 3: Refine Increment Definition
Step 4: Create Increment Plan
Step 5: Define Increment Acceptance Criteria
Step 6: Plan Allocation of Work to Teams

Process GuidePrevious - TutorialNext - Step 2:  Identify Priority IncrementsGlossaryShortcutSummaryUp - Tutorial

Tutorial

Step 1: Agree Increment Objectives and Constraints

In the hotel example, the top priority business objective is to install a new reservations system which enables centralized and local reservations, includes credit card authorization, and is integrated with the room allocation and guest payment systems.
The time constraint is that this system must be operational by May, in time to accept reservations for the next busy holiday season. This gives a 4 month development time-frame, and a month for deployment.
There are ambitious aspirations on architectural integration of multiple systems, including head office accounting systems and local point of sale systems. However this integration has less business value than the operational reservations system, so is considered lower priority. The architecture priority is to provide a reliable architecture to support initial functionality, with the flexibility to be extended in later increments.

Process GuidePrevious - Step 1:  Agree Increment Objectives and ConstraintsNext - Increment 1GlossaryShortcutSummaryUp - Tutorial

Tutorial

Step 2: Identify Priority Increments

Increment 1
Increment 2
Increment 3

Process GuidePrevious - Step 2:  Identify Priority IncrementsNext - Increment 2GlossaryShortcutSummaryUp - Step 2:  Identify Priority Increments

Step 2: Identify Priority Increments

Increment 1

As the highest priority is hotel reservations and guest billing, a set of use cases to support this is selected for increment 1. A minimal set is selected - the subset of functionality on which it is viable for the system to be made operational.
Use cases are:
  • Make Reservation
  • Check In
  • Check Out
  • Review Room Occupancy
  • Produce Weekly Accounts
Requirements:
  • Make Reservation - 2 minutes to perform
  • Check Out - 3 minutes to perform

Process GuidePrevious - Increment 1Next - Increment 3GlossaryShortcutSummaryUp - Step 2:  Identify Priority Increments

Step 2: Identify Priority Increments

Increment 2

Improved integration of hotel systems with head office accounting systems is the second priority, to improve financial forecasting, budgeting and control, and reduce costs of manual aggregation of accounts.
Use cases are:
  • Aggregate weekly accounts
  • Analyze weekly revenue
  • Aggregate Occupancy Forecast
  • Produce Management Reports
An allowance is also made in the plan for development effort for enhancements to the reservations system once there is feedback from use.
These use cases have an architectural requirement for a communications link between hotels and central accounting system

Process GuidePrevious - Increment 2Next - Step 3:  Refine Increment DefinitionGlossaryShortcutSummaryUp - Step 2:  Identify Priority Increments

Step 2: Identify Priority Increments

Increment 3

The focus of the third increment is to implement a Frequent Guest Program to reward frequent users with bonuses and discounts.
Use Cases are:
  • Set up Frequent Guest
  • Credit Guest Account
  • Produce Guest Mailing
  • Debit Guest Account

Process GuidePrevious - Increment 3Next - Step 4:  Create Increment PlanGlossaryShortcutSummaryUp - Tutorial

Tutorial

Step 3: Refine Increment Definition

The architecture implications of the use cases for Increment 1 are:
  • the core architecture of the hotel-based system (database, GUI, object layer, etc)
  • a link between central reservations and hotel-based systems
  • an external link to credit card authorization
  • integration of the telephone billing system with the reservations system to automatically charge phone calls to the room account
The Use Cases are examined to identify which System Operations will need to be implemented. For example the Check In use case requires two : Find Guest Reservation and Allocate Room.
The System Operations are analyzed to identify which parts of the System Object Model they require to be implemented. Areas of the object model not required for these System Operations are deferred until later increments. The Increment Object Model is shown below. (The development of the example System Object Model is described in the System Object Modeling technique).
On the basis of the System Operations, Object Model and Architecture components it is possible to make a reasonable estimate of development effort.
The initial effort estimate indicates that the system cannot be developed in time for the business deadline. To achieve the deadline, some functionality is dropped from the increment - the business agrees that transfer of phone charges (as part of the Check Out use case) can initially be performed manually, this avoids the architectural effort to integrate the phone billing system.
A revised estimate, for example 20 person months over 4 elapse months, is acceptable.

Process GuidePrevious - Step 3:  Refine Increment DefinitionNext - Step 5:  Define Increment Acceptance CriteriaGlossaryShortcutSummaryUp - Tutorial

Tutorial

Step 4: Create Increment Plan

Increments 1, 2 and 3 will be developed and deployed in sequence.
Increment 1 - Reservations and Guest Billing
4 months development (20 person months)
Increment 2 - Central Accounts integration
3 months development (12 person months)
Increment 3 - Frequent Guest and Phones
3 months development (12 person months)

Process GuidePrevious - Step 4:  Create Increment PlanNext - Step 6:  Plan Allocation of Work to TeamsGlossaryShortcutSummaryUp - Tutorial

Tutorial

Step 5: Define Increment Acceptance Criteria

Increment 1:
  • all use cases supported as documented
  • after 30 minutes training and practice, central reservation and hotel staff must be able to make a reservation in 2 minutes
  • after 1 hour training and practice, hotel staff must be able to perform a guest Check Out in 3 minutes

Process GuidePrevious - Step 5:  Define Increment Acceptance CriteriaNext - In PracticeGlossaryShortcutSummaryUp - Tutorial

Tutorial

Step 6: Plan Allocation of Work to Teams

In this example there is one central development site, and the work is allocated to a single development team which varies in size between 4 and 5 people.

Process GuidePrevious - Step 6:  Plan Allocation of Work to TeamsNext - ReferencesGlossaryShortcutSummaryUp - Increment Definition

Increment Definition

In Practice

Increment definition involves trying to reconcile what is desirable (for the business) with what is feasible (in terms of development effort, risk, architecture, technical dependencies, etc.). It requires different stakeholders and people with different expertise to communicate and collaborate on 'the art of the possible'. This is best achieved in a facilitated workshop session, using a JAD technique such as Interactive Development.
Increment definition is an iterative process. Formulating an initial incremental plan frequently exposes some problems or opportunities which lead to refinement and revision. Allow plenty of time and opportunity for both business and technical people to explore alternative ways of defining increments.

Process GuidePrevious - In PracticeNext  (disabled)GlossaryShortcutSummaryUp - Increment Definition

Increment Definition

References

Malan, R., Letsinger, R. and Coleman, D (1995) Object Oriented Development at Work. Fusion in the Real World. Prentice Hall. ISBN 0-13-243148-3.
See Todd Cotton's chapter on Evolutionary Fusion.
Lorenz, M and Kidd, J. (1994) "Object Oriented Software Metrics", Prentice Hall, ISBN 0-13-179292-X.
Useful material on estimating the size and development effort for an object-oriented system.
Gilb, T. (1988) Principles of Software Engineering Management. Addison-Wesley.
Discusses approaches to and benefits of evolutionary delivery.