← All posts

May 19, 2026

Micro-frontends that don't collapse under their own weight

Eleven years in, I've seen most of the ways micro-frontend setups fail. Version-mismatch hell, shared-dependency traps, and the deploy story nobody owns. Here's what actually holds up.

micro-frontendsarchitecturereact

Micro-frontends are sold as independence and bought as coupling. The pitch is "teams ship on their own cadence." The reality, if you're not careful, is a shared runtime where one team's React upgrade quietly breaks another team's bundle in production.

Three failure modes I plan around

  • Version-mismatch hell — two MFEs assuming different versions of the same shared dependency at runtime. The fix isn't a stricter lockfile; it's deciding what is genuinely shared and isolating everything else.
  • The orphaned deploy — independent deploys are great until nobody owns the routing layer that stitches them together. Routing is infrastructure, not an app concern.
  • Shared-state leakage — global stores that turn "independent" frontends into a distributed monolith with extra steps.

The architecture I reach for

Route at the edge, not in a shell. Each frontend is a fully self-contained build with its own dependencies; the CDN decides which one answers a given path or host. No module federation, no shared shell, no cross-imports. It's less clever and far more durable — the platform behind this very site routes a dozen independent frontends through a single distribution exactly this way.

I built MFE at enterprise scale for a US Fortune 500 EdTech product, with teams of 10–50. The lessons that stuck weren't about frameworks. They were about boundaries.


Got an app stuck on localhost?

I take products from localhost to live, monitored production — and don’t disappear after handoff.

Get in touch →