Agile, at its core, is a philosophy rather than a fixed process—a philosophy that maintains customer satisfaction as the highest priority through early and continuous delivery of valuable software. It came into existence as a solution to the various shortcomings of the traditional sequential Waterfall model and over the last ten years, it has transformed the way companies are approaching software development by moving the focus away from managing it top-down in a rigid, procedural fashion to making it more iterative.
The success of agile lies in its flexibility. As a part of its “incremental and iterative” approach, it allows revisits to the different phases of development which directly affect and help improve project efficiency.
Agile branches out into various methodologies, all of which share its essence of working iteratively and incrementally.
Extreme Programming is a discipline of software development based on values of simplicity, communication, feedback, and courage. It works by bringing the whole team together in the presence of simple practices, with enough feedback to enable the team to see where they are and to tune the practices to their unique situation.
XP is the most prominent agile development methodology and just as all the other agile methodologies, it places greater emphasis on adaptability than predictability. It is designed to make a development project more flexible to changes, thus lowering the overall cost.
Extreme Programming is described by twelve best software engineering practices which can be grouped into four broad areas:
Fine scale feedback
- Pair Programming
- Planning Game
- Test Driven Development
- Whole Team
- Continuous Integration
- Design Improvement
- Small Releases
- Coding Standards
- Collective Code Ownership
- Simple Design
- System Metaphor
- Sustainable Pace
Scrum is a way for teams to work together to develop a product. Product development, using Scrum, occurs in small pieces, with each piece building upon previously created pieces. Building products one small piece at a time encourages creativity and enables teams to respond to feedback and change, to build exactly and only what is needed.
A major chunk of information on how things should be done is left to the team in charge of developing the product. The idea behind this is that the team would know the most advantageous way of solving the problem they are presented with. They are allowed to organize their own teams and encouraged to work cross-functionally. Scrum does away with redundant documentation and instead focuses on making progress through a series of sprints, which are basically time-boxed iterations of no more than a month usually.
Rational Unified Process
The Rational Unified Process is a Software Engineering Process. It provides a disciplined approach to assigning tasks and responsibilities within a development organization. Its goal is to ensure the production of high-quality software that meets the needs of its end-users, within a predictable schedule and budget.(
The RUP is an iterative software development process framework created by the Rational Software Corporation, a division of IBM. More details on RUP can be found on the IBM Website.
Lean Software Development
Lean software development takes its inspiration from the lean manufacturing approach, which is also known as ‘just-in-time production’ and was instituted by the Toyota Production System.
Lean aims at increasing speed while simultaneously decreasing cost. Lean development can be summarized by seven principles which have been picked up from Lean Manufacturing:
- Eliminate waste
- Amplify learning
- Defer commitment
- Deliver early
- Empower the team
- Build integrity in
- Optimize the whole
Kanban is a method for developing software products and processes with an emphasis on just-in-time delivery while not overloading the software developers. It emphasizes that developers pull work from a queue, and the process, from definition of a task to its delivery to the customer, is displayed for all participants to see.
Kanban hinges itself on the just-in-time production system. It requires the delivery team to visualize and manage the workflow in order to ensure that everything is running smoothly and if needed, changes are made incrementally. It also limits work-in-progress so that bottlenecks can be identified and dealt with.
DSDM (Dynamic Systems Development Method)
DSDM is a Rapid Application Development (RAD) approach to software development and provides for an agile project delivery framework which contains in itself an immense amount of project management knowledge. An important feature in DSDM is that the users are required to be actively involved. Teams are given the power to make decisions and frequent delivery of products becomes the active focus with the key criteria for acceptance being fitness for business purpose. The core techniques applied in DSDM are:
- Time boxing
- MoSCoW Rules
- Prototyping (Frequent Delivery and incremental development)
Feature Driven Development (FDD)
Just as the name suggests, the core of FDD revolves around features. It is client-centric, architecture-centric and blends some of the industry recognized best software engineering practices into one unit. An FDD project always starts by identifying the scope of the effort, the initial architecture, and the initial high-level plan. It is constructed keeping the following five processes in mind:
- Develop an overall model
- Build feature list
- Plan by feature
- Design by feature
- Build by feature