The benefits of agile software methods, including faster time to market, better responsiveness to changing customer requirements and higher application quality are undeniable to those who have mastered these practices. Agile practices, however, have been defined and recommended primarily to small team environments where co-location, ready access to interactive customers and small team size are the defining rule. Are the benefits of agility to be denied to those larger software enterprises who don't share these simple paradigms? Or can the industry learn from these practices and apply some of the core principles to large scale development of applications that require 100, 200 or even 1,000 distributed team members to achieve?
In the last few years, many of us have been engaged daily in bringing higher degrees of agility to these larger scale enterprises and these companies have demonstrated that they can indeed benefit from application of agile principles. In Part I of this article, we will describe seven best practices of agility that natively scale to the enterprise level. In Part II, we will describe an additional set of seven organizational best practices that a company can master to achieve even more of the benefits of software agility on an enterprise scale.
Over the last decade, a variety of agile methods have emerged. Ranging from Extreme Programming through the methods of Scrum, DSDM, Feature Driven Development, Lean Software Development, and Test-Driven Development to the iterative and incremental methods as espoused by the Rational Unified Process and its agile variants, the basic principles of software agility have now been effectively applied in thousands of projects. As we have experienced these various methods in practice we have come to understand that, while the methods themselves vary, the core practices themselves have more in common than they are different. Moreover, we have also seen that, once mastered, many of these core practices scale natively and can be applied directly to the enterprise level where larger and more distributed teams and some degree of outsourcing is the norm. This should provide some comfort to those CIOs, VPs of Development and other agents of organizational change who look to adopt these methods to improve the software productivity of their larger enterprise.
Seven Agile Team Practices that Scale
Specifically, we observed seven principles common to all agile methods that can be readily applied throughout the enterprise.
1. Iteration foundation. If there is one single practice that characterizes the agile methods and differentiates them from the sequential waterfall processes that have been applied in the past, it is the ability of the team to create tested working code in a small time box . While not easy to master, teams that learn this skill fundamentally change the nature of their software practices. There is no going back; once mastered this basic paradigm could be applied at the small team feature or component level, and with some work, at the system-level as well. In so doing, the basic building block of agile is achieved and the foundation of agility serves the business and development needs that follows.
2. The definebuildtest component team. In order to build working code in a short time box, teams must reorganize to contain the three basic skills necessary to deliver software: a) product owners, who serve as customer proxies and define the solution, b) team members who can create the code with a minimum of distractions and an absolute minimum of multiplexing other projects, and c) integral test, test automation and QA functions. This definebuildtest component team, or the fractal software unit , if you will, is the cornerstone organizational unit of agility. While eliminating the functional barriers that may have prevented teams from organizing this way in the past is not a trivial undertaking, the process does scale in that there is no limit to the number of such teams that can be formed!
3. Smaller and more frequent releases. A further principle of agility requires continuous feedback from the customer or the marketplace as to the fitness of the application for its intended purpose. In many IT shops this can be accomplished by pushing the software to the users at the end of each iteration. For independent software vendors however, releasing software to the marketplace may be a