While almost any server based application can be deployed to a cloud environment, provided its bandwidth and processing requirements are met, applications designed to embrace the environment's advantages and avoid its limitations yield far better performance and reliability at lower tiers of complexity and cost. Understanding the ramifications of data storage options and the tradeoffs of relying on managed cloud services versus managing your own infrastructure are key to designing reliable and cost effective cloud applications. We guide application architecture decisions based on an application's performance, reliability, portability and cost requirements and considerations for the applications anticipated scope and lifetime.
High level application platforms such as Azure App Service, Heroku and Google App Engine provide simplified development demands and little to no infrastructure maintenance burden at a cost of platform dependence. Applications with limited scopes or development budgets or rapid time-to-market requirements can be a good match for the kinds of infrastructure automation and services these platforms provide. A downside to this approach is that such an app will have specific dependencies to its host platform and any migration to other application platforms or different tiers of cloud services will incur redevelopment costs.
Generally we recommend adopting managed services that eliminate maintenance requirements and enable an economical scale of performance without encouraging vendor lock-in. For applications that do require lower level infrastructure, we apply architectures that allow any individual units of infrastructure to fail without consequence to the application's performance or data integrity. Embracing the inherent ephemerality of cloud infrastructure yields reliability and greatly simplifies scalability.