I was asked a curious question the other day: "Are all changes made to production systems actually deployments?"
I wish the answer was yes, but unfortunately patches do get applied directly to production systems without going through standard deployment processes.
Everyone understands the scenario. Code has been deployed using the normal processes, then someone has something that simply must be fixed urgently in the productions systems. At that point, you have two choices:
- The traditional choice is to urgently patch the production server, then reapply those changes back into the development process.
- The ideal DevOps approach is that an urgent patch is made in earlier environments then deployed through the normal processes.
The reason that people opt for the traditional choice above is that going back through the processes simply takes too long in most organizations. The problem with this option is that there's no guarantee that the change that was made in production will be reapplied the same way when it goes back into the normal processes. Worse, it might not be applied at all. Even worse, if there are multiple production servers, it might be applied differently to each of those as well.
Then you have a real mess to deal with. Deployments start to break, and because they are then painful, they become less frequent and more risky, and then they break even more. It's a horrible cycle that you can easily get into.
The aim when working with DevOps is to streamline the process for doing this to the point where you won't hesitate to have it go through the normal deployment processes. You urgently patch and deploy the patch instead.