DEV Community

Cover image for Cloud Architecture Choices I Would Not Overcomplicate
Mark Yu
Mark Yu

Posted on • Edited on

Cloud Architecture Choices I Would Not Overcomplicate

The cloud architecture mistake I keep seeing is not "using the wrong pattern."

It is picking a pattern before the system has earned it.

I have seen small teams jump straight into Kubernetes, service mesh, distributed tracing, async queues, and five databases for an app that still had one real customer workflow. It looked modern. It was also painful to operate.

So here is the practical version: start with the boring shape that solves the current problem, then evolve only when the failure mode is real.

The Decision Map

User request
   |
   v
Simple app? -------------------- yes --> client-server / managed PaaS
   |
   no
   v
Independent domains? ----------- yes --> modular monolith or microservices
   |
   no
   v
Bursty event workload? --------- yes --> serverless / queue workers
   |
   no
   v
Global latency or edge need? --- yes --> CDN + edge compute
Enter fullscreen mode Exit fullscreen mode

This is not perfect, but it keeps you from starting with the most expensive option.

Client-Server Is Still Fine

A client-server app is not "old architecture." It is often the cleanest architecture.

Use it when:

  • one team owns the app
  • the database is still central
  • the domain is not split cleanly
  • most requests are synchronous
  • deployment frequency is manageable

The simplest useful production shape:

Browser / Mobile
      |
      v
Load Balancer
      |
      v
App Server
      |
      v
Database + Cache
Enter fullscreen mode Exit fullscreen mode

I would rather run this well than run a fragile microservice system badly.

Distributed Architecture Solves Scale, Then Adds New Problems

Distributed systems help when one machine or one process is no longer enough.

They also add:

  • network failure
  • retry storms
  • partial writes
  • duplicate events
  • clock and ordering problems
  • harder debugging

That tradeoff is worth it when your workload needs it. It is not worth it for architectural fashion.

The first production question I ask is:

Can we explain what happens when one node fails halfway through a request?

If the answer is vague, the architecture is not ready.

Microservices Are an Organizational Choice

Microservices are not just smaller apps. They are a way to let teams move independently.

I would consider them when:

  • teams own clear business domains
  • services can deploy independently
  • data ownership is clear
  • you already have observability
  • operational maturity exists

I would avoid them when:

  • the team is small
  • the domain model is still changing every week
  • all services share one database anyway
  • local development already feels slow

That last one matters. If running the system locally becomes a ritual, developers will stop testing the full path.

Serverless Is Great for Spiky Workloads

Serverless is useful when traffic is bursty or event-driven.

Good fits:

  • image processing
  • webhook handlers
  • scheduled jobs
  • lightweight APIs
  • glue code between cloud services

Weak fits:

  • long-running tasks
  • low-latency hot paths with cold-start sensitivity
  • complex local debugging
  • workloads that need stable runtime control

Serverless can reduce ops work, but it can also hide complexity in IAM, retries, timeouts, and vendor-specific behavior.

Cloud-Native 3.0: What I Actually Care About

The 2026 cloud-native conversation is full of AI-agent platforms, edge compute, internal developer platforms, and policy automation.

That is interesting, but my practical checklist is still simple:

Layer Question
Deploy Can we ship safely without one senior engineer babysitting?
Observe Can we find the bad request in under 10 minutes?
Recover Can we roll back or degrade gracefully?
Cost Do we know which service is burning money?
Security Are secrets and permissions boring and auditable?

If those are weak, adding AI agents to the platform will not save the architecture.

My Default Recommendation

For most junior-to-mid teams in 2026, I would start here:

  1. Managed database
  2. One deployable backend
  3. CDN for static assets
  4. Queue for slow work
  5. Cache only after measurement
  6. Containerization when deployment needs it
  7. Kubernetes only when the platform pain is real

This path is not flashy. It is easier to debug at 2 a.m.

Final Thought

Good cloud architecture is not the most advanced diagram. It is the smallest system that can survive the current business pressure.

Where did your team overcomplicate cloud architecture too early?

Top comments (0)