Conversation

Your input fuels progress! Share your tips or experiences on prioritizing mental wellness at work. Let's inspire change together!

Join the discussion and share your insights now!

Comments 0

Sharpen your coding skills—try JavaScript challenges on TOOLX now!

advertisement

What is Adaptive Software Development (ASD)?

Adaptive Software Development (ASD)


Adaptive Software Development (ASD) is a new software development methodology that focuses on the rapid creation, application, and evolution of software systems. It was derived from rapid application development and addresses the Internet economy. ASD is characterized by high speed and high change, which introduces complexity that cannot be handled by traditional approaches. It underlies the internet and the market of today's dot-com companies. Iterations of this model are called adaptive cycles.



ASD Life Cycle

The ASD life cycle has the following characteristics:

  • Mission-focused
  • Feature-based
  • Iterative
  • Time-boxed
  • Risk-driven
  • Change-tolerant

The ASD life cycle focuses on results which are the application features or customer functionality that is to be developed during each iteration. Features evolve over several iterations based on feedback provided by the customer.

The adaptive life cycle is divided into three main phases:

  • Speculate
  • Collaborate
  • Learn


1. Speculative

There are five main steps in the speculation phase. These steps can be revised several times during the initiation and planning phase.

Project initiation consists of:

  • Setting project goals
  • Recognizing obstacles
  • Making initial scope and size estimates
  • Analyzing project risks

Much of the project initiation data is gathered in the preliminary session as speed is a major consideration in ASD. Initiation is completed in two to five days for a small to medium project and in about two to three weeks for a large project. During this session, requirements are collected in enough detail to identify features and form an architectural model.

Next, the time-box for the project is fixed based on the scope, requirements, estimates, and resource availability from the data gathered during initiation.

The next step is to decide the number of iterations and fix the duration for each one. Individual iteration lengths depend on project size. Iterations vary from four to eight weeks for a small to medium-sized project, while others might require more than eight weeks. Projects work best with two-week iterations.

Similar to the Sprint Goal in Scrum, the team now develops a theme for each iteration. Each iteration makes the product visible by delivering a group of demonstrable features to the client.

Testing is an ongoing process and not an activity done at the end. Developers and customers assign the features that are going into each iteration. The customer decides the priority of the features using estimates, risk, and dependency information from the development team. A spreadsheet can be used as an effective tool for feature-based iteration planning. This type of planning done by the team rather than by the project manager, provides a better understanding of the project than a traditional task-based approach.


2. Collaborate

When the development team works on working software, project managers promote teamwork and other development activities in parallel. For projects in which teams work from the same physical location, collaboration consists mainly of informal chats during breaks and whiteboard scribbling. However, larger projects require collaboration tools and project-manager interaction.

Collaboration includes the customer, the development team, outside consultants, and vendors and is based on trust and respect. Teams collaborate on business requirements, technical issues, and decision-making.


3. Learn

In a waterfall development model, people are continually compelled to get things right the first time. Each phase completion also discourages backtracking. Learning becomes difficult in such a case, as there is no time to experiment. Learning from mistakes and experimentation requires team members to share partially completed code and artifacts early, to find errors, learn from them, and reduce the amount of rework.

There are four important things to learn at the end of each iteration:

  • Results quality from the customer's perspective
  • Results quality from a technical perspective
  • Operation of the development team and the practices used
  • Status of the project

The priority in adaptive projects is to get feedback from customers. ASD recommends a customer focus group for this which focuses on reviewing the application. These sessions explore a working model of the application and record customer change requests. Customers relate better to working software than extensive documentation or diagrams.

The second priority is technical quality. A standard practice for assessing technical quality is periodic technical reviews. Although pair programming or code reviews are continuous, other reviews such as an overall technical architecture review can be conducted weekly or at the end of an iteration.

The third feedback for the team is the people and process review where the team monitors its performance. MINI REtrospectives at the end of each iteration help to determine what works and what doesn't work the practices that have to be continued and the ones that can be discontinued. Retrospectives encourage teams to know more about themselves and about how they work together.

The fourth category for review is the status of the project. This leads to planning efforts for the next iteration. In a waterfall lifecycle, the end of each major phase is marked by completed deliverables, whereas in a feature-based approach such as ASD, the end of each iteration is marked by completed features. The basic review questions are:

  • Where is the project now?
  • Where is it versus the plans?
  • Where should it be?

As the plans are hypothetical, it is difficult to establish progress by measuring against them. The customer and the team should continually analyze what they have learned so far and if it changes their perspective on where they have to be.



Advantages and Disadvantages of ASD

The advantages and disadvantages of ASD are:

Advantages:

  • Iterative-incremental process
  • Well-worked-out process
  • Based on structural, functional, and behavioral modeling of the system and the problem domain
  • Special focus on quality assessment and control
  • Component-based development
  • Adaptive process
  • The process is continually improved according to experiences in previous iterations
  • Information gathering and decision-making were carried out through several sessions
  • Focus on a collaborative environment
  • Test-based development
  • Continuous integration
  • Refactoring is used to simplify the code
  • Parallel development of components is encouraged thus speeding up the process
  • Traceability to requirements through continuous validation and quality review


Disadvantages:

  • Not scalable
  • Thorough monitoring of the project is essential to preserve cooperation within and outside the team during development.
  • Over-dependence on inter-human communication
  • No clear-cut design effort
  • No specific models are prescribed.
  • Physical configuration modeling is not encouraged
  • Lacks formalism
  • Increased complexity with parallel development
  • Potential for scope creep
  • Resource-intensive
  • Dependency on skilled personnel
  • Challenges in documentation
  • Difficulty in managing distributed teams
  • Risk of incomplete features
  • Resistance to change
  • Limited suitability for small projects


Software Agile Adaptive software development ASD software development mothodology ASD life cycle Adaptive software development life cycle adaptive life cycle phases speculative in ASD Collaborate in ASD Learn in ASD Advantages of ASD disadvantages of ASD adaptive software development advantages and disadvantages adaptive software development agile

advertisement