Optimizing testing for continuous deployment
In Chapter 1, Architecting for Innovation, we stated that the purpose of software architecture is to enable change. We want to continuously deliver innovations to our end users and produce business value. To meet this goal, we strive to reduce lead times so that we can increase the rate of feedback from end users and create knowledge about what works and what does not. To this end, we have focused throughout this book on optimizing our architecture for short lead times.
Now, we need to turn our attention toward optimizing our testing processes. Traditional testing assumes that we know what is going to work, and we can gather all the requirements and acceptance criteria upfront. Then, we assert that the software is correct before we deploy and release it to the end user.
However, our traditional testing practices work against our stated goal. They are optimized for large batch sizes, which increases deployment risk. They encourage...