<p>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.</p>
<p>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. </p>
<p>The client needed:</p>
<ul>
<li><strong>A coordinated testing strategy and methodology:</strong> 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.</li>
<li><strong>End-to-end testing infrastructure and management:</strong> 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.</li>
<li><strong>Orderly deployment process:</strong> 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.</li>
<li><strong>Automated testing and deployment infrastructure:</strong> 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.</li>
</ul>