Cloud computing has posted double-digit growth rates for the last decade and there is no sign of it slowing down. We’re living in a world where data grows exponentially, yet application performance is still expected to increase. This creates a tremendous challenge for legacy infrastructure. Fortunately, modern solutions such as NoSQL databases or Kafka are designed to run in the cloud.
Cloud-based software is easy to scale in response to unpredictable data volume, so it’s no surprise that companies embrace the cloud to improve agility and flexibility. Despite the benefits of the cloud, a number of companies aren’t able to make the leap and are forced to settle with hosting on-premise applications. Let’s review a few arguments against cloud computing.
Cost and Control
The history of computing can be described in stages. Initially, applications were hosted on in-house physical servers managed by the organization’s IT department. Virtual machines (*VMs) arrived on the scene and enabled siloed applications to run within OS instances greatly enhancing the utilization and economic efficiency of these servers. When cloud computing emerged in the late 2000s, users could fine-tune computing resources by scaling according to the needs of their platform. It is for this reason that we are presently seeing a higher demand for *serverless computing via containerized solutions that are built around the cloud platform.
In each of the above stages (VMs, *containers, serverless), a middleman was inserted into the software deployment process. Consequently, in exchange for the added functionality the middleman provides, cost and architectural complexity are simultaneously increased. Due to limited server access, users may lose some control over their data or could experience difficulties customizing the host environment. Although there is resistance when entering a new stage, the new form of computing is progressively refined, stabilized, and adopted. The speed, security, and effectiveness of a company’s applications differentiate it from competitors, rather than how it manages this infrastructure. Thus, outsourcing the server hardwares and OS becomes an easier decision.
In addition to the cost of hosting an on-premises application, the complementary resources such as admin time, hardware capacity, maintenance, and professional services should also be considered. Besides, as the complexity of modern app architectures (i.e containers, serverless, etc.) increases, it makes more sense to invest resources into your core business while allowing the cloud to handle expensive, error-prone, and non-differentiating IT tasks.
Security and Compliance
Although cloud computing is rapidly becoming the norm in many industries, the utility of an on-premises environment still fills an important niche. Due to the greater level of control and data isolation afforded by on-prem, the migration to cloud-based solutions is understandably slower for companies in sectors where data transfers must adhere to mandated security and privacy guidelines. With that being said, there is no doubt that cloud security will only continue to improve. Cloud platform providers such as Amazon (AWS), Microsoft (Azure), and Google (GCP) have continuously improved upon existing technologies while raising the bar with new ones. Over time, we anticipate that cloud computing will eventually become the preferred solution for those who presently require an on-premises implementation.
Although cloud computing has considerably grown in popularity, we’re still in the early phase of its adoption. It will only continue to improve in cost and performance. Although it isn’t a fit for all scenarios, it’s here to stay.
*VMs: a compute resource that uses software instead of a physical computer to run programs and deploy apps.
*Serverless: a way to describe the services, practices, and strategies that enable you to build more agile applications.
*Containers: A container is a standard unit of software that packages up code and all its dependencies so the application runs quickly and reliably from one computing environment to another.