Should Startups Use Kubernetes?
#Does Kubernetes fit to startups?
#Agility vs. Scalability
“Startups and Kubernetes is not a fit” – that is at least what many people will say. And they have good reasons for saying such things. One main characteristic and also a benefit of startups is that they are agile and flexible making it possible to iterate fast and to try many different things at an unrivaled pace. Kubernetes, however, is a very complex technology and it necessarily takes a while to understand and master it. For this, adopting Kubernetes at a very early stage of a startup will almost always slow down the development speed of your startup, which is clearly not what is desired.
However, most startups aspire to and often have to scale fast, especially if they raised venture capital. To scale fast, it is obviously necessary to be scalable and this means, among many other things, to have the technological setup that is able to handle a large number of users. Kubernetes, originally developed by Google as successor of its internal Borg system, is a technology that allows exactly this. With Kubernetes, it is possible to scale relatively easily and to provide your software at global scale. For such tasks, Kubernetes has become the standard technology that all major cloud providers already fully support.
For this, I believe that it is wrong to say that startups should never even look at Kubernetes. It is at least worth considering, so let’s take a closer look at potential benefits of Kubernetes for tech startups.
#Benefits of Kubernetes for Startups
Kubernetes is a future-proof solution. Besides the benefit of scalability, that is necessary if a young startup reaches a bigger scale, Kubernetes is generally a reliable solution that will be around for years. All major cloud providers and even some niche providers offer managed Kubernetes solutions, its adoption by large companies is continuously increasing and the Kubernetes community is growing, too. With this trend towards mainstream, also the k8s ecosystem is expanding, so you can expect to get more and more additional service offerings for special use cases (AI, Big Data, Edge Computing,…). Therefore, you can be pretty sure that once you have adopted Kubernetes you can continue to use it for a very long time and it will cover all your scalability needs pretty well. That also means that you do not have to rebuild your system all over again after you discovered that you reach some kind of technical limitation.
Kubernetes is a popular technology. The Stackoverflow Developer Survey 2019 discovered that Kubernetes is the 3rd most loved and 4th most wanted technology by developers. This trend can also be a benefit for a startup as Kubernetes is attractive for engineers and other talent. Working with interesting and popular technologies thus makes finding new employees easier and increases retention and motivation of your current engineers. (Admittedly, this benefit should not be the reason for such a significant technology choice, but it still is a fact that matters in reality.)
Kubernetes can improve product quality and stability. Once you know how Kubernetes works and found a good setup for your product, you are working with a mature technology that is used by many huge companies in production. Its self-healing and autoscaling capabilities can ensure a high reliability as well as very good uptimes and response times of your software even with a varying number of user requests, which will improve the experience your users have.
Kubernetes can speed up your development. After an initial slowdown, your development speed may be increased when everybody in your team is properly onboarded and new workflows are implemented. Especially, using microservices instead of a huge monolithic architecture may help you to develop new features more flexibly and in a modular way. It also helps to integrate new employees in a team as they can start by working on just a fragment of the software. For microservice architectures, Kubernetes is the technology of choice making it pretty straightforward to manage different services in different containers. As an example for this effect of improved development productivity, take a look at the Box case study that describes how Kubernetes enabled them to add new microservices in 5 days instead of 6 months.
For a general analysis of the advantages and disadvantages of Kubernetes, also take a look at my other post.
Overall, with the clear trend towards Kubernetes by many significant players in the software world, a startup should expect to adopt Kubernetes at some point at the latest when it reaches a massive scale. For this, it is more a question of when than if to use Kubernetes.
#Adopting Kubernetes is an investment
You can see the adoption of Kubernetes as an investment: You will face some upfront cost associated with its adoption, e.g. training your engineers, necessary changes of the existing software and thus reduced short-term productivity. However, over time, you will earn “interest” for this investment such as more stability for your system, shorter release cycles or lower computing resource cost.
As with every investment, you now need to analyze if it is worth investing and if yes, when to invest. Assuming that at some time you need to invest in the Kubernetes adoption to be able to scale further, you should keep in mind for your evaluation that the cost for the adoption increases over time. This is because your company gets bigger and bigger, you have more engineers that need to be trained, a more elaborate software that needs to be adapted and more users that need to be migrated to a new system. Tinder, as an example, moved to Kubernetes when it already reached significant scale and it then took them 2 years to finish the whole migration. If you are still working on pretty much a green field, it will be much faster and easier.
Still, an increasing price for the investment does not necessarily mean that you should invest immediately. You rather have to compare the price to your opportunity cost, i.e. the cost associated by investing your time and money in adopting Kubernetes instead of on focusing on other parts of your business. It can thus be very hard to exactly determine when to take this step but I will try to give you a recommendation for what you should consider and what is the best timing from my point of view.
#Kubernetes adoption recommendation
#When to move to Kubernetes
For most startups, time is a very scarce resource. You may have a short runway and need to reach some milestones to get the next funding or fear that competition may catch up with you. As described, adopting Kubernetes will cost some time that you will hopefully get back later by improved productivity. For this reason, I believe you should not adopt Kubernetes when time is most critical and this is typically in the very early stages of a startup.
If you are still looking for product-market-fit or even the right idea, you should focus on product validation and build MVPs as fast and simple as possible to get feedback and maybe some initial traction. Some people even recommend to not even build anything at this point and just get user feedback for ideas, e.g. by asking potential customers or having a website with a waiting list for interested users. In any case, this stage of the startup life is usually too early to look at Kubernetes as it will probably distract you and its benefits of scalability and stability are not relevant yet.
Once you found product-market-fit, the next step for startups is to scale. At this point, Kubernetes becomes interesting and relevant even if it is possible to master the initial scaling phase with other technologies. Especially for technology-focused startups, I believe this is a good time to start with Kubernetes as the transition is still manageable and you do not have a too complicated system yet.
Here, you will face the challenge to actually make the investment to rebuild parts of your system as it is very easy to find reasons to postpone it until after the next round of financing, the next feature release or any other artificial milestone. However, delaying this step further and further makes it only harder to make and you will build an ever-increasing legacy system that becomes more and more difficult to migrate later on.
#How to move to Kubernetes
I won’t go into much technical detail how to adopt Kubernetes here, but there are some general recommendations that will help you to do it with the right approach.
Go the “simple way”. Kubernetes provides an abundance of features and configurations. You will most likely not need many of them and for this, you should simply “ignore” them. While it might be nice to have everything configured and set up in a way that your system could handle millions of requests, you should not care about it too much when you are still at a few thousands. With that said, you should avoid complicating things and try not to get lost in technical details.
Use open source solutions. The Kubernetes community is one of the most vibrant open source communities out there and there are already so many great open source solutions for many use cases. For this, try to build on these solutions as much as you can as they will save you a lot of work and often establish best practices. As a good starting point, take a look at the CNCF landscape
- Use the right tools. Besides the open source tools, there now also is an abundance of commercial tools that help you in working with Kubernetes. While founders are sometimes hesitant to spend money on dev tools, I am convinced that such an investment pays off with a higher developer productivity. As a simplified example, imagine you pay your engineer $5,000 a month. If a tool improves the developer’s productivity by only 2%, you should already be willing to pay up to $100 for that tool every month for every developer(!).
My company also provides a commercial tool called loft, that allows developers to create namespaces in a shared Kubernetes cluster on-demand, e.g. for machine learning/AI experiments, for testing with CI/CD and GitOps or to directly develop inside a Kubernetes cluster.
- Use a public cloud. All major cloud providers offer specific managed Kubernetes services and they will usually fulfill all your needs. It thus often makes sense to just use such a managed service reducing your effort to manage Kubernetes yourself. Later on, you might still move to another infrastructure, if you want to.
Overall, you should never adopt Kubernetes because it is “cool” and everybody does it. You should rather find the right point in time and have a clear strategy why and how you want to adopt it. When you go for it, use simple solutions with open source software, existing tools and public clouds at the beginning to avoid as many mistakes as possible.
If you have a tech startup and aspire to scale it massively, you should expect to encounter Kubernetes at some point. Especially for scaling purposes, it is a very solid, future-proof solution and thus might be the last infrastructure technology you will ever need. Since it becomes more and more effort to adopt Kubernetes if your system grows, it often makes sense to invest some time into it relatively soon after you found product-market-fit. At the beginning, you should try to keep it as simple as possible and use pre-made solutions such as open source software and public clouds whenever possible.