When you are building a system from scratch it’s easy to build a CI/CD pipeline that builds, tests and deploys the project and it’s dependencies in a single pipeline. From this vantage the project is always a fresh install and if you do things right executing migrations are also pretty simple.
But now what happens as some of the systems now become shared systems with their own pipelines and dependencies? Take, for example, databases or message queues. At some point the MQ is going to become a shared bus and the database will no longer scale in the largest VM… so now what?
This partitioning of services and micro services will eventually force you to return to the days when you had to install everything manually and one at a time. While the tools may be upgraded to buttons the risks are no different and the number of moving parts are the same.
The only way this gets better is if the pipeline is truly partitioned and automatic. Automating a rollback could be just as important.