Agile Development Models
Agile Development Models
In earlier days, the Iterative Waterfall Model was very popular for completing a project. But
nowadays, developers face various problems while using it to develop software. The main difficulties
included handling customer change requests during project development and the high cost and time
required to incorporate these changes. To overcome these drawbacks of the Waterfall Model, in the
mid-1990s the Agile Software Development model was proposed.
AGILE MODEL
The Agile Model was primarily designed to help a project adapt quickly to change requests. So, the
main aim of the Agile model is to facilitate quick project completion. To accomplish this task, agility is
required. Agility is achieved by fitting the process to the project and removing activities that may not
be essential for a specific project. Also, anything that is a waste of time and effort is avoided. The
Agile Model refers to a group of development processes. These processes share some basic
characteristics but do have certain subtle differences among themselves.
Crystal Agile methodology: The Crystal Agile Software Development Methodology places a strong
emphasis on fostering effective communication and collaboration among team members, as well as
taking into account the human elements that are crucial for a successful development process. This
methodology is particularly beneficial for projects with a high degree of uncertainty, where
requirements tend to change frequently.
Dynamic Systems Development Method (DSDM): DSDSM methodology is tailored for projects with
moderate to high uncertainty where requirements are prone to change frequently. Its clear-cut roles
and responsibilities focus on delivering working software in short time frames. Governance practices
set it apart and make it an effective approach for teams and projects.
Scrum: Scrum methodology serves as a framework for tackling complex projects and ensuring their
successful completion. It is led by a Scrum Master, who oversees the process, and a Product Owner,
who establishes the priorities. The Development Team, accountable for delivering the software, is
another key player.
Extreme Programming (XP): Extreme Programming uses specific practices like pair programming,
continuous integration, and test-driven development to achieve these goals. Extreme programming is
ideal for projects that have high levels of uncertainty and require frequent changes, as it allows for
quick adaptation to new requirements and feedback.
Lean Development: Lean Development is rooted in the principles of lean manufacturing and aims to
streamline the process by identifying and removing unnecessary steps and activities. This is achieved
through practices such as continuous improvement, visual management, and value stream mapping,
which helps in identifying areas of improvement and implementing changes accordingly.
Unified Process: Unified Process is a methodology that can be tailored to the specific needs of any
given project. It combines elements of both waterfall and Agile methodologies, allowing for an
iterative and incremental approach to development. This means that the UP is characterized by a
series of iterations, each of which results in a working product increment, allowing for continuous
improvement and the delivery of value to the customer.
All Agile Software Development Methodology discussed above share the same core values
and principles, but they may differ in their implementation and specific practices. Agile
development requires a high degree of collaboration and communication among team
members, as well as a willingness to adapt to changing requirements and feedback from
customers.
In the Agile model, the requirements are decomposed into many small parts that can be
incrementally developed. The Agile model adopts Iterative development. Each incremental
part is developed over an iteration. Each iteration is intended to be small and easily
manageable and can be completed within a couple of weeks only. At a time one iteration is
planned, developed, and deployed to the customers. Long-term plans are not made.
Requirement gathering
Construction / Iteration
Deployment
Feedback
Design the Requirements:- In this step, the development team will use user-flow-diagram or high-
level UML diagrams to show the working of the new features and show how they will apply to the
existing software. Wireframing and designing user interfaces are done in this phase.
Construction / Iteration:- In this step, development team members start working on their project,
which aims to deploy a working product.
Testing / Quality Assurance:- Testing involves Unit Testing, Integration Testing, and System Testing. A
brief introduction of these three tests is as follows:
Unit Testing:- Unit testing is the process of checking small pieces of code to ensure that the
individual parts of a program work properly on their own. Unit testing is used to test individual
blocks (units) of code.
Integration Testing:- Integration testing is used to identify and resolve any issues that may arise
when different units of the software are combined.
System Testing:- Goal is to ensure that the software meets the requirements of the users and that it
works correctly in all possible scenarios.
Deployment:- In this step, the development team will deploy the working project to end users.
Feedback:- This is the last step of the Agile Model. In this, the team receives feedback about the
product and works on correcting bugs based on feedback provided by the customer.
The time required to complete an iteration is known as a Time Box. Time-box refers to the maximum
amount of time needed to deliver an iteration to customers. So, the end date for an iteration does
not change. However, the development team can decide to reduce the delivered functionality during
a Time-box if necessary to deliver it on time. The Agile model’s central principle is delivering an
increment to the customer after each Time-box.
To establish close contact with the customer during development and to gain a clear
understanding of various requirements, each Agile project usually includes a customer
representative on the team. At the end of each iteration stakeholders and the customer
representative review, the progress made and re-evaluate the requirements.
The agile model relies on working software deployment rather than comprehensive
documentation.
Frequent delivery of incremental versions of the software to the customer representative in
intervals of a few weeks.
Requirement change requests from the customer are encouraged and efficiently
incorporated.
It emphasizes having efficient team members and enhancing communications among them is
given more importance. It is realized that improved communication among the development
team members can be achieved through face-to-face communication rather than through
the exchange of formal documents.
It is recommended that the development team size should be kept small (5 to 9 people) to
help the team members meaningfully engage in face-to-face communication and have a
collaborative work environment.
The agile development process usually deploys Pair Programming. In Pair programming, two
programmers work together at one workstation. One does coding while the other reviews
the code as it is typed in. The two programmers switch their roles every hour or so.
Agile processes must be adaptable to technical and environmental changes. That means if any
technological changes occur, then the agile process must accommodate them.
The development of agile processes must be incremental. That means, in each development,
the increment should contain some functionality that can be tested and verified by the
customer.
The customer feedback must be used to create the next increment of the process.
The software increment must be delivered in a short span of time.
It must be iterative so that each increment can be evaluated regularly.
Working through Pair programming produces well-written compact programs which have
fewer errors as compared to programmers working alone.
It reduces the total development time of the whole project.
Agile development emphasizes face-to-face communication among team members, leading
to better collaboration and understanding of project goals.
Customer representatives get the idea of updated software products after each iteration. So,
it is easy for him to change any requirement if needed.
Agile development puts the customer at the center of the development process, ensuring
that the end product meets their needs.
The lack of formal documents creates confusion and important decisions taken during
different phases can be misinterpreted at any time by different team members.
It is not suitable for handling complex dependencies.
The agile model depends highly on customer interactions so if the customer is not clear, then
the development team can be driven in the wrong direction.
Agile development models often involve working in short sprints, which can make it difficult
to plan and forecast project timelines and deliverables. This can lead to delays in the project
and can make it difficult to accurately estimate the costs and resources needed for the
project.
Agile development models require a high degree of expertise from team members, as they
need to be able to adapt to changing requirements and work in an iterative environment.
This can be challenging for teams that are not experienced in agile development practices
and can lead to delays and difficulties in the project.
Due to the absence of proper documentation, when the project completes and the
developers are assigned to another project, maintenance of the developed project can
become a problem.