At small scale the three major providers are close enough in capability that the deciding factors are rarely technical. The differences that matter are pricing shape, the quality of the console you will actually live in, and whether the provider is already connected to something else you use.
What genuinely differs at small scale
- Billing model and discounting. Committed-use versus savings plans versus reservations are not equivalent, and the smallest useful commitment differs.
- Free tier and credit. This decides what you can learn on before you pay anything.
- Identity integration. Whichever provider already sits behind your existing directory will save you weeks.
- Managed database availability in your region. Check your actual region, not the global feature list.
- Egress pricing. This is the line item that surprises people after a migration.
What does not differ enough to decide on
Compute, object storage and a managed relational database are commodity at this scale. Kubernetes is Kubernetes everywhere, and it is equally capable of being the wrong answer on all three.
A workable default
Pick the provider your team already has accounts with and where your region is well served. Design so the workload is portable — containers, infrastructure as code, no provider-specific lock-in in the application layer — and revisit the decision when the bill is large enough to make it worth optimising.