Choosing the compute model
The first decision is how code runs. Serverless functions on Lambda, Azure Functions or Cloud Functions suit event-driven workloads and spiky traffic with little operational effort. Containers on ECS, Cloud Run or Kubernetes suit long-running services and portability. Virtual machines remain right for specialized software, and managed platforms like App Service speed up standard web applications. Whatever the choice, we keep business logic separate from provider-specific wiring, so moving a component later is a contained change.
We choose per workload, not per company. A product may combine a container-based API, a serverless image processing pipeline and a managed database, and the architecture decision records explain why, so later engineers understand the trade-offs: cold starts, execution limits, vendor coupling, local development effort and cost at your expected volume. Cost at your expected volume is estimated early, because a serverless design that is cheap at a thousand requests may be expensive at a hundred million.