My answer to Arik's question is - we do what it takes. My answer to DC vs Cloud - it depends.
Personally I try to shy away from Big Universal Truths. Startups are given money by investors to generate a sizable return, not to prove a point.
Sometimes it makes sense to develop externally. Sometimes it doesn't. Personally I lean toward developing as much as possible in-house, but it's not a Big Universal Truth - I re-examine this with each and every project.
Sometimes it makes more sense to host on the cloud and sometimes hosting your own DC is the best answer.
Instead of taking a position one way or another, I think it is more useful to explore these "sometimes" -
Based on our accumulated experience, when does it make sense to develop internally or to develop externally?
My short answer - if it's core, or if it requires agile iterative development - in house, otherwise, outsource makes sense. If choosing outsource, it needs to be a well defined, relatively short task - if not, make sure you have the extra managerial resources to manage it long term. My test for core or not - if the code gets deleted and the folks who wrote it disappear from the face of earth - can I recover in a few weeks?
What's your answer?
Based on our accumulated experience, when does it make sense to host on the cloud and when does it make sense to manage your own DC? Or, going into a more granular level, which parts of your architecture does it make sense to have on the cloud and in which part of your company lifecycle does this make sense? Also, which cloud service do you choose and why?
There are so many possible combinations, each one with its own pros and cons.
My own short answer - in most cases I'd start on the cloud, but only if I am sure my app is architected in a way that will allow me to migrate to a DC if I need to. If I choose AppEngine it'll probably be harder to migrate away, if I AWS it'll probably be easier.
Data is actually more complex IMO - putting my data on the cloud usually makes tons of sense, but if I will end up having to move around huge chunks of data either for processing or even as a one time migration off the cloud, it might not make sense.
When traffic goes up (yay), before deciding to migrate off the cloud, I'd look at a few other solutions first - Varnish-like services can reduce the load on your app server considerably and improve response time. Using a CDN can do wonders to your performance AND availability, even for non-static data. If your architecture is solid, there is a lot you can do in a DC to keep it efficient, OR in a cloud to keep it cheap.
While, like most engineering-related tasks, building and running an efficient DC might be a fascinating intellectual challenge, usually in the wider context of the company and the project this is simply not interesting - the hosting platform, be it DC or cloud, just needs to work and not get in the way - operationally and financially.
Disclosure: Eran and myself work for the same company and in the same team. The architecture we built was able to cope with 10x and 100x spikes in traffic. We're running in our own DC with 4-6 web servers and a single fairly standard DB machine - though we're getting lots of help from friends like memcached, varnish and Akamai. "Our own DC" made sense to us back in 2005 when we start building this - if we were to do it again today, we most likely would have chosen AWS.
--
Yaniv Golan