Yesterday I had a chat with the folks at Codeship, a continuous integration and continuous deployment platform. The topic of immutable infrastructure came up and was intriguing to me, so I thought I would write about it. So what is immutable infrastructure? The concept of immutable infrastructure is to never change your existing production servers. Instead, build new automated servers and destroy the old. This concept falls in line with the “fail forward” belief system of many modern-day DevOps evangelists who believe that tweaking servers or rolling back code from servers in highly distributed systems is too risky and causes more problems than it is worth.
Many companies use some flavor of an agile methodology today with mixed results. I have written about agile fail patterns in the past, but some companies do an excellent job of applying agile best practices yet still suffer from missed dates, botched deployments, and low quality. Why is that, you may ask? Because most agile methodologies only address the development side of the house and clearly ignore the operations side of the house. The two need to work in tandem to produce the desired results, which is the goal of DevOps.
Those of us who work on complex computer systems know that it can be a daunting task to get all the different systems to communicate and work properly. The bigger the infrastructure gets, the more complex it becomes. Now, take the most complex system that you have designed or worked with and increase the complexity a hundredfold, and that might give you an idea of the complexity involved with the design and deployment of the Affordable Care Act web portal.