When discussing the topic of continuous deployment, it is understandable that you might conjure up the image of every single commit by every developer being automatically deployed to production. It is natural to find this concerning because there are too many human factors involved that can send this awry. There is also the notion that there are no manual gates, but this isn't really true either. What is true is that we want to make small and controlled changes that are automatically deployed to production. This is because it is much easier to reason about the correctness of small changes and it is much easier to diagnose a problem in production when it could only be the result of a small change.
To facilitate these small deployment units, we must decouple deployment from release and treat the two as separate, continuous threads working in tandem. We...