Agile is a time-bound, iterative approach to software delivery that builds software incrementally from the start of the project, instead of trying to deliver all at once.
The highest priority of this process is to satisfy the customer.
Acceptance of changing requirement even late in development.
Frequently deliver a working software in small time span
Throughout the project business people and developers work together on daily basis.
Projects are created around motivated people if they are given the proper environment and support.
Face to face interaction is the most efficient method of moving information in the development team.
Primary measure of progress is a working software.
Agile process helps in sustainable development.
Continuous attention to technical excellence and good design increases agility
From self organizing teams the best architecture, design and requirements are emerged
Simplicity is necessary in development.
Example: Let’s go through an example to understand clearly about how agile actually works.
A Software company named ABC wants to make a new web browser for the latest release of its operating system. The deadline for the task is 10 months. The company’s head assigned two teams named Team A and Team B for this task. In order to motivate the teams, the company head says that the first team to develop the browser would be given a salary hike and a one week full sponsored travel plan. With the dreams of their wild travel fantasies, the two teams set out on the journey of the web browser. The team A decided to play by the book and decided to choose the Waterfall model for the development. Team B after a heavy discussion decided to take a leap of faith and choose Agile as their development model.
The Development plan of the Team A is as follows:
Requirement analysis and Gathering – 1.5 Months
Design of System – 2 Month
Coding phase – 4 Months
System Integration and Testing – 2 Months
User Acceptance Testing – 5 Weeks
The Development plan for the Team B is as follows:
Since this was an Agile, the project was broken up into several iterations.
The iterations are all of the same time duration.
At the end of each iteration, a working product with a new feature has to be delivered.
Instead of Spending 1.5 months on requirements gathering, They will decide the core features that are required in the product and decide which of these features can be developed in the first iteration.
Any remaining features that cannot be delivered in the first iteration will be delivered in the next subsequent iteration, based in the priority
At the end of the first iterations, the team will deliver a working software with the core basic features.
Both the team have put their best efforts to get the product to a complete stage. But then out of blue due to the rapidly changing environment, the company’s head come up with an entirely new set of features and want to be implemented as quickly as possible and wanted to push out a working model in 2 days. Team A was now in a fix, they were still in their design phase and did not yet started coding and they had no working model to display. And moreover, it was practically impossible for them to implement new features since waterfall model there is not reverting back to the old phase once you proceed to the next stage, that means they would have to start from the square one again. That would incur them heavy cost and a lot of overtime. Team B was ahead of Team A in a lot of aspects, all thanks to Agile Development. They also had the working product with most of the core requirement since the first increment. And it was a piece of cake for them to add the new requirements. All they had to do is schedule these requirements for the next increment and then implement them.
Deployment of software is quicker and thus helps in increasing the trust of the customer.
Can better adapt to rapidly changing requirements and respond faster.
Helps in getting immediate feedback which can be used to improve the software in the next increment.
People – Not Process. People and interactions are given a higher priority rather than process and tools.
Continuous attention to technical excellence and good design.
In case of large software projects, it is difficult to assess the effort required at the initial stages of the software development life cycle.
The Agile Development is more code focused and produces less documentation.
Agile development is heavily depended on the inputs of the customer. If the customer has ambiguity in his vision of the final outcome, it is highly likely for the project to get off track
Face to Face communication is harder in large-scale organizations.
Only senior programmers are capable of taking the kind of decisions required during the development process. Hence it’s a difficult situation for new programmers to adapt to the environment.