You’re a startup. You’ve got a great idea for an app. You’ve got some friends interested in helping out and you think you can make this work.
So how do you figure out where you’ll host it? How do you decide between a raw infrastructure provider or platform service, and how much work do you do yourself and how much should you rely on service providers?
When building a new application, the fundamental rule is that you should choose any services that allows you the greatest combination of flexibility and resources to meet your application’s needs.
I’m largely talking about whether to use an Infrastructure-as-a-Service (IaaS) or a Platform-as-a-Service (PaaS), and to some extent, how much to rely on Software-as-a-Service (SaaS) providers or write your own application components.
I think of IaaS, PaaS and SaaS as “stacks” that either reduces the level of effort required to build your application at the expense of flexibility and control, or provide more flexibility and control but with more effort.
For example, IaaS providers will give you raw infrastructure like compute and storage resources. This provides the most flexibility but requires the most hands-on management. Developers interact with the operating systems directly, build/use their own frameworks (eg, Django, Rails, etc), and consume server resources directly. If you prefer Nginx over Apache, FastCGI over WSGI (yeah, there’s still some weirdoes out there), have a favorite location for your configuration files (/usr/local FTW!), or simply want to control your software upgrade path, then IaaS is probably what you want.