Here are some guidelines to keep in mind when designing an application for the cloud:
Be a pessimist: Assume everything fails and design backwards. Love your chaos monkey.
Put your eggs in multiple baskets: Leverage multiple providers, geographic regions and availability zones to accommodate for local availability issues. Design for portability.
Think efficiency: Inefficient designs will not scale. Efficient designs become cheaper as they scale. Kill off unneeded components or capacity.
Be paranoid: Design for defense in depth and zero tolerance by building in security at every level and between every component. Trust no one.
But not too paranoid: Not every application needs the platinum solution. Architect for different SLA’s, service tiers and security levels.
Manage the data: Data is usually the most inflexible and complex area of a cloud and cloud integration architecture. Don’t short change the effort in analyzing and addressing data needs.
Hands off: Leverage automation to increase consistency and quality and reduce response times.
Divide and conquer: Pursue partitioning and parallel layering wherever possible. Make components as small and portable as possible. Use load balancing between layers.
Think elasticity: Increasing resources should result in a proportional increase in performance and scalability. Decreasing resources should have the opposite effect.