Hello all,
Im looking to start a SAAS/API business but I have limited experience with hosting and building a cloud infrastructure.
I have been looking at AWS and it seems like it would cost a fortune to host a SAAS app and I also have very little experience with devops and all of the AWS services required (dns, load balancers, s3, etc). I was wondering what the most cost effective approach would be starting out and if any other single founders have any experience hosting SAAS or API's in the cloud.
Is it worth it to outsource the cloud infrastructure design and development or are there any companies/startups that specialize in this?. I'm not all against doing it myself I just feel that it would take me much longer and would cost me much more in the long term and I much rather focus my efforts in building the product.
Please let me know your thoughts.
Thanks in advance.
I have heard some people say they like Heroku.
I personally use DigitalOcean. I harden the box by locking down non essential ports. I add fail2ban, key based ssh access. That is about it. I do not worry about scaling at this point, but if you do need multiple machines, you could use Console to help.
You'd be amazed at how far you can get with a $10 VPS. Deploy with something like dokku and you can probably migrate to EC2, or Heroku, or whatever, without much fuss. If you reach the point where you can't scale by upgrading your VPS, you have what is known as a luxury problem.
I have some large projects running in $5 Digital Ocean VPS, serving ~1 million requests/day.
Of course it matters how CPU/memory intensive is your project, but you can go a long way with a small budget.
AWS is awesome for scale. You can go from 1 to 10 to 100 machines without hassle. They have several awesome managed services and with everything there you reduce a lot your latency and bandwidth costs. Do not go there for a small project, it can be a lot more expensive than it looks. Storage, bandwidth adds up fast.
In coding parlance, what you're asking is called "Premature optimization" (feel free to google it).
As others have mentioned, worry about paying customers first. Your first version can run on a VPS and you can switch to a PAAS once your have bunch of customers that love your product. So I'd focus on refining the offering before worrying about scale.
But when it comes times, you do not want to outsource the infrastructure. When your service goes down, who are you going to call? How long before the guy can actually work on it? What if the original coder is not around -- how long before a new guy figures out what the heck the other guy did? In the meantime, your site and app show "500 Service Unavailable"
Go with one of the many PAAS offering and figure it out yourself. AWS has a high learning curve so you'll waste time learning it vs a PAAS. RapGenius ran on Heroku even after they got VC funding.
I gave Heroku another look recently and I definitely think it is a viable option for future projects. In the past I think it would cost something around $60/month to get it running with 2 dynos and custom SSL and whatnot. But I think now have 2 dynos and a custom domain SSL is roughly $7/month. Where they'll probably get you is probably the addons.
But as you mentioned, it lets you focus on building and not the technical details of maintaining servers.
I really like Courtland's advice. Start with a simple mockup and get paying customers first. I'd say for a lot of us, that's the hard part, marketing and making sales then building and the tech side of things.
I'd start with Heroku, Google App Engine, or AWS API Gateway. I'm a heavy AWS user but you do pay an operational cost for going with EC2, it can be more performant and more cost effective, but if done wrong it can be a huge headache and cost more.
Warning about "serverless" stuff like API Gateway though, do a proper cost analysis so you're not running into any surprises. API Gateway / Lambda can be very cost-effective for intermittent use, for example on https://latency.apex.sh/ I pay maybe $3/m since it's not used actively all day, every day. However with moderate traffic (say 15 req/s) it quickly becomes more expensive than EC2.
I agree with everyone else though, test viability first. I think you should engineer with cost in mind, but not to the point of never shipping.
This is what I consider the best answer - Heroku, Google App Engine, and Amazon Elastic BeanStalk are three services that essentially manage all of your scaling/platform related needs. And each of them can host for between $0-10/month for a basic plan.
DigitalOcean is also nice for beginners, it has a great UI and lots of tutorials.
I've used AWS for projects in the past and found it pretty cheap. There's definitely a learning curve, but I'm always glad that I invested the time in the past to learn. Also, you can use Elastic Beanstalk to automatically handle scaling and deploying your servers, load balancing, etc, so you don't have to worry about some of that harder stuff.
A long time ago I used Heroku. I'm not sure if things have changed since then, but it quickly became unaffordable as my product grew, forcing me to switch away (to Linode and eventually AWS).
If at all possible, focus on building and selling your product first! I gave a startup idea to a friend recently, and she's literally just mocking up an HTML page on her local machine and showing it to customers. No point in doing more work than that until you know you can make sales.
In recent years I've tried to establish "infrastructure boilerplate" for side projects to reduce the time required for this part of the process.
My first "boilerplate" was based on Heroku, and it served me very well: fork the boilerplate repo, follow a short checklist to get everything (database, SSL, etc) set up on the Heroku side, and off I go. (The checklist could have been replaced with a script, but it was not painful enough for me to bother.)
My new "boilerplate" is based on the Serverless framework (it's a dumb name IMO). The framework is still a bit rough around the edges, and it does still require a bit of learning about AWS products to use it effectively (for example, you'll want to set up some sort of data store, so would need to figure out RDS configuration or build around DynamoDB, which can be cheap to operate at scale but comes with a learning curve) but has a ton of benefits if you need them: Lambda scales really well, and the AWS ecosystem comes in handy if you need queues, search clusters, etc.
I still use the Heroku boilerplate when I can get away with it, since it's conceptually simpler, but the Serverless boilerplate is great for projects where I anticipate heavier scale or more complicated use of AWS infrastructure down the road.
EDIT: Some others have mentioned Google App Engine, which is another very strong contender for a batteries-included approach. Heroku is better for projects that may one day need to move (less reliance on proprietary APIs/services) and I use AWS with Serverless since I have a personal preference for AWS over Google Cloud (knowledge about AWS is more portable, IMO), but if your only criteria is "build something and ship it" then GAE probably takes the cake.
Your constraints are what will determine the solution you'll end up with.
Based on what you said, you could be well served by a PaaS like Heroku, which performs basic sysadmin'ing as part of their service and where conventions for writing and deploying applications are already established: you "just" need to conform to the PaaS way os writing apps, which hopefully works for you.
You may want to have a look at my book https://www.hostingforappdevelopers.com/ for more on this subject.
By accident or fate, DjaoDjin ended up specializing in building and hosting SaaS for not-too-well-known but huge industries (LIHTC, Professional certifications, Mailbox retailers, ...). We started as a contracting service before moving into SaaS hosting. From our experience:
The only performance that matters is ARR/server. We have SaaS businesses in the $50K/year to $500K/year that easily run on a single server each. - Just make sure backups are airtight :)
Fighting with scrapper, hacker and all kinds of bots is a daily battle. Every uptick in Google ranking leads to a whole new flurry of unwanted traffic. We average about 40% of bad bots on a normal day.
On a "boutique" SaaS, 80% of the code base ends up being authentication (login, registration, password reset, etc.), billing (update credit card, download statements, etc.) and role-based access control (manager, support team, etc.). It is not uncommon with a team of 3 engineers to end up having 2 of them dealing with the payment system full-time while the 3rd one is trying like mad to code value-add features to the actual business logic being sold.
I code for a living and, like any good developer, I like free stuff but I would gladly pay AWS double to get anything done without going through pages of docs and dealing with dozen of quirks in the platform.
Hey!
I have never actually had a start-up, but I have worked with setting up web services, setting up SSH, FTP, VPN, creating scripts for automation and running them with cron, building REST APIs, securing servers with industry best-practice, etc. I don't really know of any businesses doing this right now...I'm sure some consulting companies do this stuff, but I bet they'll cost a fortune (I do consulting for my business and WE cost a fortune lol).
If you want some help, I'd be glad to do most/all of the heavy lifting for you and educate you on the process along the way :)
AWS absolutely shouldn't cost a fortune. When you first start, your needs should fit within the free tier or at most cost <$25/m.
As others have said, Heroku and other PaaS offerings will make it even easier to get started—though they will potentially cost a fortune in the future, and also have some large fixed costs for certain things (like SSL).
I wouldn't recommend you follow the advice of a simple VPS. While that option is cheap and simple, it's not going to scale (at all) and is fairly unreliable (if there's a problem, your whole site will go down).
Since you asked, my startup (http://www.getgandalf.com) specializes this and I'd be happy to answer any questions you have for free. Just email morgante.pell@getgandalf.com. Obviously I'm biased but I think most people should focus on their product and let others handle infrastructure.