1. What's your use-case?
2. Evaluate the resources within your organization
First of all, the final decision whether you start to use clouds within your infrastructure will depend on the size of your company. Small- and medium sized enterprises (= SMEs) mostly won't have the resources & the internal knowledge to host everything on their own in a secure and stable manner. On the other hand more mature or even large-scale corporations might have enough resources to host everything themselves. Nevertheless, even such large corporations can and do benefit in a lot of cases by outsourcing at least parts of their infrastructure to the cloud.
Furthermore, there is always the possibility to go for a hybrid approach. Thus, hosting e.g. your databases on your own servers and frontends and some backend services on the cloud.
Additionally, you could outsource the work to build your infrastructure to agencies (like us), but in general we would not recommend it as your infrastructure is one of the most critical parts within your organization and you shouldn't depend on external companies for that. Nevertheless, it's always a good decision to have some support from outside and as we consider ourselves as long-term partner, we would be happy to be a part of your amazing journey. So, hit us a message if you have any questions.
2.1. What does hurt your company the most?
Another, maybe even one of the most important points here, is what worst-case scenarios could affect your enterprise most of all. Is it a data leak, security issue, server overload / failure, copyright violations (source-code leaked, ..) or doesn't it matter too much because it's rather an application used within your organization? Assuming that you are not a large-scale corporation working in crucial sectors, we would generalize that using the cloud might be a good starting point as cloud-providers like Amazon-Web-Services [AWS], Azure or Google Cloud provide a sophisticated and often highly specialized infrastructure to satisfy your needs. So, let's elaborate on that a little bit further.
If security is a concern then using the cloud might be probably in most cases one of the best ways to ensure that your applications are hosted in a quite secure manner. Nevertheless, you might still consider hosting everything on your own, when your organization has extraordinary high security requirements in case you have a highly-specialized team within your organization. In most other cases you will be served best by using common cloud solutions.
2.1.2. Data leaks
In most countries (esp. Western countries, e.g. within the EU or US) data leaks might result in significant ramifications for your company. And it's true in general that cloud providers are subject to more cyber-attacks than your self-hosted application might be, but that's simply because the accumulated traffic on cloud-hosted applications is greater than the traffic on your self-hosted servers which makes it more attractive for hackers to target clouds or large corporations specifically. Despite that, a cloud-hosted application is still less-likely to be hacked than a self-hosted application as they simply have more expertise & resources in most cases. I just want to point out here that the security of your infrastructure mostly depends on how your software has been implemented by your engineers. Thus, the importance of quality management within your company shouldn't be underestimated.
The same arguments can be applied when it comes to availability. Professional cloud providers devote themselves by offering highly available servers. Most of them provide so-called SLAs (= Software Level Agreements) which ensure you that by paying for a specific service that your application will be up e.g. 99,99 % of the time during the year (an example from Google Cloud). An SLA of 99 % might sound quite attractive in first place, but after calculating the 1 % of the year (where the application could be down according to the SLA) you might recognize that this would mean that your app could be unavailable for full 3 days per year! I've found a cool unavailability calculator for that.
Let's get back to the actual topic. Availability is one of the most important aspects for modern applications and is also one of the most challenging. Even YouTube, Netflix, Uber & Co. have sometimes difficulties with that. So, how can you dare to say that you can ensure your infrastructure to be highly available? As said previously, as long as you don't have a highly specialized team for that within your enterprise you will have a hard time hosting applications on your own. Nevertheless, if your app doesn't need to be highly available then that might not be an issue.
2.1.4. Specialized Hardware
Another point might be the requirement for specialized hardware (e.g. when using certain databases etc.). As most companies won't have the resources to go for the optimal in-house solution here, you will probably end up with a sub-optimal hardware. Huge cloud providers often have a solution which fits your use-case quite well, so why should you spend thousands of euros/dollars on a high-maintenance hardware?
2.2. Focus on your main product
Implementing applications already consumes a lot of resources, building a sophisticated infrastructure (esp. when it comes to e.g. Kubernetes & Co.) can consume even more. So, you might be better off using clouds again as long as you don't have an use-case which requires you to host parts or everything on your own. Moreover, by saving resources here you can focus on your actual products as you get paid for them and not your amazing self-hosted infrastructure.
3. German Podcast
If you understand German, then our concise podcast about this topic might be of interest. We've embedded the player below. Big thanks to Simon Nopp (Inndisus) for this interesting discussion!