Complex multi-tier enterprise applications assume reliable hardware and typically have dependencies on underlying operating systems, hardware configurations, and network topologies. The boundary between one application or service and another is often unclear. These traits make many enterprise applications difficult to move entirely to a public cloud.