Blog‎ > ‎

2. Agile

Agile

Agile Software Development

Agile software development is a group of software development methods where requirements and solutions evolve through collaboration between self-organizing, cross-functional teams. It promotes adaptive planning, evolutionary development and delivery, a time-boxed iterative approach, and encourages rapid and flexible response to change. It is a conceptual framework that promotes foreseen tight interactions throughout the development cycle.

The Agile Manifesto introduced the term in 2001. Since then, the Agile Movement, with all its values, principles, methods, practices, tools, champions and practitioners, philosophies and cultures, has significantly changed the landscape of the modern software engineering and commercial software development in the Internet era.

There are many specific agile development methods. Most promote development, teamwork, collaboration, and process adaptability throughout the life-cycle of the project.

Some of the common features of Agile are as below

 Iterative, incremental and evolutionary

Agile methods break tasks into small increments with minimal planning and do not directly involve long-term planning. Iterations are short time frames (timeboxes) that typically last from one to four weeks. Each iteration involves a cross-functional team working in all functions: planning, requirements analysis, design, coding, unit testing, and acceptance testing. At the end of the iteration a working product is demonstrated to stakeholders. This minimizes overall risk and allows the project to adapt to changes quickly. An iteration might not add enough functionality to warrant a market release, but the goal is to have an available release (with minimal bugs) at the end of each iteration. Multiple iterations might be required to release a product or new features. Kaizen is the Japanese management philosophy of continuous improvement and uses Small increments for delivering continuous improvements.

Efficient and face-to-face communication

No matter what development disciplines are required, each agile team will contain a customer representative, e.g. Product Owner in Scrum. This person is appointed by stakeholders to act on their behalf and makes a personal commitment to being available for developers to answer mid-iteration questions. At the end of each iteration, stakeholders and the customer representative review progress and re-evaluate priorities with a view to optimizing the return on investment (ROI) and ensuring alignment with customer needs and company goals.

In agile software development, an information radiator is a (normally large) physical display located prominently in an office, where passers-by can see it. It presents an up-to-date summary of the status of a software project or other product.

Very short feedback loop and adaptation cycle

A common characteristic of agile development are meetings such as daily status meetings and Iteration Review meetings. We will learn about the details of the meetings later in the book, however, it is important to note that Agile teams meet frequently to discuss and get feedback from stakeholders. This enables a very short feedback loop which helps in Adaptation (change) just in case the Stakeholder expectations don’t match with what is delivered. Thru the regular feedback loop, the teams internally also discuss and solve impediments quickly so that the project is brought back on track literally on a daily basis.

Quality and Technical Excellence focus

Maintaining technical excellence is one of the key requirements of Agile Methodologies. Specific tools and techniques, such as continuous integration, automated unit testing, pair programming, test-driven development, code refactoring and other techniques are often used to improve quality and enhance project agility.

Flex Scope and Fixed Cost/Time

In a traditional approach, the fixed part is the Scope and the other factors such as Time and Cost is changed (of course by raising change requests) as per the changes in Scope.

Agile Methodology fixes cost, quality and time at the outset and uses the MOSCOW prioritization of scope into musts, shoulds, coulds and won't haves to adjust the project deliverable to meet the stated time constraint. The non-negotiable part is the Time and Cost. That is, you need to deliver features in a fixed time and at a fixed cost. What to deliver can be adjusted as per prioritization and as per the estimates in a given time and given cost.