The cloud has been a hot topic for the last several years. However, it is not always easy to understand how to use this particular tool because of information overload and massive marketing activities performed by vendors.
Any successful startup founder should be actively seeking ways to reduce costs and increase efficiency. Cloud tech has long been advertised as a silver bullet for solving these tasks. Is it true? Which approach is best to use and what mistakes should be avoided while choosing cloud technology for a new company?
I had the opportunity to sit and talk about these issues with Serhii Korniushov, an IT manager and engineer with more than 10 years of experience in multiple industries, from GameDev to blockchain.
To start, are real startups using the cloud, or is it for big companies only?
Well, if we speak about cloud infrastructure, there are lots of hot tech startups that build everything using the cloud (there are still non-cloud ready tasks like marketing and sales, though). For example, Amazon Web Services (Amazon) has companies such as Airbnb and Zocdoc as their customers. They do not buy hardware and manage it themselves, they move everything to the cloud, and it works.
Some companies have switched to the cloud during their history, as it was with Netflix. It started moving toward the cloud more than ten years ago, after the significant incident with their infrastructure. One of their database servers corrupted and the whole company could not operate for a day or two – they were sending DVDs at the time, and could not do it. So, their online streaming service was initially developed to live in the cloud and they have a partnership with Amazon.
Okay, but what exactly do these companies seek in the cloud? Why is it that a business might decide that is the right way to build everything?
First of all, there are no ideal solutions, just suitable and not suitable ones. Sowe need to start from the beginning, i.e.look at the business goals. If the company works in a competitive industry, it means it has to be fast: releasing new services and products, running experiments, improving product-market fit, etc.
This is like owning an apartment versus renting it. If you work worldwide, travelling back and forth, exploring new interior design trends, and so on, it might just be tough to do when you buy the apartment.
When we speak about technical infrastructure, things get even more complicated. There are several ways of doing things. First, you can rent a dedicated server and set it up, or buy your own hardware and invest time and money in backing up, cooling, upgrading resiliency, etc.
Or you can use Amazon Web Services(AWS) / Google Cloud Platform (GCP) / Azure / Heroku and in a couple of clicks get the initial infrastructure (server nodes, database, data storage, DNS, etc.), scale it quickly when needed, and reduce it when the workload decreases.
This is the way that provides maximum flexibility and an ability to run experiments. When you have physical hardware bought for a specific project, if the project does not take off as expected you might end up worrying about what to do with all these idle servers.
You might sell them for a discount and lose money, or re-use them somehow. When you rent dedicated servers, you should sign up for a long period (a month or even a year). Also, you need to set up, scale, and support everything by yourself. Cloud services are much easier and faster.
It seems too sweet, and what about security and control concerns? Isn't it risky to trust everything you have to a third-party vendor?
Well, these are two different questions: security and control. My opinion about the protection is that if you use a product from a well-known big vendor, that you have less risk compared to what you will get when building everything by yourself.
Amazon, Google, and Microsoft all have security departments- white hat hackers that test their software and hardware daily. Also, they run bug bounty programs and pay independent researchers for vulnerabilities they find in their products. Will you be able to cover all these things as a startup? I don't think so.
The startup nature stimulates security risks. You have to be fast, and when you code quickly there is a higher chance of errors that can be exploited. Also, almost for sure, you won't have the resources to work on security and programmers might not be familiar with OWASP. So the cloud is, on average, more secure.
But according to control, everything is not so straightforward. There can be real problems. One of them is vendor lock-in. Let's outline it by example. AWS has a solution called SQS (Simple Queue Service). It is convenient, but there is a problem: the feature is available only in their cloud.
If you want to move out of them, you will have to rewrite the code of your applications, or it stops working correctly. This is a real problem that you should be aware of.
How can that be avoided?
Be cautious when choosing cloud tech and invest time in comparing different options. Going back to this SQS example, there are a lot of enterprise-grade alternatives like Apache Kafka or RabbitMQ which offer more freedom and do not lock you in their developer's ecosystem.
You should spend some time in the beginning, but after that you will be able to explore the main benefits of the cloud, including speed.
Let's finish by talking about the price. I've heard that very often cloud services turn out to be more expensive than non-cloud. Can you give some advice on how to build a startup's infrastructure without overpaying?
The primary advice here is to use the correct calculation model. You should evaluate savings using a long-term approach. If you take a month or two, cloud infrastructure might be more expensive, but at the distance of a year, owning infrastructure will be way more costly. You will have to spend resources on staff, updates, support, repairs, etc. So, to accurately assess real pricing you need to take all of these aspects into consideration.
Also, as a startup founder, you should understand that finding the best deals is your task. In the cloud, very often, you can get a better deal by using the service in a different region. However, the reduced price may come at the cost of a set of available services or their performance. Here is a price calculator for AWS.
Another way to save is by using a Reserved Instances, which implies renting cloud infrastructure for an extended period (1-3 years). Sure, you should also implement monitoring and sophisticated real-time scaling mechanisms for fighting cloud waste (paying for unused resources) or limiting the number of instances that can be used (to avoid spending a fortune during load spike).