Some languages and platforms are designed with scalability in mind. Erlang forces you to write code in terms of message passing between shared-nothing processes, which means that when you need to scale to multiple cores / machines your code is already designed to do so. Google AppEngine severely restricts the kind of operations you can perform (no File I/O, a persistence engine that doesn't even support aggregate queries) which means that you are forced to design your application in a way that scales.