The most important are reducing the blast radius, early detection, and reducing the mean time to repair.
In GitLab we offer incremental rollouts, auto monitoring, and soon auto rollback to help with these.
If you deploy each change you can't afford to handhold it.
I supposed you could just deploy stuff to prod when the build finishes without being in a state where you can safely deploy. Well now that I think of it I have seen places that do that, but it never turns out well.
It's similar to how continuous integration means your master is always stable (all builds work and all tests pass.)
If you can't do a 1% (or 10%) canaried deploy, you're not yet ready for continuous deployment.
I have still to understand how 100% coverage ensures that the product looks good, isn't confusing, does not contain grammar errors and actually implement what the customer wanted in the first place.
Maybe this works well in a company where everyone is great UI artists and who sits with the customers from day 1 until deploy.
Where I work we often think we have a good idea om what we want to implement but after seeing it run we realize we need to tweak some things to make it really good.
1. What does bulletproof mean anyway? Total coverage? Well tested tests?
2. "Good enough" is deliberately vague and obviously will depend on whether you're writing a game or a HFT application.
I see this line of reasoning a lot in the industry and I think it misses a key piece: monitoring/dev-ops.
Unlike the author, I think there is a clear progression from CI to CD. Where most teams stumble, is they are not prepared for the shift towards deploying new code regularly: measuring outcomes in production, running experiments, and validating assumptions against real traffic.
Developers tend to think their job is done once their PR merges, and therefore teams struggle to reap the benefits of continuous deployment.