genaipros← The path
Line D · CloudC6 · Application Architecture
C6 of 6Application Architecture AWS · Azure · GCP

Coupling is the enemy.
Everything else is tactics.

Monolith → microservices → event-driven is one long campaign to manage coupling so that pieces can scale and deploy independently. This stage is mostly vendor-neutral: the patterns carry the weight, and the three clouds only supply the plumbing.

The thesis of this stage

Every architectural move in this stage — splitting a monolith, drawing a service boundary, replacing a function call with an event, putting a gateway at the edge — is the same move: reduce the number of things that must change together, deploy together, or be up at the same instant. That is all coupling is. The rest is vocabulary.

Building on Stages 1–5

Microservices run on the compute ladder from C3 (containers and serverless especially). They talk over the VPC you networked in C4. They authenticate to each other and to message buses with the workload identities from C2. Each one owning its own datastore is the database-per-service consequence of C5 — and event sourcing is, at bottom, a storage pattern. None of that is re-taught here. This stage is about where the seams go and what travels across them.

The two axes that actually matter

Signature visual

Architectures are usually argued about on one axis — "monolith or microservices?" — and that framing is what produces the disaster. There are two independent axes, and the interesting information is in which quadrant you land.

TIGHTLY COUPLED LOOSELY COUPLED DISTRIBUTED SINGLE UNIT DANGER QUADRANT THE PAYOFF Monolith Modular monolith Distributed monolith all the pain, none of the payoff Microservices sync APIs · S1 Event-driven async events · S2 SKIPPING THE WORK
Click or tab to any point Distribution buys you independent scaling and deployment. Decoupling is what you have to pay for it. Move up before you move right and you land in the red quadrant.
Read it as a route, not a ranking. The green dashed path is decoupling first, distributing second. The red path is the common one: splitting the deployable units while the dependencies stay exactly where they were.

Where coupling hides at each stage

Monolith
Coupling is in the call graph

Any function can call any other; any module can reach into any table. Nothing enforces a boundary, so boundaries erode. The tell: you cannot answer "what breaks if I change this?" without reading the whole codebase.

Upside that gets forgotten: one deploy, one stack trace, real ACID transactions.

Microservices
Coupling moves into the API and the schema

The network makes calls explicit, which is progress — you can now see the dependencies. But a breaking field change in a shared response body still forces a coordinated release, and a shared database re-couples everything silently.

New cost: availability now multiplies down the chain.

Event-driven
Coupling retreats into the event schema

The emitter no longer knows who listens, and neither side has to be up at the same instant. What remains coupled is the meaning of the event: change the payload contract and every consumer breaks at once, silently, at 3 a.m.

New cost: no single stack trace; ordering and duplicates become your problem.

The villain of this stage

The distributed monolith. Services split apart but wired so tightly they must still deploy together. Symptoms: a release train where six repos ship in a fixed order; services sharing one database; a request that fans out through five synchronous hops before anything is returned; a change to one service's response shape that requires a ticket on three other teams. You have paid the full operational bill of distribution — network failures, distributed tracing, per-service pipelines, eventual consistency — and bought none of the independence it was supposed to fund.

How the four sessions build

Clickable map

Decision tree — which session should you act on first?

The sessions are ordered for teaching, but a real system usually has one problem that dominates. If you are here to fix something rather than to study in order, start where the pain is.

Follow no ↓ down the left. The first yes exits right. Bottom-left is the default.

Do several services have to be released together, or do any of them share a database? The two definitive symptoms of a distributed monolith. If either is true, nothing downstream will help until it is fixed.
YES →
S1 — your boundaries are wrong Better messaging on top of bad boundaries just makes the coupling asynchronous. Fix the seams first.
NO ↓
Does one downstream outage take down a user-facing request? A dependency that is not essential to the response still fails the response.
YES →
S2 — convert that hop to an event Turn the synchronous failure into an asynchronous delay. The availability arithmetic in S1's reality check tells you how much you get back.
NO ↓
Are you dropping requests during spikes, or fighting a broker's limits? Timeouts under load, mysterious duplicate processing, messages too large, ordering you did not ask for.
YES →
S3 — you have the right pattern, wrong plumbing Queue sizing, delivery guarantees, and the four settings that cause nearly every messaging incident.
NO ↓
Does a change to an internal service force your clients to change? Or: is there no single place where auth, rate limiting, and versioning are handled?
YES →
S4 — you have no edge layer A gateway absorbs internal churn so clients never see it, and gives you one place for the cross-cutting concerns.
NO ↓
Default Read them in order, S1 → S4 Nothing is on fire, which is the best possible time to learn this. The sessions build deliberately: boundaries decide what can be decoupled, async decides how, the plumbing carries it, and the edge protects the clients from all of it. Start at S1 and do its paper lab against your own system — the downtime number it produces will tell you which of the other three matters most to you.

What you'll be able to do at the end

  • Decide monolith vs microservices for a specific system, with a defensible reason that isn't "Netflix does it".
  • Draw service boundaries around business capabilities rather than database tables, and say why a given boundary is too big or too small.
  • Design an event-driven flow and judge honestly when async is worth its complexity.
  • Recognise a distributed monolith in an architecture diagram in under a minute.
  • Pick queue vs topic vs event bus on any of the three clouds, and know the ordering and delivery guarantee you just signed up for.
  • Place a gateway, a BFF, and a CDN correctly — and know when each is the wrong answer.
  • Critique your own FastAPI gateway and inference router against all of the above.

How this stage is taught

Ground rules
Vendor-neutral first
Patterns carry this stage; clouds supply plumbing

S1 and S2 are almost pure design. There is no "AWS bounded context" and no "Azure saga" — forcing a three-cloud table onto those sessions would be noise, so those tabs mark themselves concept-only and skip it.

S3 and S4 do touch real products — message brokers and edge services — so both carry a full AWS | Azure | GCP comparison.

Three passes per concept
Intuition → mechanism → trade-offs

Pass 1 is plain words and an analogy. Pass 2 is how it actually works, with a diagram. Pass 3 is the numbers, the limits, and where it breaks. Consoles, CLI, and click-paths appear only in each tab's final "apply it" section.

Field notes — what changed recently

Four things differ from the plan as given:

Cloud_Patterns.pdf · A cloud patterns catalog, the cloud application patterns catalog

§4 and §5 confirmed; §6 and §8 need two adjustments

§4 is "Microservices Architecture" is "Microservice Design" is "Event-Driven Architecture" — all as planned. But CQRS is not in §6; it lives in §7 (Cloud-Native Storage), consistent with the material treating it as a storage pattern. Event Sourcing is in §6. Both are taught in S2 anyway, sourced from their real homes.

Cloud_Patterns.pdf

§8 is about clients, not gateways — the gateway pattern is in §4

"Cloud Application Clients" covers browser apps, single-page apps, micro frontends, mobile, CLI, and Public API. The API-gateway/BFF pattern this material calls Dispatcher is in §4 (it lists "Backend for Frontend" and "API Gateway" as its aliases). S4 therefore draws on §8 and the §4 Dispatcher pattern. The material also has no real CDN coverage, so that is grounded from vendor docs.

Cloud_Patterns.pdf · the saga pattern

The material does not teach sagas — it cites them out

"Saga" appears twice in the whole source, both times as a cross-reference to Chris the well-known microservices patterns catalog (2018). The material's own answer to distributed transactions is its Service Orchestrator pattern. S2 teaches sagas properly from the wider literature and flags that it is going beyond the spine text.

GCP notes · GCP guidance

Right section, different title

§8 is titled "Introduction to Asynchronous Communication in GCP" — Pub/Sub and Dataflow are its two main sections, so the content matches the plan. Azure §12 "Integration Services" is confirmed exactly, but note it covers Event Grid and API Management in depth while giving Service Bus only a passing definition, and it puts Front Door and CDN in §13, not §12. S3 and S4 fill both gaps from vendor documentation.

AWS notes · AWS guidance, AWS architecture guidance

Confirmed: no dedicated application-architecture section

As expected. Every AWS messaging and edge service in S3 and S4 — SQS, SNS, EventBridge, API Gateway, CloudFront — is sourced from current AWS documentation and announcements rather than from this material, and each tab says so where it happens.

Start here

S1 draws the boundaries. Everything in S2, S3, and S4 assumes you got them roughly right — because no amount of good messaging plumbing rescues a bad service boundary.

← C5The path
Next stage · C7 →genaipros · C6 · Application ArchitectureAI for Everyone ↗