Playbook
When to Keep a Monolith Beside MFE (Module Federation) (When To Keep A Monolith Beside Mfe)
When to Keep a Monolith Beside MFE — a production lesson from logistics operations platforms.
Logistics Micro Frontend Platform (Module Federation)
Part 10 of 10
A series on splitting logistics ops panels into shell, auth, and feature remotes with Module Federation.
When to Keep a Monolith Beside MFE (Module Federation)
Not every surface migrates on day one: map-heavy CMS and push-admin can remain a monolith beside remotes.
CRA ops panel + federated estate
Coexistence bir geçiş başarısızlığı değil, bilinçli sınırdır.
Concepts, defined where they first appear
📦 Shell (Host)
The app that loads remotes and owns shared layout and top-level routing.
📦 Remote
An independent build that exposes modules through remoteEntry.js.
📦 Expose Path
The public module path consumers import (e.g. auth/Login).
📦 Shared Singleton
Federation setting that forces one copy of React-like deps at runtime.
Teams that blur these concepts confuse UI state with integration truth.
Shape of the problem
Not every surface migrates on day one: map-heavy CMS and push-admin can remain a monolith beside remotes.
CRA ops panel + federated estate
The split that works
Coexistence bir geçiş başarısızlığı değil, bilinçli sınırdır.
CRA ops panel + federated estate
↓
explicit contract
Where production breaks
Incidents grow when radius, identity, or deploy assumptions stay implicit. Make the contract visible and reversible.
The mappings that get confused most often
❌ One app is always safer
✓ Without clear boundaries, one app is more fragile
❌ Keep config hardcoded
✓ Radius, remote URLs, and expose paths are operational contracts
❌ Vendor/API truth is UI state
✓ Vendor feed is evidence; ops state is a decision
A checklist for auditing your own system
- Write the ownership boundary for this surface in one sentence.
- If this contract changes, who deploys?
- On timeout or vendor delay, what does the UI show?
- Do you test embedded and standalone paths separately?
- Deny-list check: any vendor/domain leakage in copy?
What to take away from this part
- Contracts must be visible: expose paths, radius, ticket state, or remote URLs.
- The gap between UI and external systems is a design choice, not a bug.
- Independent deploy means independent rollback.
The boundary you hide will find you in production.
FAQ
Frequently asked questions
What is Shell (Host)?
The app that loads remotes and owns shared layout and top-level routing.
What is Remote?
An independent build that exposes modules through remoteEntry.js.
Is it true that "One app is always safer"?
Without clear boundaries, one app is more fragile
What does this part lock in?
Coexistence bir geçiş başarısızlığı değil, bilinçli sınırdır. Not every surface migrates on day one: map-heavy CMS and push-admin can remain a monolith beside remotes.
Engineering Principles Learned
- Ownership and release boundaries are as real as the domain model.
- External systems produce evidence; operational state is decided by you.
- Version the contract; keep internals free to move.
Continue reading
Continue reading
Next in series
Version Skew and Contract Discipline
Version Skew and Contract Discipline — a production lesson from logistics operations platforms.
Same series
Deploying Remotes to Independent Static Hosts
Deploying Remotes to Independent Static Hosts — a production lesson from logistics operations platforms.
Same series
Routing Composition in a Host Shell
Routing Composition in a Host Shell — a production lesson from logistics operations platforms.