
The Pure Architect’s Guide to Serverless: S3, React, Lambda, and Managed Services Beat Kubernetes in many cases
- Mark Kendall
- 2 hours ago
- 5 min read
The Pure Architect’s Guide to Serverless: S3, React, Lambda, and Managed Services Beat
Kubernetes in many cases
For a long time, the answer to almost every serious enterprise architecture discussion sounded the same:
Microservices.
Containers.
Kubernetes.
Independent scaling.
Service mesh.
Observability.
Platform engineering.
And to be clear, that architecture still matters. Kubernetes is not wrong. Microservices are not wrong. Containers are not wrong.
But the mistake many of us made was turning a powerful architecture pattern into a default answer.
Not every business system needs a cluster.
Not every application needs pods, ingress controllers, node pools, sidecars, service meshes, Helm charts, and platform teams.
Not every frontend needs a server.
Not every backend needs a long-running service.
Sometimes the cleanest architecture is not the most impressive one.
Sometimes the cleanest architecture is this:
React frontend
→ S3 / CloudFront
Backend APIs
→ API Gateway / Lambda
Authentication
→ Cognito
Storage
→ DynamoDB / S3 / RDS / OpenSearch
AI / agent layer
→ Bedrock / AgentCore / external model APIs
That is not “toy architecture.”
That is modern cloud architecture.
The Frontend Does Not Need to Scale Like a Server
A React site deployed to S3 is not a server-side application sitting on a machine somewhere waiting for traffic.
It is a compiled static application.
The browser downloads:
index.html
JavaScript bundles
CSS files
images
static assets
Once those files are delivered, the user’s browser runs the application.
There is no frontend server process to scale. There is no Node server that needs more CPU. There are no pods needed just to serve a static page.
With S3 and CloudFront, the frontend is delivered as static content. CloudFront can cache it globally. S3 can serve it reliably. The architecture is simple, cheap, and extremely scalable.
For many sites, the frontend scaling problem is already solved before we even start talking about Kubernetes.
The Backend Scales Where the Business Logic Lives
The backend is different.
That is where the actual system behavior happens:
submit a form
authenticate a user
call an API
run business rules
store data
invoke an AI model
trigger a workflow
generate a report
That logic can be handled by Lambda functions behind API Gateway.
The browser calls an API. The API invokes a Lambda. The Lambda performs the business action and returns a response.
When more users arrive, Lambda scales by running more concurrent executions. You are not scaling a server. You are scaling work.
That is an important mental shift.
The old model said:
Keep services running so they are ready for traffic.
The serverless model says:
Run compute when work needs to be done.
For many business applications, that is exactly the right model.
Kubernetes Is Powerful — But It Is Not Free
Kubernetes gives teams a tremendous amount of control.
It is excellent for long-running services, complex container workloads, high-throughput systems, custom networking, advanced deployment strategies, internal platforms, and large engineering organizations that need standardization across many teams.
But Kubernetes also adds real operational weight:
clusters
nodes
pods
deployments
services
ingress
autoscaling
secrets
IAM mapping
container registries
network policies
observability
patching
upgrades
cost controls
platform ownership
on-call responsibility
That may be justified.
But it should be justified by the problem, not by architectural habit.
If the business need is a training portal, internal dashboard, customer workflow app, AI assistant interface, prototype, lightweight SaaS, or low-to-medium traffic business system, a full Kubernetes platform may be more architecture than the problem deserves.
The goal is not to prove we can operate infrastructure.
The goal is to deliver a business capability.
The Real Architecture Question
The real question is not:
Should we use Kubernetes?
The real question is:
What is the simplest architecture that satisfies the intent of the system?
That is the heart of Intent-Driven Engineering.
Start with intent.
What must the system do?
Who uses it?
How often is it used?
What data does it manage?
What must be secure?
What must scale?
What must be observable?
What must be changed frequently?
What must be cheap?
What must be reliable?
Once those answers are clear, the architecture becomes easier.
If the frontend is static, use static delivery.
If the backend is event-driven or request-driven, use serverless compute.
If the data layer can be managed, use managed storage.
If authentication is standard, use a managed identity service.
If the system grows into something more complex, then introduce containers, services, orchestration, and platform patterns.
But do not start with maximum complexity just because it feels more “enterprise.”
A Better Default for Many Systems
For many modern applications, the better default is:
Static frontend
Serverless backend
Managed authentication
Managed data
Managed AI services
Cloud-native observability
Infrastructure as code
This model gives you:
low cost
fast deployment
less operational burden
automatic scaling
fewer moving parts
clean separation of frontend and backend
strong security boundaries
simple CI/CD
easy experimentation
That is not a compromise.
That is architecture doing its job.
When Kubernetes Still Makes Sense
This is not an anti-Kubernetes argument.
Kubernetes still makes sense when the workload demands it.
Use Kubernetes when you need:
long-running services
custom containers
complex service-to-service communication
highly specialized runtime control
large multi-team platform standardization
stateful workloads that require orchestration
service mesh capabilities
advanced deployment patterns
consistent hybrid or multi-cloud runtime models
But that is not every system.
The mistake is not using Kubernetes.
The mistake is using Kubernetes before the system has earned it.
Architecture Should Reduce Friction
Pure architecture is not about using the most advanced pattern.
Pure architecture is about removing unnecessary friction between business intent and working software.
If a static React frontend on S3 and CloudFront can serve the user experience, that is clean architecture.
If Lambda can handle backend business actions without a running server, that is clean architecture.
If Cognito can handle identity, that is clean architecture.
If DynamoDB, S3, RDS, or OpenSearch can handle the data layer without a custom platform team, that is clean architecture.
Clean architecture is not always the architecture with the most boxes on the diagram.
Sometimes it is the one with the fewest boxes that still satisfies the business intent.
The Architect’s New Rule
Here is the rule I now believe more than ever:
Start serverless and managed. Add infrastructure complexity only when the business problem demands it.
That rule will not apply to every system.
But it applies to far more systems than many architects want to admit.
The future of architecture is not Kubernetes versus serverless.
The future is intent-driven architecture.
Use React and S3 when the frontend is static.
Use Lambda when the backend is request-driven.
Use managed services when the platform does not need to be custom-built.
Use Kubernetes when the workload proves it needs orchestration.
That is not a step backward from pure architecture.
That is pure architecture.
Because the best architecture is not the one that shows how much infrastructure we can manage.
The best architecture is the one that delivers the business outcome with the least unnecessary complexity.
:::
This one fits your site really well because it sounds like a personal evolution, not a generic cloud article. The headline could also be stronger as:
“You Don’t Need Kubernetes Until the System Earns Kubernetes”

Comments