Iterative Application Development

Material on this chapter is based predominantly on CAP-Gemini Sogeti’s manual on IAD. Any quotations or references that are derived from other materials are going to be referred to accordingly.

What are the forces behind IAD?

IAD has been dubbed the modern information systems methodology that is going to ensure the success of new projects and succeed where the traditional approaches failed.

Is iterative application development that new as the proponents of the IAD approach want us to believe?

In 1986, Janis Bubenko, [Bubenko, J., 1986], giving his perspective on methodologies wrote the following: "the general view of a systems development process as a "waterfall" with several stages (performed more or less iteratively) is still, after more than 20 years, the dominating development paradigm.

Today, 10 years after Bubenko’s observation, I found the following caption on the internet: "... many organisations still use traditional "waterfall" life cycle development methodologies which take a linear approach to systems development ..." [ Infoman, 1996].

Obsolescence

Infoman, [Infoman, 1996], gives three reasons why traditional waterfall methodologies do not yield tangible results:

The "time to market" for developing systems using a completely linear approach is far too long for organisations that need information systems in place today, not next year.
The development tools available today allow for much faster programming which allows for a little more experimentation and iterative development than in the past.
Business needs are changing more rapidly and application development approaches need to be flexible enough to accommodate those changes.

10 years ago, Bubenko, [Bubenko, J., 1986], gave the following assumptions about applications and information systems:

Applications are relatively stable during their life-time, few changes will be required. It is important to perform a detailed study of current and anticipated organisational activities in order to arrive at a complete set of requirements.
Applications are dominated by routine-type processing and interaction that can be well defined in advance.
The information system to be designed is relatively "free-standing" and is developed from scratch, i.e. it is not the case that the system to be developed is an addition to or an elaboration of an existing system.
Even if the system is large, and possibly distributed or decentralised, it is assumed that all its parts are part of a global schema and that full consistency can be achieved. This implies that every piece of information and processing (rules, constraints) is globally defined and that every system component has full knowledge about the properties and behaviour of other components.
The system is at all times complete; i.e. there is no case of (temporarily) missing data or missing process.
The information system is built to handle only (well) structured information.

Applications were seen as having definite life cycles.

Revelation, [Revelation, 1996], discusses four primary forces shaping the business application development debate. The forces are said to be interrelated, but each has a decided impact on how a business automates its operations through its applications. These forces are:

  1. the rapid evolution of technology
  2. the changing nature of the business organisation
  3. the emerging global enterprise and
  4. the increasing importance and complexity of applications.

These four driving forces have converged in the 1990s to shift the focus of application development discussion from features to implementation. The dialogue no longer revolve around GUIs (Graphic User Interfaces) and gateways. The focus is now on applying these tools to improve developer and end-user productivity, increase business application reliability, reduce cost and shorten the time to market.

What is IAD?

This is a new development approach designed around an Iterative Application Development (IAD) life cycle, and makes the best of new development tools. It also provides a managerial approach to reuse, and comprises a set of training modules (aimed at management, sales and delivery staff). IAD is a method (by means of a life cycle ) which provides an approach to structuring a project. This approach provides an advised structure and a series of the most likely phases, tasks and activities required to create the intermidiate products expected from the development process (deliverables, prototypes etc.), and so to obtain the final product, [CAP - Gemini Sogeti, 1994].

IAD is described as not being a systematic and prescriptive method, but rather a creative process that involves a high degree of communication within an interactive environment. It therefore requires the commitment of both users and developers to operate within this contest.

The main objectives of IAD is to obtain better client satisfaction by :

meeting agreed user expectations,
reducing delivery time, User
reducing development costs. Expectations

IAD Concepts

The basic concepts of IAD are founded on the failures of the traditional development approaches. One could therefore say that IAD has surfaced as a response to the problems of the conventional approaches. IAD is said not to be revolutionary, but can perhaps be described as a synthesis of successful project principles and new technology applied in a suitable way to produce a faster and more relevant approach to the development of IT systems. IAD is based on two broad concepts:

Management Concepts and
Technical Concepts

Management Concepts

IADs fundamental concepts are based on its management concepts which are also techniques for the management of an IAD project. These concepts and techniques, diagramatically shown in figure 3.2 are based on the following:

iterative life cycle (revolutionary or incremental),
joint application development (facilitating client involvement through workshops),
A-teams (small, dedicated and responsive teams),
time-boxing (which forces concentration on the most important parts of the system).

Iterative Life Cycle

The iterative life cycle is based on a small number of phases that are executed in an iterative way. There are three main options available, the choice of option depends on criteria such as complexity or stability of the requirements or the need for the fast implementation of a core system, which is by definition incomplete. The three options are:

Evolutionary strategy
Incremental delivery
Incremental build.

In each case, a pilot is delivered (and possibly implemented) at the end of each iteration, with an objective of meeting a jointly agreed subset of requirements. Experience acquired from previous pilots will influence the development of subsequent pilots.

Evolutionary strategy

In this strategy, all three phases are included within each iteration. This strategy reflects the main concept underlying an iterative development, which can be summarised as analyse a little, design a little, code test a little, implement a little, then repeat the process.

Incremental delivery

In this approach, all the requirements are fully specified from the start, and iteration is used to build and deliver the system incrementally, by focusing primarily on the requirements which will provide the client with the most immediate benefits.

Incremental build

The iteration in this approach is applied to the first two phases of the life cycle only. This means that the development process will benefit from the experience gained on the successive pilots, but nothing will be installed operationally within the organisation before the complete system is ready.

Joint Application Development

Joint Application Development as a concept of IAD is obviously deduced from the well known Joint Application Design (JAD) methodology. The question though is the difference in the choice of terms; design and development. Though the choice of term might be insignificant, I will look a bit more closely at these two terminologies in relation to the context they have been applied in the last chapter.

"Joint Application Design (JAD) is a methodology that accelerates the design of computer applications. Guided by a session leader, users and information systems professionals design systems together in structured group sessions. JAD harnesses the creativity and team work of social dynamics to define the user’s view of the system, from the system objectives and scope through screen and report design. JAD results in more usable systems, completed faster" [Judy August, 1991].

Joint Application Development as a concept is the technique where users and developers jointly reach consensus on requirements and specifications through workshops. Workshops lead to faster development cycle, realistic specifications, fewer milestone deliverables and less formal validation activities. Different types of workshops are used throughout the IAD life cycle, in order to encourage team-working and facilitate real-time decision making through:

joint development strategy
joint requirements definition
joint pilot design
joint review and testing
joint feedback collection
joint acceptance .

It is important to have the most effective participants during workshops, it is also important to establish an effective environment supported by a repository.

A-Teams

An A-team comprises responsible and skilled developers with a high degree of synergy, who between them have the necessary portfolio of skills required to analyse, design, build and implement the system. Depending on the size of the project, there may be several A-teams working in parallel, each team having the communication skills to work very closely with the user team.

Time-Boxing

Time-boxing is the response to the need for fast system development whereby a delivery date may be chosen, and as much of the system built in that time as is possible using highly skilled A-teams. Time-boxing can also be applied within the development process, to complete specific parts of the system within a given time-frame. It is important that the users’ expectations are clearly set for each time-box. They must appreciate that the delivery of the system quickly and in stages means limited functionality in interim releases.

Technical Concepts

Technical concepts are based on the notion of optimising the utilisation of modern sophisticated systems development technologies. The technical concepts are also classified as the development techniques of IAD and are going to be treated as such in this sub-section and throughout the chapter for that matter.

The following are the technical concepts of IAD:

Prototyping
Architecture design
GUI design
Reuse of third-party or internally built components (packages, application frameworks or libraries)
Object-Orientation (not a pre-requisite for the application of its life-cycle).

Prototyping

The term prototyping can be applied to any system which is rapidly developed and exposed to the user for interactive development based on the users experience of the system. The system is rigorously tested in the operational environment and refined by experience and use. The prototype is modified in light of experience and the revised system is released to the user for further use and to allow evaluation of the modifications [John Hopkinson, 1986]. In IAD, prototyping tools are used extensively to build different kinds of prototypes during workshops and development tasks.

Some of these prototypes might model the external behaviour of the system, as well as the internal architecture. The most comprehensive prototypes integrate the results of these other prototypes, and ultimately evolve into the release production system. Prototypes are classified as exploratory, evolutionary or operational.

An exploratory prototype is an experiment which exists solely to test the feasibility of doing something, the correctness of an assumption, or to explore one of a number of possibilities. It enables rapid validation of certain aspects of a pilot. Typically, such a prototype will be discarded once it has fulfilled its purpose. It will not be integrated into the pilot under development. An exploratory prototype may even be built using a different language or development system.

Contrastingly, an evolutionary prototype is a pre-release of the pilot being developed, meant to generate feedback during the development phase. It is an intermediate product which will integrate the results of any exploratory prototypes, and which will evolve into the pilot with only a limited amount of design and coding within each iteration.

Finally, an operational prototype is a very specific prototype which extends an already implemented pilot, in order to investigate new requirements related to a subsequent pilot. This activity will involve members of the development team at the end-user’s site. Figure 3.6 depicts the various prototypes and the resultant evolutionary pilot development.

The pilot strategy embedded into the IAD life cycle promotes the building of evolutionary prototypes (called pilots) which:

fulfil a consistent subset of requirements,
provide immediate benefits to the business,
help manage risks, complexity and evolving requirements,
maximise results (within fixed budget, time and resources),
serve as a vehicle for communication within the team and with the client.

Architecture Design

In the past, architectures have been driven by major vendors, and clients had to choose the best from few options, which often constrained them to the use of proprietary systems. Today, multi-vendor solutions have multiplied the architecture options, and offer clients the opportunity to select a far more effective fit to their needs.

M. J. Earl, [Earl, 1989], sees information systems architecture as having a strategic role in systems development. He gives three interesting aspects of information systems architecture:

As technology becomes embedded in business operations and sector infrastructure, the need for systems and technology integration increases. Architecture provides a framework for, and a mechanism to, consider and design necessary interfaces, compatibilities and integration.

As technologies advance so rapidly, organisation structure evolve, and business needs change, the IS/IT function is concerned to establish the necessary amount of order in information processing. Architectures provide a framework for resolving and reviewing technology choice over time.
Once the information systems strategy (the ‘what’) is formulated, a set of policies and mechanics is required to ensure its effective and efficient delivery. Architecture provides a structure for implementing the IS needs of the business.
As the relationships between business strategy and capability become closer, a technological model of the organisation is required. Architecture is already serving these needs in companies in the delivery sector where IT infrastructure underpins business and sector activities [Earl, 1989].

The IAD life cycle promotes an open structured system (and software) architecture as being the main basis for systems development. Such an architecture provides flexibility, which is a "must" in an evolving environment. This flexibility will be obtained through:

portability (across platforms, operating systems, databases, etc.),
extensibility (by separating areas of stability form areas of change),
scalability (by enabling performance improvement only, adding processing power),
testability (through consistent interfaces and minimised coupling).

The architecture should be flexible enough to allow for any computing paradigm to be used, such as distributed systems or client/server applications (possibly integrating graphical user interfaces and object-orientation). These are examples where a poor architecture design can be an impediment to providing real benefit.

A well-defined architecture will also provide a base for reuse and maintenance, in cases where the ability to address or anticipate change is a necessary feature.

Graphical User Interface Design

Graphical User Interfaces (GUI), are very common, but their design is still a relatively "unknown" activity. A clear textual specification of a complex dialogue is often difficult to make, and it is of very little use when communicating with users. Furthermore, the event-driven approach to building a GUI dialogue is very different from that applied when building traditional user interfaces.

Effective GUI design is not cosmetic, but real usability engineering, tightly connected with the architecture design of the system. By considering it in this way, it will provide:

consistent look-and-feel across applications,
easier and more productive user interaction,
user co-ordination and inter-workgroup synergy

Within the IAD life cycle, GUI design and prototyping tools are used during workshops to specify and validate user interaction.

Object Orientation

The IAD life cycle can be applied using object-oriented development techniques as an option. Object-orientation closely matches human concepts, by representing the structure, dynamics and semantics of the real world through high level abstract entities. It also facilitates the management of complexity and change, and encourages reuse.

The primary unit of an object-oriented system is the class, which represents the structure and behaviour common to a logical group of objects. Any object-oriented system can then be viewed as a collection of objects, fulfilling certain responsibilities through active collaboration with other objects, in order to achieve the desired functionality. The main objective of object-oriented structuring is to address the complexity of the system by organising classes of objects into inheritance hierarchies, so as to exploit their commonality while at the same time clearly separating their areas of responsibility.

Other object-oriented vital concepts are the following:

Encapsulation; the intimate association of an object’s data with the procedures that manipulate them (and the hiding of the underlying implementation).

Polymorphism; the ability of a procedure to accept arguments of different types and respond appropriately.

Message passing; the ability of an object to communicate with other objects (both sending and receiving requests).

Dynamic binding; the ability to leave the receiver of a message undetermined until execution time.

According to the advocates of IAD, the above principles make object-oriented techniques very suitable for iterative development, by simplifying problem decomposition, facilitating architecture design and finally improving productivity.

Reuse

Reuse is often considered as the key to productivity (by delivering systems with less effort and fewer errors, and by compressing testing), although there is universal agreement that it requires strong management. Any part of a solution should be re-usable, including expertise.

Biggerstaff and Perlis, [T. J. Biggerstaff and A. J. Perlis, 1989], define software reuse as the re-application of knowledge about one system to another similar system in order to reduce the effort of development and maintenance of that other system. This reused knowledge includes artefacts such as domain knowledge, development experience, design decisions, architectural structures, requirements, designs, code, documentation, and so forth.

In the short-term reuse can also improve:

efficiency (few resources can master every feature of a large project, also it is not always possible to assemble an ideal team),
reliability (reuse of components forces attention on their quality, which also releases designers to concentrate on novel features).

Reuse requires a common culture, and the ability to build on the work of other people, this encourages team working, which is a vital aspect of IAD.

In summary, reuse is one way to tackle evermore complex and ambitious projects, by:

recording knowledge,
transforming expertise into real assets, and
converting know-how into available tools.

Phases of IAD

One of the main aims of IAD is to rapidly develop an application through multiple iterations of the following three phases:

requirements definition
pilot development
pilot/system build

Each main iteration will deliver a version of the system that is immediately usable in practice. Each version is called a Pilot, see Fig 3.11. Feedback on the implemented pilot is used as input to the next life cycle iteration. It will have an influence on the specification and development of subsequent pilots.

As a consequence, a complete iteration of the life cycle should be shorter. A turn-around time of 2 to 3 months is typical, even though the first pilot may require a longer period of time (up to 6 moths).

Requirements Definition

The aim of the requirements definition phase is to analyse the goals and constraints of the system, with close collaboration between users and systems developers. This is achieved mainly through interactive Joint Requirements Definition (JRD) workshops, after having agreed to the overall development strategy. Exploratory prototyping is applied to clarify uncertain requirements, quickly prove concepts or provide a first draft specification of some part of the system.

Based on a prioritised list of system requirements, a sound technical architecture and a defined technology base (all of them jointly agreed), a global concept of the system is modelled and a plan is drawn up for subsequent iterations.

Pilot Development

In the pilot development phase, one complete pilot is designed, developed and tested. Users are closely involved in the outline specification of the pilot during Joint Pilot Design (JPD) workshops. On-the-spot exploratory prototyping may be used to model various functional or technical aspects.

Parts of the pilot will then be constructed in parallel by several A-teams, to save time or to build large systems within the limited time frame of one life cycle iteration. Each A-team includes a small number of high calibre professionals, capable of understanding the business and being able to use advanced technology. During the pilot development phase, the pilot itself may be built in several (sub)iterations. Pre-releases of the pilot (called pilot increments) are effectively built, and then validated during Joint Review and Testing (JRT) sessions.

Pilot/System Implementation

In this phase, the pilot (which is a step towards an evolving solution) is accepted and implemented in the organisation. If the pilot is ‘final’, in the sense that no more iterations are planned, it is referred to as the system. During the Pilot/System implementation phase, feedback is collected to serve as input to subsequent life cycle iterations. These phases and iterations are shown in figure 3.11.

Benefits of IAD

The benefits of IAD are based on its basic principles, which means optimising resources and tools through the concepts of IAD. The main principles of IAD are summarised as follows:

heavy involvement of end-users during intensive workshops throughout the life cycle,
the ability to visualise and verify requirements through the use of advanced development tools,
the incremental delivery of software, which ensures that the application addresses the latest requirements,
iteration using prototyping and formal modelling techniques,
the ability to manage risks through continual project review, and to scope successive iterations appropriately.

According to advocates, IAD can be a very strong market discriminator by providing the following advantages:

pro-active handling of customers’ demands,
fast delivery of flexible systems,
capability of managing moving requirements,
co-ordinated sales and delivery approach,
increased staff motivation through re-skilling,
productivity breakthrough by implementing reuse.

By recognising the creative nature of IT without compromising proven project practices, and by supporting the demands of new technologies, IAD enables the understanding of many different IT opportunities and the response to them in a pragmatic and sensible way.

Critical Success Factors of IAD

As with any new approach, great attention has to be paid to IAD implementation, so as not to jeopardise the whole approach. The main issues to the success of IAD are:

customer commitment and maturity in IT practices,
training of sales and delivery personnel,
use of adequate tools.

Each of these must be addressed taking into account the specific context of each project and the availability of resources.

 

 Back                                       Next