Scrum, as evangelized by Ken Schwaber, has emerged as one of the most popular light weight frameworks intended to help guide teams in the effective implementation of agile practices. The ScrumMaster plays a leadership role in managing the performance of the development team. Part coach and part manager, the ScrumMaster sees that barriers to performance are eliminated on a daily basis. The product owner focuses on managing the product backlog (containing the requirements for the system being developed). The performance of the team can be measured in the number of items completed from the backlog. There is a lot more to consider in evaluating the performance of the team.
My own career has focused on process improvement including implementation of configuration management (CM) best practices. The key focus in agile CM is to provide a fast and repeatable way to build, package, and automatically deploy releases. Continuous integration provides a structure for continuously building and deploying releases that make rapid iterative development fast and effective. Most Scrum teams rely upon these practices to help manage iterative development. These practices significantly help teams develop better software with fewer defects.
Agile focuses on taking a minimal approach to tracking requirements largely in response to the experience of many technology professionals who participated in fruitless efforts to track requirements that effectively changed before the development work could be completed. Agile focuses on working software over comprehensive documentation (as specified in the Agile Manifesto).
Obviously, there are times when requirements tracking is not optional, and test-driven development (TDD) can sometimes help to document the same information. TDD puts the right focus on using verification and validation to improve performance and deliver quality applications. Test cases can also be used to document requirements in a practical and reasonable way. Agile also puts the right focus on integrating testing into the automated build process. From automated unit testing in the continuous integration stream to automated functional and regression testing, TDD helps improve the effectiveness of the development team.
Dean Leffingwell describes the "agile release train" in his book Agile Software Requirements. In this book, Leffingwell discusses releasing as a continuous flow of releasing value to the users in small, frequent increments—a continuous build of value added to the marketplace. This means that you can release code often, with little fanfare.
Closely related to releasing is the concept of continuous deployment. Jez Humble and David Farley discuss it in Continuous Delivery. This book puts the focus on implementing rapid build, test, and deployment automation and describes the deployment pipeline as an automated manifestation of getting software from version control into the hands of the users. These practices enable the team to rapidly build, package, test, and deploy applications in an iterative and effective way.
There are many lean practices that also help to improve the team's performance. Mary and Tom Poppendieck discuss seven principles that improve the performance of the team, including: eliminating waste, building quality into the code from the start, creating knowledge in the form of requirements that are amenable to feedback from the stakeholders and customers, deferring commitment to the last responsible moment, delivering functionality to the customer on a rapid basis, respecting people, and optimizing the whole value stream instead of focusing on just one part. The Poppendiecks' work was largely influenced by the early work done at Toyota and especially the work done by E. Edwards Demings, widely regarded as the father of quality management.
Agile focuses on Individuals and interactions over processes and tools (as described in the Agile Manifesto), but this does not mean that processes and tools are optional. We've discussed the importance of build, package, testing, and deployment automation, which is accomplished with the effective use of tools. Process maturity is also essential to consider when implementing agile. Scott Ambler defines the Agile Scaling Model (ASM) as a framework for the effective adoption and tailoring of agile practices to meet the needs of an agile team of any size. This is particularly important when agile needs to scale to support larger development efforts. The ASM distinguishes between three scaling categories:
- Core agile development methods are optimized for small, collocated, fairly straightforward teams.
- Disciplined agile delivery methods are self-organizing within an appropriate governance framework.
- Agility at scale focuses on disciplined agile delivery where one or more scaling factors are applicable.
Potential agile scaling factors include team size, geographic distribution of the team, regulatory compliance requirements, domain complexity, organizational distribution, technical complexity, organizational complexity, and enterprise discipline.
In his ebook IBM Agility at Scale: Become as Agile as You Can Be, Ambler provides some realistic and very valid measures of whether or not a team is really agile:
- Value: Agile teams provide value to their stakeholders on a regular basis.
- Validation: Agile teams do, at a minimum, continuous developer regression testing, and many disciplined agile teams take a TDD approach.
- Active stakeholder participation: Agile teams work closely with their stakeholders, ideally on a daily basis.
- Self organization: Agile teams are self organizing, and disciplined agile teams work within an appropriate governance framework.
- Improvement: Agile teams regularly reflect on—and disciplined teams also measure—how they work together and then act to improve their findings in a timely manner.
Organizational performance can be significantly improved by employing agile and lean practices. Rapid application development using iterative practices and automated build, packaging, testing, and deployment result in better systems. TDD and lean practices also lead to better software. Implementing an appropriate agile process at scale helps to improve team performance resulting in better quality software, enhanced team performance, and satisfied customers.