I've been devops for my entire work life, for the last 3 years I have worked with various products that needed hosting. I've seen many examples how self-hosting can go bad.
A typical scenario - you have an idea for a product which needs hosting. You order cheap VPS or dedicated server with poor support, setup everything by hand from scratch, start continuous deployments of your application and you forget about it. Yet, there are still many things which must or at least should be taken into account:
How often do you check for security updates? I won't count every CVE (Common Vulnerability and Exposures) you might encounter, because vulnerability statistics and severity data might be unreliable (you can read why, watch the presentation and slides). But you can't deny the presence of vulnerabilities, someone has to take care of this, read every day reports. Check if your server is affected, evaluate how important it is for your product and take proper action to protect your infrastructure.
Is your <service name> still supported? Updates are pretty often: minor changes and fixes, security updates, major updates. This can be automated up to some level. However sometimes you will encounter end of line of your major services like database engines. It happened a few times within the recent past, PostgreSQL (8.x to 9.x) and MySQL (5.1 to 5.5) are good examples. Updates may be complicated, often require some preparations and lead to a downtime.
Is your distribution still supported? Your (not-so) LTS Ubuntu or Debian reaches end of line, you have to upgrade 4-5 year old OS to the latest version. It's very rare to see such upgrade going without any minor issues. In most cases you have some custom packages (needed for some reason, but absent in your distro) built by hand on top of and old Linux distribution, which will get you into even more troubles.
How do you know that your server is working fine? You need to monitor at least 10 things and probably much more. It's crucial to have thorough performance statistics, because it's easier to look for bottlenecks in the future. Besides fancy graphs you have to know how to interpret all of this and when to setup notifications.
Do you know how to scale? Your application grows rapidly, you are working hard to improve the code itself. What about your server architecture? Do you need more servers? - easy, just a few clicks away. Reliable configuration with load balancers, various cache services, maybe database replicas and probably easy management - this could be harder and require some experience and time. Be prepared.
What happens when the server goes down? How do you handle unexpected downtimes? It may not be a big problem in the middle of the day when you are around, but what about nights or public holidays? It's possible to have service which will call you when necessary, do you want to be bothered every time it happens? Especially in the middle of the night? Each downtime may be expensive. It's not just about money, but you may loose trustworthiness as well.
How do you deal with your infrastructure troubleshooting? Troubleshooting common issues is relatively easy for experienced crew. Things get complicated for everything else. How error-prone your solution is and how much time and money do you spend to overcome all disruptions? To minimize the risk think about it before a serious outage occurs. This may save you a lot of stress, money and dissatisfied customers.
How do you test your infrastructure? You probably use TDD methodology for your application code, what about your infrastructure? For some time thanks to tools like Chef and Puppet, it's possible for servers too (berkshelf way, parts #1, #2 and #3), without TDD making any major changes is like running through a mining field.
You can disagree, you can call it 'bias', just remember it's my opinion. Any constructive comments are kindly welcome.
Do you want to learn the hard way how difficult and time consuming self-hosting could be? No? Try Shelly Cloud, we'll give you €20 credit for start and we guarantee painless deployments. We're also very open for suggestion how to improve our platform and adapt to our clients needs.