When racing to execute a ‘cloud’ strategy, it can be very tempting for IT organizations to try and automate their way to the cloud. A key benefit of the cloud is operational efficiency. We know that humans are error prone and costly, which makes automation such an enticing solution. Add to this the fact that most customers already have the tools and expertise necessary to automate, so the barriers to this approach are extremely low. There’s only one problem – it won’t work.
Learn from the Best
Most of the best run datacenters and cloud scale applications use a set of core simplifying assumptions related to application architecture and infrastructure configuration. They encourage and enforce standardization in exchange for flexibility. This is the only way that they can operate the system at scale with efficiency. This doesn’t mean you handcuff developers with a litany of specific constraints. More commonly, it means that that there are specific design-patterns that are followed for things like state management, resiliency, multi-tenancy, elasticity etc. and there is plenty of flexibility in the exact implementation. They often provide libraries of services to help developers achieve desired outcomes in a low friction way.
Flexibility and Complexity are Two Sides of the Same Coin
Enterprises often prioritize flexibility over standardization because they sleep easier knowing that it offers them more control and customizability. There is a sense of safety in choosing a solution that meets every anticipated (even unanticipated!) requirement that you may have down the line even if it results in additional complexity and cost. Furthermore, enterprises often enable flexibility at the wrong level. Contrary to the approach of world class service providers, there is no flexibility in the implementation but there is flexibility in the strategy – i.e. “we use Oracle for our database but how/whether data is sharded is up to the developer”. As a result, you end up with thousands of unique custom applications. Sure they all use Oracle and run on WebSphere but they all use them in completely different ways and patterns. This is where the operational cost is hidden.
If you decide to try and automate your way out of this, you will forever etch this complexity into sophisticated scripts. Complicated automation tends to fail in complicated ways. Do you really want to double down on this strategy?
When done right, cloud (PaaS in particular) has the transformative capability to eliminate complexity. Rather than adding another layer into your shiny enterprise architecture diagram, PaaS helps you eliminate several.
I’m not arguing against automation because it is essential to any successful operational strategy. I am, however, arguing against automation for its own sake and as a Band-Aid. You must first simplify your architecture by making some hard tradeoffs, enabling flexibility at the right level and then you can automate. If automation alone could get you to the level of operational agility and excellence experienced by the best cloud providers in the world, you would already be there.