In the past years I’ve worked with various clients to migrate existing workloads to the cloud and to build new ones in a cloud-native fashion. Most of the time the most important goal for using the cloud were expectations regarding significant cost reductions. This might be a result of using cloud services. However, in my opinion there’s just one reason for any business to get into the cloud.
Leveraging service offerings provided by public cloud providers are oftentimes associated with the following advantages:
- Speed & Velocity
- Flexibility & Elasticity
- Cost Reduction
These are all valid and well-known benefits for anyone who is a little bit familiar with cloud computing. Especially the last one - Cost Reduction - is oftentimes the main focus of businesses for moving to the cloud. Of all the benefits listed above it is the most easiest to measure and reducing costs is always a good story to tell.
I’d like to quickly discuss each of these benefits and try to explain why I think that they should not be the ones that should drive the actual decision for moving to the cloud. Instead, there’s only one overarching goal which can be realized by exploiting the benefits mentioned above. This goal has a profound impact on value creation for the business.
For me, the most fundamental change the cloud provides - independent of the actual cloud provider - are its self-service capabilities. It literally just a couple of minutes to start a server or even a whole fleet of these. As a developer it’s even more revolutionary that everything can be created and changed through APIs. This way not only the application are coded by also the infrastructure it is running on can be expressed on code. This way a lot of sophisticated stuff can be build leveraging these APIs.
Therefore, using Infrastructure as Code (IaC) is a no-brainer nowadays. In my opinion it should be the goal of any project aiming at running applications in the cloud to script and automate as much of the infrastructure, configuration and processes associated with running the application. It becomes as important to invest in this tooling as in building the application itself.
This opens up a lot of possibilities:
- Testing changes to the infrastructure and configuration before applying them to production
- Setting up identical environments for (temporary) purposes, like doing a performance tests
- Setting up the environment in different regions for better serving customers all over the world
Investing in automation helps to reduce human errors since repeating tasks run without human intervention. For me, it was an important learning from past projects that the early investment in scripting, tooling and automation pays off many times during the lifetime of a project. Unfortunately, it’s challenging to measure the return on investment to prove the point.
Although a high degree of automation is oftentimes associated with cloud environments it’s not limited to these. Of course it can also be applied to standard on-premises environments and private cloud setups.
Speed & Velocity
Speed and velocity regarding the ability to rapidly change applications for adapting to changes in business and non-functional requirements is direct result of a high degree if automation. Many studies show that there’s a direct connection between high performing organizations and their ability to deploy changes to their applications into production quickly. In this regard, the State of DevOps reports which have been conducted by the DORA since 2014 are very insightful and I encourage everyone to read the most recent one.
Again, although this oftentimes is associated with leveraging the public cloud a lot of improvements can also be achieved in standard on-premises environments. This starts with setting up CI/CD pipelines, running automated tests, increasing test coverage, etc.
Flexibility & Elasticity
Nowadays, a public cloud provider offers a vast amount of services. This opens up the flexibility for developers to choose exactly what they need to achieve their goal. For example, Amazon Web Services (AWS) praises themselves that they have a wide range of different managed database offerings - from traditional SQL database, over NoSQL and Graph databases to ones specialized on handling time series data. The developer just needs to choose the one that suites the needs best and does not need to worry much about setting it up and maintaining it.
Additionally, because of vast resources a cloud provider manages in their data centers around the world, they can deliver true elasticity. This opens up much more possibilities to scale the infrastructure in and out depending on the current load of the application. As a result, it should increase the experience for the end users because they can use responsive applications. Additionally, the application can be hosted more cost effective because the necessary resources are consumed only when actually needed.
Security is an important part in any application and the infrastructure it runs on. It has to be ensured that the application has a very small attack surface for any hackers.
Many of the services offered by cloud providers are already hardened against common attacks. For example, the service AWS CloudFront - Content Delivery Network (CDN) - does not only help you to deliver content to your users faster by storing it in edge locations in close proximity to the user. From a security perspective it shields the infrastructure and therefore the applications that run on it from certain kinds of attacks, like Distributed Denial of Service (DDoS).
On the other hand it needs to be ensured that only certain personnel inside the organization are allowed to perform certain actions, mostly on infrastructure level. Of course this is very important when it comes to data security and privacy since access to this data must be very restricted. But it does not stop there. From a governance and compliance standpoint it must be ensured that certain rules are not violated. For example, there might be rules that remote access to servers via SSH or Remote Desktop are only allowed from within the network of the organization. Another example might be that developers are only allowed to set up their infrastructure in certain geographic regions.
Since cloud providers offer anything in the cloud with an API first approach all the data regarding security settings can be evaluated automatically. This helps when it comes to performing audits, etc. Furthermore, cloud providers offer means of restricting access to services and data on a very granular level. For example, it is possible to restrict a user or application to read only certain objects from S3 while forbidding the manipulation of any data.
As mentioned before, one of the main arguments for using cloud services is expectations in significant cost reduction. Unfortunately, oftentimes the assumption is that costs can be reduced by simply hosting an application in the cloud. In my experiences this is oftentimes not true, especially not in lift & shift or re-host scenarios. In these scenarios you would simply build the same infrastructure used on-premise in the cloud with the absolute least amount of changes.
In order to really reduce costs when moving to the cloud you must embrace the way this environment works. For example, since you only pay for what you use it’s obvious to turn off resources if you don’t need them. Additionally, since the cloud is elastic it also requires the applications running on it to be elastic, too. Therefore, the resources consumed by the application scales in and out depending on the traffic.
Unfortunately, not every application is ready to be run in this way. Instead it has to be refactored to leverage the benefits. And this, of course, leads to additional costs that need to be invested into the application itself. This investment oftentimes exceeds the expected cost savings leading to an amortization far into the future. Therefore, short-sighted managers come to the conclusion that moving to the cloud makes no sense business wise.
The main reason: Innovation
The focus on just one dimension - oftentimes cost reduction - blurs the vision for the other benefits cloud adoption yields. Infrastructure and applications become more resilient, making changes becomes easier, time to recover from failures is reduced, etc. Of course, many of these benefits can also be realized in on-premise environments but the cloud makes it almost necessary - and oftentimes more easy - to achieve them.
Therefore, all the benefits of the cloud outlined before - Self-Service, Speed & Velocity, Flexibility & Elasticity, Security, Cost Reduction - lead to the most important reason why companies large and small should consider moving to the cloud and leveraging services offered by the cloud providers: Innovation.
It’s obvious that a high degree of automation leads to a lower rate of errors for common tasks and increases the reliability of repeated processes like building, testing and deployment. Ultimately, it frees up the time of developers to build new and innovative features which provides the business to close the gap to the competition or even outperform it.
Likewise, using managed services for common system components like load balancers and databases frees up time for developers and administrators to work on other things providing more value to the business.
Thanks to the pay per use model it’s possible to run experiments for validating hypothesis of the business, e.g. by quickly analyzing huge amounts of data leveraging a huge pool of resources.
Last but not least the public cloud providers themselves are innovating at a breathtaking speed. They continuously offer improvements to existing services or provide entirely new ones. Most of the time these new services can be integrated pretty easily and therefore it’s possible to evaluate whether they can be leveraged to deliver value for the business. An area of particular focus is in the Machine Learning and Artificial Intelligence (ML/AI) space. In this regard the famous phrase Standing on the shoulder of giants actually makes sense.
There are many good and valid reasons for a company to set out for the cloud. However, to fully leverage the potential of this environment is to see it as a driver for innovation. This also means that a different mindset must be adopted. Instead of seeing the cloud as a means for reducing costs and operational overhead it becomes the Lab for IT projects. It fosters innovation and has the potential to be the differentiating factor for the business to get an edge over the competition.