Building dynamic and scalable applications

Building dynamic and scalable applications

Modern software is commonly delivered as a service. These include web apps, or SaaS. The Therefore it is important to build apps that:

  • Use declarative formats for setup automation. This minimizes time and cost for new developers joining the project.

  • Have a clean contract with the underlying operating system thus offering maximum portability between execution environments.

  • Are suitable for deployment on modern cloud platforms.

  • Minimize divergence between development and production, enabling continuous deployment for maximum agility.

  • Can scale up without significant changes to tooling, architecture, or development practices.

Factors to consider in developing scalable and dynamic apps

  • Codebase: One codebase tracked in revision control, many deploys
  • Dependencies: Explicitly declare and isolate dependencies
  • Config: Store config in the environment
  • Backing services: Treat backing services as attached resources
  • Build and run: Strictly separate build and run stages
  • Processes: Execute the app as one or more stateless processes
  • Port binding: Export services via port binding
  • Concurrency: Scale out via the process model
  • Disposability: Maximize robustness with fast startup and graceful shutdown
  • Dev/prod parity: Keep development, staging, and production as similar as possible
  • Logs: Treat logs as event streams
  • Admin processes: Run admin tasks as one-off processes