The single most significant challenge was that the client had no cohesive Quality Assurance (QA) infrastructure. Not a single bug had been logged, which meant there was no way to identify vulnerable components in the overall application architecture. Without a viable change history, tracking the overall development of the software infrastructure was extremely difficult. The client was using Rally, but only to develop customer stories.
Another key challenge was to get the client's developers realize the value regression testing provides in gauging the impact a new feature can have on the existing codebase. Without a set of regression tests, there's no way to predict in advance if a new feature, or other application modification, broke existing functionality. Individual developers were engaged in sporadic unit testing without a coordinated central strategy. To further compound the problem, only a single round of uncoordinated user testing occurred with each new release.
The client needed:
- A coordinated testing strategy and methodology: If the developer did not catch the bug, the only other way it was spotted was in production. The client needed a coordinated testing strategy and an introduction to testing methodology.
- End-to-end testing infrastructure and management: In addition to organized unit testing, the client also needed a consistent testing infrastructure that performed tests that included integration testing, feature testing, smoke testing, and regression testing. A centralized test management system was also needed to tie the various forms of testing together.
- Orderly deployment process: Developers could post code directly to production without testing, verification, or validation. At times, when a developer merged a new branch, conflicting commits caused bugs. The client needed an orderly way to deploy new features.
- Automated testing and deployment infrastructure: The client needed an automated infrastructure that accounted for testing, integration, and deployment in order to minimize potential errors during the rollout of a new release.