This post is part of a series on Measuring and Managing Agile Maturity. Click here to start at the beginning.
Developing Discipline
The ability for a development team to leverage emerging software development best practices is a critical enabler for the overall health and sustainability of an organizations ability to build software solutions that meet the ever changing business demands—better, faster, cheaper. The key practices that comprise this tracking agility discipline and need to be assessed and measured are:
- Pair Programming: Double the brainpower available during coding activities
- Refactoring: Enables code quality improvement without changing its behavior
- Simple Design: Allows the design to change to support any feature request
- Test-Driven Development: Drives the design by creating tests first
- Collective Code Ownership: Enables team to solve code problems anywhere
- Coding Standards: Provide a template for seamlessly joining the team’s work
Assessing and measuring a team’s maturity, relative to their design and coding practices, is a key indicator of a team’s ability to achieve any true measure of software agility. As an example, a team’s understanding and application of object-oriented analysis and design techniques, coupled with the ability to effectively re-factor code to improve code quality without changing its behavior, is a key indicator of a team’s maturity in this software agility discipline.
Testing Discipline
Agile emphasizes working software as the primary measure of progress. Several techniques, such as continuous integration, automated or unit testing, pair programming, test-driven development, design patterns, domain-driven design, and code refactoring are often used to improve quality and enhance development agility. Achieving maturity in the testing discipline is imperative to an organization’s ability to achieve software agility.
- Acceptance Tests: Defines the acceptance of a story at iteration end
- Test First: Allows programmers the confidence that their code works
- Performance Optimization: Uses hard data to drive optimization efforts
- Exploratory Testing: Enables testers to identify thought processes gaps
- Unit Tests: Creating tests that demonstrate inside-the-box mechanisms work
Assessing and measuring a team’s practices around testing is a true indicator of the overall quality of the software that is being produced. Teams that are effectively writing unit and acceptance tests that they harness into their continuous integration frameworks are most likely to succeed in this critical software agility discipline.