Agile Software Development
“Success is not delivering a feature, it is learning how to solve the customer’s problem.”
Eric Ries: The Lean Startup
Introduction
The waterfall software development methodology consists of following stages,
- Requirement Definition
- Design
- Implementation
- Testing
If we have detailed customer requirements which are frozen, and the environment under software is going to execute is fixed.
The above mechanism to build the software solution is efficient.
But in today’s fast changing world, this is far from reality. The customer requirements are constantly evolving, modified, deleted, get re-prioritized.
Target customer hardware, devices and server environment, system components are constantly changing. Due to competition and high uncertainty, the business is not ready to invest all money upfront,
until they build confidence in the business model and revenues stream starts flowing. Under such circumstances it is just impossible, to use waterfall model to the build software.
We certainly need a new philosophy to the build software, which is flexible enough to incorporate such dynamics. Thus agile methodology is best suited to such environment.

Here product backlog is prioritized by the product owner, based on customer needs and business priority. Top priority items are picked up for development during Sprint, known as sprint backlog by development team based on capacity. For each user story steps such as ideation/conceptualization, design, implementation, validation, and deployment is performed.
Incremental and iterative development mechanisms can be certainly leveraged to manage such dynamic changing requirements and operating conditions.
In incremental development approach, the large user requirement is divided into multiple small features. This each unit is independent and it can be designed, implemented and validated for 100% completion. Once all such small sub-features was done, the total functionality is complete without no further changes.
In an iterative approach, paper prototype, wire frame mock up, working prototypes are validated before initiating serious design activity.
It helps stakeholders to visualize User Interactions and incorporate any suggested. This method is useful when the user does not have full clarity at the beginning at the start of implementation.
Example
Let us consider a Food Tech company which is involved in search and discovery of Restaurant.
Following features are prioritized for its upcoming release,
- Search Restaurant
- Add customer review/rating
- Online Food Ordering
EPIC Story can be created for each of above requirement e.g.,
As Customer, I want to search a restaurant based nearby based on my preferences, so that I can visit the restaurant.
Acceptance criteria would be specified, this would assist the developer to mark feature complete. e.g. As my current location is Worli and being Vegetarian. On restaurant search at Mumbai, Worli all nearly veg. restaurants are listed.
Each restaurant listed with the location, address and customer ratings.
This EPIC story can be further divided into smaller User Stories that can be implemented using incremental development approach.
Each User Story is written using the following template,
As a <User> I want <Function> so that I <Value Created>
A similar approach is can be used EPIC and user stories for adding customer reviews/rating.
Let’s say in the case of Online food ordering, a company is in the learning phase as customer requirements are still evolving and food order market is undergoing changes. An iterative approach can be leveraged. This would allow the development team to create Wireframe based on initial requirements, drive them through multiple user scenarios, create working prototypes drive them through target customers and collect feedback to concertize/modify requirements. This iterative approach using Agile methodology shall help the team to build products more effectively.
Summary
An agile method is a particular approach to project management that is utilized in software development. This method assists teams in responding to the unpredictability of constructing software. It uses incremental, iterative work sequences that are commonly known as sprints.