I'm pretty impressed with Heroku co-founder Adam Wiggins' perspective into doing good cloud-based apps
Introducing the Twelve Factor Application pattern
Software is commonly delivered as a service - web apps, SaaS.
The twelve-factor app methodology for building SaaS apps:
- Uses declarative formats for setup automation, minimizing time/cost for new devs joining projects
- Has clean contracts with the underlying operating system, offering maximum portability between execution environments;
- Is suitable for deployment on modern cloud platforms, obviating the need for servers and systems administration;
- Minimizes development and production divergence, enabling CICD for maximum agility;
- Can scale up without significant changes to tooling, architecture, or development practices.
The twelve-factor methodology can be applied to apps written in any programming language, and which use any combination of backing services (database, queue, memory cache, etc).
One codebase tracked in revision control, many deploys
Explicitly declare and isolate dependencies
Store config in the environment
Treat backing services as attached resources
Strictly separate build and run stages
Execute the app as one or more stateless processes
Export services via port binding
Scale out via the process model
Maximize robustness with fast startup and graceful shutdown
Keep development, staging, and production as similar as possible
Treat logs as event streams
Run admin/management tasks as one-off processes
The Twelve Factors App idea originated with Adam Wiggins, co-founder of Heroku.