How do you eat an elephant? One bite at a time.
That’s the same basic philosophy behind a gradual shift in software development practices.
Like an elephant, application development projects can be large, intimidating and hard to handle. For years, traditional development projects focused on a “big bite” approach in which development teams gathered all known requirements for the whole product, developed all elements of the software and finally tested the entire product before release.
Today, however, a majority of software development organizations have adopted “agile” development methodologies to improve the speed, flexibility and overall reliability of the final product. In essence, agile development projects focus on small, bite-sized pieces delivered incrementally, one feature at a time.
In a recent survey of more than 100 software development organizations, the Cutter Consortium found that 77 percent reported having adopted agile methods, at least for some of their projects. The survey also explored the effect of agile methods on software maintenance. In virtually all support categories, agile-developed software products generally were easier to maintain and customer satisfaction was higher compared to products developed using traditional methods. Fifty-three percent said agile-developed software is easier to support due to frequent product releases and customer involvement during development.
“What I found was that a significant number of organizations reported that customer involvement during agile development leads to higher customer satisfaction, which in turn leads to better interaction with customers and users,” said E.M. Bennatan, senior consultant, Cutter Consortium. “No companies disagreed — that is, none found that customer involvement hindered product support.
“Interestingly, about a third reported that agile-developed products are usually released with fewer defects, thus reducing the need for software maintenance, while only 3 percent found more defects, which increased the need for maintenance.”
Surveyed companies also reported that products with frequent releases and more customer involvement require fewer support resources (staff, budget, etc.). Additionally, they reported that frequent product releases reduced the need for customer-specific changes.
“The general conclusion from these findings is that agile-developed software products are usually, but not always, easier to support,” said Bennatan, adding that specific product characteristics and the level of agile expertise can sometimes produce different results. “All the same, the fact that agile-developed software products are usually easier to support should encourage organizations to consider the adoption of agile when feasible.”
The term “agile development” was coined in 2001 when the Agile Manifesto was formulated. It emphasized close collaboration between programmer teams and business experts, face-to-face communication (as more efficient than written documentation), frequent delivery of features that could add immediate business value, and tight, self-organizing teams.
Agile development is actually an umbrella term for a number of iterative and incremental methodologies such as Extreme Programming (XP), Scrum, Crystal, Dynamic Systems Development Method (DSDM), Lean Development and Feature Driven Development (FDD). Unlike traditional approaches aimed at delivering a large application at the end of a long project, agile software development focuses on keeping code simple, testing often, and rapidly delivering working software to the customer, enabling the gathering of customer feedback at the earliest possible opportunity throughout the life of the project.
The agile approach requires continuous planning, which frequently leads to far more satisfactory results than the extensive up-front planning in traditional development methodologies. Even the slightest adjustments and modifications can quickly cause upfront plans to fall out of synch with project realities, leading to time-consuming efforts to reconcile the original plan to the new project scope. However, continuous planning enables agile development teams to take modifications in stride.
Continuous planning and frequent testing also help improve the chances of delivering “bug-free” working software at each stage the project, which is one of the key development principles described in the Agile Manifesto. This is essential because it ensures that defects are not passed downstream when the team moves on to the next iteration.
Delivering fully functional software in a piece-by-piece approach reduces risk and increases value because products can be put into production immediately, providing a clear picture of what has been completed to date and allowing the organization to begin reaping benefits before all the intended features are ready. What’s more, the agile approach gives an organization the flexibility to change direction or adapt the next iterations based on actually seeing and using the software.
Rapid deployment and continual customer feedback contribute to another big advantage of agile development — reduced time to market. Development teams utilizing agile practices were on average 37 percent faster delivering their software to market than their counterparts using traditional methodologies, according to a study by QSM Associates. The report also concluded that agile teams were able to maintain normal defect counts despite significant schedule compression.
“It is becoming clear that agile practices have a very positive and demonstrable impact on software development teams across the enterprise,” said Michael Mah, managing partner of QSM Associates. “I expect to see these already impressive results improve as these teams continue to scale agile across their organizations and further progress along the agile maturity curve.”