Reasoning: SaaS is extremely tempting. If programming is only a hobby for you I recommend it wholeheartedly. But if you're serious about your app or business, learning or hiring someone for sysops/devops is really the way to go. It's cheaper, you aren't dependent on anyone, reducing your points of failure, and you learn extremely valuable skills related to server setup and maintenance.
In my (soon to be open-sourced) deployment solution that's built on Fabric and Chef, all I need is a configuration yaml file to describe my servers. I provide IP addresses, what role(s) each one serves (app, db, static, queue, etc), what kind of software for its service I want to use (db servers should all use postgres, for example), what OS to expect on each one, and what stage of deployment that server happens to be for this project (development, staging, production). Everything is completely shared-none and non-destructive, so if I happened to have 3 VPSs, each hosting some combination of several sites' app, db, and static resources, across a different OS on each, I don't do any additional work. All I type is "make deploy" after quickly writing some lines in that config file and I can sit back and relax. Servers get setup from scratch if they're new, secured, and have services like logging all ready to go.
In essence, I get the dead simple deploy of a SaaS, with the flexibility of using whatever hosting provider I feel like, using the exact stack and details I want, for the cheapest price I can find. If my Ubuntu-running Amazon data centers flooded tomorrow, I could be deploying on brand-new RHEL Linode servers with 30 seconds of yaml changes. That kind of peace of mind can't really be bought from a SaaS provider.
And yes, it'll be up on my GitHub account when it's finished, and will (hopefully) hit the frontpage of HN when it's announced.
Do you need testers?
Personally, we're using Puppet for server admin and some cobbled together shell scripts, for app deployment. The latter is heavily inspired by Capistrano. We have a few shell scripts for generating new manifests in Puppet. All together a not-fully-automated, but quite close solution.
If my app never takes off, then I don't need to do this work.
I find that it's always a good idea to know what you'd do a few steps down the scalability line (100 users, 10,000 users, 100,000 users) but not necessarily build for the biggest case. When bootstrapping, you can't afford the server costs for the big cases anyway.
Sure there might be an in-between period where we are doing a large amount of traffic on Heroku + paying too much for it, but by then we will be able to afford to hire someone who can set us up properly + at the right price. Either way, I avoid wasting time configuring servers!
The Heroku Add-ons marketplace is also a huge competitive advantage that they provide over other services. There are plenty of examples where we've relied on third-party addons to begin with (for e.g. Embedly) but once the costs of using such third-party services increased (due to increased traffic), we switched over to our own hand-made solutions and we were able to bring down costs substantially.
It may be that my product never needs enough resources to push me over the edge for moving to my own servers.
I've shipped products before where we pre-built a large cluster of servers (20+) and then used less than half that capacity, and that sucks cash really fast.
Tons of freeloaders (like me) using their resources for our off-the-cuff apps, plus some people using it to bootstrap. As the usage climbs, and theoretically your revenues are also climbing, you get to a point where it makes sense to move away to your own setup.
How can Heroku make money if all customers eventually plan to leave?
These days I'm attempting to move things off of my VPSes where there are good, stable options which don't require huge engineering efforts to use. SendGrid for email was an early, obvious choice. I'll be migrating many of my blogs to WPEngine fairly soon. (I'll write up my rationale for that at length after it happens. They're a client, so take my arguments with a grain of salt, but it became painfully obvious when working with them that it was the right call.)
If I got a do-over on my two main software products I would probably re-write them to use Heroku over self-hosting them on my VPS. It would have avoided ~6 minor service disruptions and ~2 catastrophes in the last year, plus saved me about two weeks of lost billable time. (Mostly lost due to having a very involved migration from Slicehost to Rackspace which went fairly poorly, principally due to failing to invest another few weeks preparing thoroughly for it.)
I can't justify a rewrite of BCC or AR at the moment to migrate to Heroku, though, as they're both multiple weeks of work with high probability of breaking something, and my anticipated costs due to I'm Not Always A Sysadmin But When I Am I Only Fail On The Hard Stuff this year don't quite justify it. (Please, please, nobody buy Rackspace to shut it down. One migration was enough.)
I've got 6 VPSes and 12 dedicated boxes and have never had an outage that long (self-inflicted or otherwise) in roughly 6 years. Granted, most of my dedicated boxes are managed by Rackspace and cost > $1k/month.
All that to say, I agree with your sentiments for the most part ... I just haven't seen the "prevention" of catastrophic events per say.
Also, what do BCC and AR refer to?
The same would cost me tens of thousands on Amazon or other 'cloud' services.
They advertise a 6TB transfer limit, but I've been with them for almost 2 years now and they don't seem to enforce it.
I'd totally recommend them to anybody.
Also, if you're looking to save cash, an Atom CPU is surprisingly capable. At any given point in time both of my servers would have about 700 active HTTP connections each.
I guess this question is too open... the answer will always be, depends on what you are building..., and you amount of experience on the field... In my case several 8gb rackspace servers with a cost of 10 dollars a day seems to work well for collecting and crunching gigabytes of data.
Heroku covers this very well.
Heroku looks cool, but I am used to compile things...
Would I do it again given the abundance of VPS options today? Possibly. There are only two reasons not to run my own hardware: 1 - dangers of hardware failure on my single server and scrambling to build a new one as opposed to spinning up a new VPS. 2 - scaling. But after 6 years, neither of these have been a problem. In fact, I bet if the hardware failure does occur, I can have m5hosting provide me with a replacement server in a few hours and I could have it config'd and back up in around a day.
I certainly pay less by running my own, with hardware cost amortized over such a long period. I feel the admin hassles are about the same as running a single VPS and less than running multiple VPSs. I set it up, have good docs on the config, automated cloud backups (tarsnap) and would have no problem reinstalling from scratch.
Oh, and of course, I don't run my own mail sever. I'm not a masochist ;).
My team and I run on App Engine for our startup's product, but I run all of my own stuff (email, websites/blogs, legacy projects) with Mike. It's a trust thing.
Rackspace Mail for mail.
Why not run your own mail server? Outbound deliverability is a pain. You can't just install an SMTP server package and go -- you need to think about DomainKeys, SPF, DKIM, Sender-ID, monitoring realtime blacklists for your IP, etc. That's a whole job unto itself and is worth paying a couple bucks for someone else to do it.
So, when it comes time to host a side project, App Engine is my go to platform these days. There are a few times when I prefer going with EC2, but I like how easy it is to get a project started on app engine, especially when I'm confident that the application will scale should I need it to.
Unfortunately that balance problem has existed for years and we seem no closer to a solution that works for everyone.
1) We need to comply with Canadian privacy laws, so need Canadian VPS - and those are way more expensive than in US.
2) To be PCI compliant, you need access to server logs. You can get that with Rackspace but pay a premium.
3) I've managed an in-house data centre before on my own, so I know what I'm doing for the most part.
If you factor all of the above, it's actually cheaper to manage your own servers, even if you outsource the sysadmin stuff to a competent contractor at about $100/h. The catch is there is an overhead initially to provide redundancy that diminishes only when you can utilize that extra capacity.
That might not be an issue: http://www.ic.gc.ca/eic/site/ecic-ceac.nsf/eng/gv00508.html
> 2) To be PCI compliant
AWS is PCI compliant: http://aws.amazon.com/security/pci-dss-level-1-compliance-fa... and Rackspace might not be charging extra anymore.
Additionally, at least in Canada, privacy-cautious organizations don't look too favorably on services that store data in US, in part due to the patriot act. We even have US clients who liked the fact their data would be stored in Canada ;O)
All application mail is also sent over that server (a Ubuntu VM hosted on physical hardware we own). All installations of our product are hosted on VMs on more physical machines we own.
Hence I voted the top option, even though we are also using Google for convenience.
I use 3rd party services for sending mails, though. The amount of boring work to get out of my recipients' spam folder is just too high without that.
If you're using Rails, check out Moonshine (a great Rails-oriented wrapper around Puppet): https://github.com/railsmachine/moonshine/
The combination is great. But if it wasn't for the Linode community and great support I would consider switching to an EC2 instance - I imagine an EC2 would be quicker to communicate with S3 than my Linode, though I haven't looked at Amazon's datacenter location options.
If the service gets bigger I am planning on leaving the LaTeX compiling on the ec2 and moving everything else into Heroku, but thats a big if.
One thing I would say to other small timers like me who can't use a PaaS for some reason, automate your deploys as much as possible, capistrano is a good start https://github.com/capistrano/capistrano/wiki . Also look through the list of Heroku addons for other services to make life easier, I use MongoLab and Loggly for starters.
For some projects (eg: https://www.wisecashhq.com) I go DotCloud or Heroku, because I'm willing to pay in favor of focusing on features.
For some other projects (eg: http://www.hackerbooks.com) I use a VPS and Chef, because it's a low recurring cost and it's a smaller deal if the server is offline for a while.
Even if I go app hosting but the project works well, I take care to think about what it would need to redeploy it on a VPS instead (eg: create a staging server with Chef and a VPS).
One thing I will not host in all cases is email, because I feel it's really easy to do it wrong.
Did the custom mail server with Postfix on Gentoo for a few years. Had the experience. Loved it. Came to realize I should be doing things with tools instead of managing tools, hence current config.
Using a VM/VPS type system basically eliminates any security you might have, there are currently too many ways to have your data stolen/intercepted/manipulated/disconnected for it to be safe. Using a "hosting environment" aka PAAS is actually one of the best ways to maintain availability, however your security is even more compromised.
If I were to pick a VPS/etc environment I'd go for Rackspace because they've got a better backstory than Amazon does, and they seem to be a bit more interested in protecting their customers.
I did a php app for a client on Media Temple's (gs) and it was unbearably slow. The php execution time would vary drastically (.1 seconds to over a minute) even on a simple debugging page. After a lot of back and forth with customer service and never being able to pinpoint the issue, I switch to Linode.
Screenshot of a page taking 1.4 minutes to render: http://i.imgur.com/e310W.png
Same page on Linode: http://i.imgur.com/OTN9l.png
I'll also add that I keep a MediaTemple gs account in addition to my VPSes for various static sites. You can actually use it to host your DNS and email then have your site resolve to the ip of another server. Obviously that's a really expensive option for basic email but if you've got the account for some other reason like me then you've got 100 domains you can add for free so it's an option in rare cases. Anyway, I'm in the middle of building a PHP app for a client on their MediaTemple gs account and I'll testify to the fact that performance varies wildly. I haven't seem anything take over a minute to execute but I've seen it go from .1 to as high as 50-something seconds. I've found you can fix most of the long queries by writing more efficient code. You'll still get some wild variations but not as often.
In my experiences over 6-7 mo, MT had these speed issues roughly 50% of the time.
Either way, should work out significantly cheaper than fully-managed hosting, with more flexibility for you while allowing you to spend your time on your business rather than managing your servers.
However, our core platform is actually supposed to be able to run anywhere, so once it's finished, we may very well run it on a cloud setup.
More than that, though, we plan to open source it and make it distributable. Do you think we should put something on Kickstarter? If so, any advice on how to get as much buzz as Diaspora* did?
Most every startup will start in the cloud and some will move to dedicated machines later when it makes economic sense and if the team deems the additional headaches worth it.
And yet the poll does not bear that out. The real cost of starting in "the cloud" is often very high -- 3x the cost of a VPS or more -- and you can handle an awful lot of traffic on a 512MB VPS.
* also looking at fastmail too.
Google Apps has the advantage that it comes with docs and gmail - not just a standard email :O)
I am migrating away from them however, because I've decided to consolidate all my hosting with a single provider (Linode). I can wholeheartedly recommend them though.
I'm in the process of transitioning some of my stuff to S3 for durability, and will likely eventually transition to VPS-based hosting over the next year or two.
I don't use dedicated servers. Too much work for too little reward.
My choices for the german readers here:
https://www.jiffybox.de/ - cheap scalable(!) VPS, nice UI, easy cloning of existing "boxes", backups, etc.
https://www.hetzner.de/ - cheap dedicated, low-end VPS, etc.
They're the exact same thing except one is running inside virtualization software and the other is running on a real CPU.
You get a few IP addresses (I've got a /29 on both of my servers) and a fresh install of whatever distro you choose with sshd running. It's just like purchasing a VPS.
looks promising as well.