Promoting a release of code to test is like sweeping up after a dirty job. You need to clean out all the bugs, and when you think you’re done, go back and check everything again.
Back my formative high-school years, I worked summers as a landscaper. It was really messy. Dirt, mulch, sand, etc. By the end of a job, the customer’s driveway would be covered with crud.
As a rookie, my job was to sweep up. So, I worked really hard my first time and swept the drive completely clean. I had done a masterful job. Not one speck of sand escaped my speedy broom.
“Good.”, said my boss. “Now sweep it again.”
To my surprise, the extra sweep picked up a small but substantial pile of dirt. I had been convinced I was done, but there was in fact a teeny bit more to do.
I think deploying software is like sweeping up after yard-work. You scrub all your bugs, marking them complete as each is committed, but in the end everything still needs at least one extra sweep before promoting the lot.
I’m always a little surprised at what kind of things can go wrong, even when every ticket in the batch is marked “fixed”.