Agile is a philosophy and consists of thought processes which are summed up in the Agile Manifesto. Some of the key thought processes which Agile encompasses are
- Focus on Value
- Elimination of wastage and improvement of productivity
- Respecting Change
- Iterative and Incremental Delivery
- Collaborating teams
- Working with variable scope
- Focus on working product
- Time boxed delivery
- Focus on continuous improvements
Agile Methodologies and Frameworks
When one thinks about project development methodologies, the first thing that comes to our mind are the methodologies described in PMBOK guide or PRINCE2 Manual. Therefore a question always arises in our minds, is another methodology really required?
The answer to this question lies in the fact that over the last 10-15 years the world of people working in the Knowledge Environment has changed drastically. People working in the Knowledge environments such as Information Technology (IT), Engineering, Teaching, Scientists, Lawyers, Doctors often need to work differently than the conventional Manufacturing environments. The key in the Knowledge environment lies in Communicating, Collaborating, Adapting to provide maximum value, since everyone in the Knowledge world is special – they have something unique and they have something more to contribute than following orders routinely. This is the thought process which has evolved the development methodologies in the recent past in the Knowledge based environments.
Development methods exist on a continuum from adaptive to predictive. Agile methods lie on the adaptive side of this continuum. One key of adaptive development methods is a “Rolling Wave” approach to schedule planning, which identifies milestones but leaves flexibility in the path to reach them, and also allows for the milestones themselves to change. Adaptive methods focus on adapting quickly to changing realities. An adaptive team changes as per needs of the project. An adaptive team will have difficulty describing exactly what will happen in the future. The further away a date is, the more vague an adaptive method will be about what will happen on that date. When asked about a release six months from now, an adaptive team might be able to report only the mission statement for the release, or a statement of expected value vs. cost.
Predictive methods, in contrast, focus on analyzing and planning the future in detail and cater for known risks. In the extremes, a predictive team can report exactly what features and tasks are planned for the entire length of the development process. Predictive methods rely on effective early phase analysis and if this goes very wrong, the project may have difficulty changing direction. Predictive teams will often institute a Change Control Board to ensure that only the most valuable changes are considered.
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 and frameworks. Most promote development, teamwork, collaboration, and process adaptability throughout the life-cycle of the project.
Some of the common features of what is 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. Iterative, incremental delivery is what is agile basic characteristic
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.
When is Agile the appropriate choice
The most appropriate projects for agile are ones with aggressive deadlines, a high degree of complexity, and a high degree of novelty (uniqueness) to them. We want to use agile when we are doing something that is new, or at least new to the team building it. If it’s something the team has done before over and over then the team probably doesn’t need an agile approach.
To my mind, this is where some of the manufacturing analogies come in. If we are building the same car day after day, we learn pretty quickly all the nuances of building that car. We don’t need an agile approach because the novelty of the situation is low. Novelty alone does not mean we should use an agile process.
The project needs a certain amount of complexity. One final element I believe is required in making a project appropriate for agile is urgency. The timeboxes and iterations of an agile approach are devised to keep the intensity and focus going on a project.
If there’s no urgency to the project, those are unneeded. So let’s see how these three factors–urgency, complexity, and novelty–mix on various projects, starting of course with software projects. There couldn’t be a better fit. Software projects are notoriously complex. Each software project is largely a new endeavor. And in today’s world, there is almost always a sense of urgency.
So, agile is most appropriate on any urgent project with significant complexity and novelty