Predictability with Agile
Anyone who has been involved, as a manager or stakeholder in traditional software development processes knows that software is almost never delivered as scheduled. More distressing is that, even toward the end of the development phase of the project, forecasting doesn't get any easier or more accurate. The reason is that, in traditional software development methodologies-the most common of which is the "Waterfall" method-a comprehensive (and believed to be "complete") specification is given to the engineering team and there is little interaction with stakeholders again until the software reaches "Alpha" release or initial testing. This period of "gestation" is typically months long and without meaningful milestones to measure progress (which can ultimately only be done by stakeholders), it is difficult for the development team (not to mention anyone outside the team) to determine how close they are to the finish line. Inevitably, the initial deliverable is not exactly what the stakeholder wants because:
- It is not what the stakeholder asked for (see Suitability with Agile )
- The market and competitive environment have changed (see Flexibility with Agile )
This often leads to additional "unplanned" development, or a new plan for a "phased" release, where the initial release is generally acknowledged by stakeholders to be less than the requirement. This outcome is one of the most common sources of discouragement for development teams.
Next, the formal testing process, which is even more unpredictable than development begins. Rarely do traditional development projects account for the elapsed time and additional development effort required to fix "bugs" uncovered in the testing process. (See Testability below).
Agile Methodologies yield much more predictable deliverables because:
- There are frequent (weekly to monthly) deliveries of working software (as confirmed by the stakeholder, not the developer)
- Misunderstandings in requirements are uncovered and addressed immediately
- Testing is integrated into the development cycle (See Testability below)
