Agile Software Development

Agile Software Development

When commercial software development began to take root, it followed the straightforward and linear progression. Called as ‘the waterfall model’, the software development process basically consists of requirements analysis, design, implementation, testing, deployment and maintenance. While it is still used for small projects, there is one more method of software development that has become increasingly popular called agile software development. It is especially suited for today’s enterprise-level software development.

The dictionary defines agile as ‘being quick’ and ‘able to move quickly’. And indeed, agile software development means developing software quickly, without compromising on code quality.

Today’s competitive world makes it imperative for accelerating time-to-market of products, cutting development costs, or dealing with painful constraints in budgets and staffing. These are just a few challenges to highlight in this context. Furthermore, a development project needs to adjust to constantly changing requirements within a turbulent environment.

Agile development is a paradigm that helps the project development team to think more effectively, work more efficiently, and make better decisions. These methods and methodologies address all of the areas of the waterfall (“traditional”) software engineering, including project management, software design and architecture, and process improvement. In addition, it is important to understand that ‘agile’ is also a mindset thing, because only the right mindset can make a big difference in how effectively a team uses the tenets of agile development. It involves quick sharing of knowledge and insights gained while executing the project with fellow team members, not wasting time in following protocols of notifying the team leader who would in turn communicate with the team leader of the other concerned team. In other words, take informed decisions as a team without worrying about the communication hierarchy. An agile mindset is about opening up planning, design, and process improvement to the entire team. An agile team uses agile practices in a way where everyone shares the same information, and each person on the team has a say in how the practices are applied. Since it frees developers of the burden of drab meetings with the project manager for every small thing, it allows them to focus on their coding efforts properly.

Agile software development
The agile methodology is focused on a short iterative software release cycle. Instead of consulting the stakeholders in a linear fashion, agile software methodology involves everyone iteratively. This allows for the stakeholders to make recommendations and suggest changes while the software is being actively developed so that the software can track what the customers actually desire. This approach addresses one of the most important lacunae found in the waterfall method – that of understanding customer requirement. Say a company wants to develop HR software. Apart from having a vague notion of ‘we want to automate our HR department’, most of the times the people involved at the helm do not have a clear vision of what exactly they need. Even after detailed requirement gathering, neither they nor the coders are really sure if all their requirements will be met satisfactorily. Typically, customers do not really have an idea of what they exactly want. Once the first cycle of the waterfall model is completed and the software goes to the customer for evaluation, they suddenly realize the software is not exactly the way they envisaged, and they come back to the development team for refinements. This to and fro makes everyone unhappy; not to mention time lost in re-work. The agile software development methodology is iterative at each stage, and involves the stakeholders at each step by showing them demonstrations of the current state of the software. Modified requirements are thus captured at the very early stage of development, reducing coding time. Agile methodology also helps software projects improve the expectations of when software will be completed, determine what items can feasibly go into a release cycle, and provide the ability to easily track overall project progress.

The agile methodology also helps train software developers on estimating time after a task is completed. When the task is first assigned to a developer, the developer should write in an estimated time they believe the solution to the task will take. After a task is completed the developer should then enter in the actual time spent on the task and see how accurate their estimation was. If they were off, they will see the difference and should account for that the next time a similar task is assigned to them.

Benefits of Agile Technology
One of the established facts of today’s world is the uncertainty involved. The key differentiator between the waterfall model and agile development is the short iteration time. In a linear progression, the cycles are quite long, and any mistakes and especially change in scope affects at the very end. Agile development provides multiple benefits over the previously used waterfall methodology. Because it is iterative, it simplifies the software planning and estimation process by decomposing large requirements into small individual tasks. Analyzing small tasks allow the software development team to more accurately predict the level of effort required in order to implement the change. This allows the project manager to accurately depict the percentage complete of the software which allows them to continually track overall project progress against the originally planned progress. The agile process also is designed to help train developer in their schedule estimating skills throughout the lifecycle. For each task the developer should be required to make an estimation of how long they believe they will need to complete the task, after the task is completed they should enter in the actual time spent on the task. This will show the developer the delta between their estimation and their actual time spent.

Disadvantages of Agile Methodology
The very fact that the so called waterfall methodology is still in use implies some merits to it, and in contrast some demerits to the agile methodology. Because it is based on iterative techniques of short duration, the development team needs to meet more often and commit more time. It also involves less documentation, which implies that the development team is experienced enough to thoroughly understand and execute their task. As a norm, agile technology should be avoided when the scope of the project is inflexible.

Existing Agile technologies

Originally, most principles of agile development were derived from proven industry concepts like lean production. They were adjusted and amended to match the specific needs of creating high-quality software very efficiently. Today, manifold agile methodologies like Scrum, Lean Software Development, Test-Driven Development, Agile Unified Process, or Extreme Programming have been successfully introduced in serious and mission critical development activities. We shall cover some popular agile techniques like Scrum  in other articles.