Adaptive Software Development

Adaptive software development (ASD) has been proposed by Jim Highsmith as a technique for building complex software and systems. It’s focused on rapid creation and evolution of software systems. There is no pre planned steps in this process. The structure of adaptive software development and rapid application development are similar. It grew out of rapid application development. ASD‘s overall emphasis on the dynamics of self-organizing teams, interpersonal collaboration, and individual and team learning yield software project teams. The method follows a dynamic lifecycle instead of the traditional, static lifecycle, Plan-Design-Build. It is characterized by constant change, re-evaluation, peering into an uncertain future and intense collaboration among developers, testers and customers.

ASD life cycle incorporates three phases. The diagram illustrates the life cycle of ASD.
• Speculation
• Collaboration
• Learning


1. Speculation

Speculation consists of Project initiation and Risk driven Adaptive cycle planning. During this phase, coders attempt to understand the exact nature of the software and the requirements of the users. This phase relies on bug and user reports to guide the project.

Project Initiation :

  • Determine the projects guideline parameters.
  • Including the project mission
  • Objectives and constraints
  • Organization of the project
  • Gather system requirements
  • Estimate of project size and scope

Adaptive Cycle Planning :

  • Determine the project time-box
  • Determine the optimal number of time box for each.
  • Write objective statement for each
  • Assign primary components to cycle
  • Assign technology and components to cycle
  • Develop a project task list

2. Collaboration

This phase consists of Concurrent component engineering. Effective collaboration with customer is very important. Communication, teamwork, individual creativity is part of effective collaboration. Joint application development is preferred requirements gathering approach. More concern about collaboration and dealing with concurrency than about the details of designing, testing, and coding. This phase shown as multiple boxes because team members or sub teams are working concurrently to deliver the working components.

3. Learning

This phase consists of Quality review and Final Q/A release. During the learning phase, the newest version of the software is released to users. This generates the bug and user reports used during the first phase of the project, and the cycle repeats itself. During this phase components implemented and tested.

Quality Review :

End of each cycle is marked by learning activities.
Project team need to perform any re planning at the start of the next cycle. ASD teams learn in three ways:
• Focus groups
• Technical reviews
• Project Postmortems

Final QA and Release :

  • Final hand off to the customer
  • Put both the products and all pertinent information about it in to the customer’s hand before disbanding the project team.

Learning Loop :

This lead to an iterative approach
Sees the project continuously cycling from speculation to collaboration.

Characteristics of ASD

1. Mission Driven
The activities in the each development cycle must be justified against the overall project mission.

2. Component Based
Development activities should not be task oriented but rather focus on developing working software. It focuses on results.

3. Iterative
Redoing of development instead of doing it right the first time

4. Time Boxed
Setting fixed delivery times for projects

5. Change Tolerant
Able to incorporate change is viewed as a competitive advantage (not as a problem).

6. Risk Driven
The development of high risk items should begin as early as possible.

Software Development Background

For final year project I have developed “Medical Assistant for Diabetes Patients” using J2ME and J2EE. It allows a patient to access the system through mobile phone and web. The implementation was done by using an iterative software development model. It has facilities for monitoring diabetes patients’ conditions according to their sugar level, providing first aid instructions and drugs dosage information, report generation regarding sugar levels and e-channeling. The users of this system are administrator, doctors and patients.

I have developed a system to monitor the bandwidth of a network using java snmp and J#. Then through the J# application changed the bandwidth according to the usage by addressing the QoS function.

I have done online purchasing system with a payment gateway using,, sql server 2005 and crystal report 8.5.

Examples of how some of these techniques could be adopted in Software you have developed

In each agile methodology there are some specific practices and routines, some are more prescriptive than others. All Agile methods work by shrinking the development cycle and repeating it frequently. Each cycle is called an iteration or sprint. New software may be released at the end of a single iteration or after several.

The result is a series of mini-projects in rapid succession. In iteration the team is closely focused on a few high priority items. Agile methods minimize the projects’ risk of failure by introducing specific development techniques. The key to iterative development is to frequently produce working versions of the final system that have a subset of the required features. They should be fully integrated and as carefully tested as a final delivery. For an example the group project (5 members) “Medical Assistant” has facilities for monitoring diabetes patients’ conditions according their sugar level, providing first aid instructions and drugs dosage information, report generation and e-channeling. Therefore it can be developed as sub systems like Patient Information Monitor Alert sub-system, first-aid sub-system and e-channeling sub-system concurrently which highlight the approach concurrent component engineering of ASD. Also it emphasizes the team work and collaboration.

Agile methods adopt a number of techniques for enhancing quality throughout the development cycle. Techniques such as Test Driven Development (TDD), pair programming, automated acceptance tests and continuous integration help keep code quality. At the end of the iteration a review meeting occurs. Another example is to use unit testing. The procedure is to write test cases for all functions and methods so that whenever a change causes a fault, it can be quickly identified and fixed. By testing the parts of a program first, and then testing the sum of its parts, integration testing becomes much easier.

This “Medical Assistant” project was developed using Java, so it can be tested using JUnit, which is a Unit Testing Framework available for Java based projects. After unit testing, individual subsystems can be combined and tested as a group. To learn through customer focus groups, this working system can be explored and reviewed by Diabetes’ Patients and Doctors and get change requests and feedback.

Comparison of practical and non practical aspects of Scrum with ASD

Adaptive Software Development is an agile process as Scrum. ASD aimed at the problem of producing applications that can readily adapt in the face of changing user needs, desires, and environment. Scrum manages and controls software and product development in rapidly changing environments. ASD is a mission driven process where Scrum focuses on delivering business value first. ASD software model focuses on short iterations and getting working software to the customer in a short timeframe. Scrum uses the iterative approach; these repetitions are referred to as sprints, which normally last about thirty days. Both produces increment versions of the products. Both uses time boxing and team based approach. Both teams are self-organizing and have review meetings. Also both rely on common senses like experience, training but not perspective.
In ASD model it will set fixed delivery time for the project. Time box is created before starts the plan. In scrum has a “Sprint Planning Meeting” at the start of each Sprint (time box). The Team picks Backlog that is achievable (the Sprint Backlog”) and decides how to achieve Sprint goal within the Sprint.