I love QA. I admire testers’ discerning ways of thinking. QA is essential.
But manual QA is life-threatening and the bane of agility.
- Driverless cars: If teams are producing software right now for self-driving cars and they do not practice TDD…then I don’t want a future with self-driving cars.
- Same is true of systems which administer financial transactions, medical reports, tax calculations, democratic voting systems, everything.
Two weeks ago I met the CTO of a medical imaging company Their software takes MRI data as input and produces 3-dimensional maps of a human brain – their tools are designed specifically for neurosurgeons who operate on brain tumors. I asked him about their engineering practices of course! I was excited… I thought surely they’ve got serious automated QA practices in place to ensure the accuracy of the data, the fidelity of the image, and the precision of the “map”. (Their software provides neurosurgeons with “routes” through the brain tissue to the tumor – think of a Google Map [but in 3D] with route suggestions.) Turns out… they have manual QA “teams” scattered offshore who are regularly 3 to 7 weeks behind the development. That is, code is regularly contributed but feedback from manual QA staff is often 7 weeks later. Also, because the test cases are so complicated and numerous, their QA staff are regularly testing only the most recent adjustments/features.
I was shocked. I got emotional and actually caused a bit of a scene on the train. Like, “people’s lives are on the line!!” I said. “How can you stand being liable for that?”
You know what his response was? He said, “We only provide information to the surgeons. The decisions are their own.”
Bane of Agility
I’ve recently published a principle that states “As the intervals between deployments decrease, quality increases, and the amount & cost of technical debt decreases, and competitive advantage accumulates.” I called it the “Principle of Cumulative Quality Advantage” – it’s documented here with a nice graph and stuff.
Essentially, manual QA destroys agility. Why? Because manual QA is far more expensive than automated testing (especially if calculated on a “per test run” basis) so most organizations who perform manual QA simply do not run all tests frequently. So technical-debt increases as teams decide to defer both the creation and execution of tests, so quality decreases in unknown and unpredictable ways, thus deployments grow less frequent. When deployments are less frequent, the organization loses the ability to submit incremental improvements to their codebase safely and their ability to recover or patch critical flaws decreases.
Stop all manual QA. Instead, invest in cross-functionality in which QA & code are simultaneous. TDD is a well-known practice and shouldn’t be considered optional anymore.