Since the time Agile software development model entered the scene, it has generated a controversy in the community. Agile evangelists believe that the methodology helps deliver software faster and manage customers’ priorities better than the other approaches. Their opponents claim that Agile undermines the existing good software development practices.
So, who is right? For a customer, it may be hard to understand if their project needs Agile. Even for a question as simple as ‘What is Agile software development?’, developer-oriented sources often give the answers that sound like gibberish for those not in the know. In our article, we aim to explore Agile software development from a customer’s point of view, highlighting its benefits and pitfalls for a project.
The core values and principles of Agile are defined in the Manifesto for Agile Software Development published in 2001.
- Individuals and interaction over processes and tools. In Agile, developers’ interaction is encouraged as much as their skills. A good team of developers who communicate and collaborate well may produce better results than a team of experts each operating in isolation.
- Working software over comprehensive documentation. Working software indicates the project progress better than documents presented to clients in meetings. Besides, developers strive to keep documentation brief as it may quickly become outdated.
- Customer collaboration over contract negotiation. It is rather painstaking to provide all the requirements at the start of the project. It is better to directly involve the customer to provide more detailed requirements and update them in the course of the project.
- Responding to change over following a plan. In Agile, developers welcome changes even at late stages of the project. As the development process is split into cycles, new features can be added or the existing ones modified without the need to start the work done from scratch.
To understand if Agile suits the needs of your project, let’s compare it with the waterfall model, a more traditional software development approach. Applying waterfall, the customer and the vendor set the requirements and determine the project scope from the very start of the development process, and stick to them until the product release. As every step is predetermined, risks are mitigated to a minimum.
In the case of Agile, the customer has space for changes. The scope of the project may be rather vague at the beginning, but it can be modified on any stage and the customer will get what they want. In waterfall, it is not until the product is released, when the customer sees that it needs some changes, sometimes significant ones. This makes the cost of introducing changes in Agile much lower than in waterfall as they are introduced gradually in the course of the project and fewer features may require redoing at the end.
Ambysoft’s 2013 Project Success Rates Survey shows that the Agile methodology has a 64% success rate compared to just 49% for the waterfall model in all industries. This is due to such factors as reduced time to market, lower cost of changes and better customer’s satisfaction with the product. As a result, waterfall loses to Agile in popularity with more and more companies opting for Agile worldwide.
Let’s consider how the Agile software development process goes and what role the customer plays in it.
An agile-based project is divided into the following stages:
- Requirement gathering. The customer shares with the developers their overall vision of the project and relevant details.
- Iterations conduction. The software development process is split into several “iterations” (3-4 weeks long each). The following actions take place within an iteration:
- Iterations planning. The scope of work to be taken under an iteration is planned by the developers and discussed with the customer.
- Features implementation. The developers implement the features shortlisted for an iteration.
- Product assessment. The customer assesses the product and initiates some changes to be implemented in the next iteration.
- Testing. Testing is carried out after each iteration to ensure that the customer gets working software with all the features requested.
- Product delivery. The final version of the product is delivered to the customer.
The working software is released after each iteration. This way, the product gets several releases. After each release, new features can be added, and the software gets improved until it fully satisfies the customer’s expectations.
Agile software development example
To understand how Agile is applied in reality, consider an example of an online taxi booking service. The service provider may start with a simple web application allowing users to book a taxi. This minimal functionality is enough to start the service provision. Later on, new options may be added, such as automatic route learning, setting requirements for vehicles (air conditioning, POS-terminal), users’ feedback. Gradually, the provider may enrich its service with new functions and increase users’ satisfaction with it.
Let’s consider the benefits the Agile software development model has:
- Active customer engagement in discussing product requirements. This way, the customer makes sure the developers understand the specifics of the required software.
- Reduced time on requirements gathering. The developers get down to the project as soon as they become aware of its basic features. They gradually introduce other features in the next iterations.
- Opportunity to make changes to the project at any stage. This allows tailoring the software to the customer’s needs.
- No need to prepare thorough documentation. This is because the project scope may be changed, which makes too detailed specifications unnecessary.
- Testing and quality assurance after each iteration. This way, the software gets tested on the go, and the bugs don’t accumulate by the end of the project.
These benefits significantly contribute to the project success provided that the collaboration between the customer and the developers is effective.
Now, let's consider what may go wrong in Agile:
- Unknown risks. As the project scope can change, there is always a chance to encounter some unexpected challenges to cope with.
- Excessive preparation or planning. The developers may think that the details they have got are not enough to get down to the project and spend much more time for preparation to the development process than needed. This may be typical for the developers who used to apply the waterfall approach that requires thorough planning.
- Inability to meet the iteration goals. The development team may have poor organizational skills: taking too much within one iteration, continuing finishing goals of the previous iteration in the next one, etc.
- Lack of cooperation from the vendor’s side. Developers may prefer to solve business issues internally instead of discussing them with the customer. This contradicts the very nature of Agile, but it is typical of human nature, as most people strive to solve their problems themselves.
- Lack of cooperation from the customer’s side. The customer can also devote not enough time to cooperation with the developers. This way, the customer undermines the developers’ ability to tailor the software to the business needs.
Most of these pitfalls are caused by the improper Agile implementation. The way out is sufficient training on Agile methodology principles and their observation by both developers and customers.
At first, outsourcing software development with Agile seems tricky. The customer may wonder how to settle payment issues with the developers. Basically, Agile projects are based on the Time and Material (T&M) pricing model, where the developers get paid for the actual efforts spent. How can the customer be sure that they will not deliberately prolong the project flow? If the project scope is vague, are there any guarantees the customer gets what they want in the end?
Taking a closer look at these questions, it appears that the Agile methodology can be successfully applied to outsourcing software development efforts. The customer may fix the iteration duration in advance and impose penalties for not meeting the iterations goals. This way, the developers will hardly deliberately procrastinate the product delivery. As for guarantees, the developers warrant that the working code produced in each iteration meets the requirements developed for that iteration. This way, the customer may be sure that the final product will perform as required.
The Agile family consists of the following methodologies:
Scrum – an approach where the development process is split into short (2-3 weeks) incremental interactions (called sprints), project progress is constantly tracked, and planned meetings with the customers and developers are regularly conducted.
Kanban – an approach based on a visual representation of the work in progress and limiting tasks taken in an iteration to meet the iteration goals and avoid the development team overburdening.
Lean – an approach focused on minimizing waste in the software development (excessive functionality, downtime in the development process, unclear requirements), promoting efficient use of team resources, and concurrent teamwork.
XP (eXtreme Programming) – an approach that is rising traditional software development methodologies to the extreme level. It advocates software releases in short intervals (1-3 weeks) and pair programming with one programmer writing the code and the other one reviewing the line of code written.
DSDM (Dynamic Systems Development Method) – an approach focused on rapid software delivery deploying the useful 80% of the system in 20% of the time.
Crystal – a family of sub-methodologies that scales projects on the basis of their size and criticality, applying different sub-methodologies respectively.
FDD (Feature-Driven Development) – an approach where the overall software model is created first, followed by preparing a list of features required, planning, designing, and building by feature.
Now, as you know what Agile software development is, you can assess its benefits and pitfalls to decide if it fits your project. Opt for Agile if you appreciate the ability to introduce changes at any project stage and get the software tailored to your needs to the maximum extent. However, you should be ready to cooperate with the developers actively for the project to succeed.