Software companies often have a problem closing the gap between what the customer orders and what the engineers deliver. Usually, the main cause of this difficulty is the separation of the development environment and the production environment. After all, when an engineer only has access to the development environment, they will focus on delivering results there.
In the past, engineers produced code that was later shaped into products. Integration took care of separate units of software to make it one, coherent whole, testing provided necessary QA, and operations deployed the integrated code into production. Performing these tasks manually can take anywhere from hours to weeks. A bug in a change introduced by development could manifest itself in production much later, when it was almost forgotten by its author.