6.5. Development Innovations
6.5.1. Tool Support
There are a number of tools you can utilize to improve your agility. The most obvious is selecting the Configuration Management Patterns/Tools the team will use. This can eliminate significant amounts of rework and improve the efficiency of your team. In addition, it lays the groundwork for Continuous Integration (CI). CI means that changes to the code are integrated into the release as soon as the developer thinks they are complete. This reduces the cycle time and allows everyone to see how the iteration is progressing. In addition, it means that integration is completed in small steps, which significantly reduces its complexity.
Automated Unit Testing can be simplified with the use of existing testing frameworks like JUnit, CPPUnit, and NUnit. There are similar frameworks for almost every language in existence. Similarly, Automated Acceptance Testing is often accomplished with the Fit or Fitnesse tools.
6.5.2. Code Quality
The quality of the code and the system's overall design can be estimated with Code Metrics. These measures can help locate the sections of the code that are likely to be fragile and can give feedback on the design by analyzing the amount and types of coupling within the system. This information can help you target cleanup and testing activities to improve the return on those investments.
If the team is having trouble getting defects under control, Root Cause Analysis can help isolate the aspects of your process that might be the source of those defects.
Finally, the best thing the team can learn in order to maintain the quality of the code while doing iterative development is Source Code Refactoring. Refactorings are almost mechanical manipulations of the code that do not change its external behavior but clean up software rot before it overwhelms the system. There are a great many such refactorings, and knowledge of them will be critical to the success of any team using iterative development.
Coding Standards that require consistency in naming styles, structure of code, and types of comments can improve the code's readability and make it a better resource for the team. This needs to be done carefully because some standards require significant duplication of information.
Traditionally, Code Reviews have been used to ensure that a section of code (class, module, etc.) matches the required functionality and coding standards, but they are also a way to share information among the team. Many agile teams use Pair Programming as a strategy to get code review feedback instantaneously and thus improve the quality of the feedback and the speed with which the developer can respond to that feedback.
Another alternative to code reviews is Code Presentations where one member of the team presents some portion of the system to all of the members of the team. The goal of this presentation can be informational or as the beginning of a design revision discussion. Code Metrics that measure the rate of change in the source code or code quality can be used to target these presentations to parts of the system that are widely accessed or that may require redesign.
Finally, the philosophy of Team Ownership of Code gives everyone a stake in the quality of all of the code and encourages the sharing of ideas and information almost as team folklore.
6.6. General Process Innovations
This section summarizes a few process innovations that did not fit into the other categories.
Many agile organizations use an Onsite Customer to ensure that questions about functionality can be answered quickly. In cases where that direct resource is not available, teams often designate a Customer Surrogate to play that role. Although this is not as useful as having the actual customer present, the person playing this role is responsible for knowing the customer's or the market's demands and representing that viewpoint to the team.
For a team transitioning to the open and trusting agile values, "Anonymous" Early Warnings is a temporary strategy that encourages people to provide honest status information without fear, and it serves as a way of building trust.
Metrics that are gathered over time can provide significantly more information than just the value of the number. Trends and outliers can be found using Statistical Process Control. In addition, these techniques can compute the bounds of your team's capabilities and compare them to your customer's demands to help ensure you can meet those requirements.