Micro Frontend Interview Questions and Answers
Prepare for senior frontend and frontend architect interviews with micro frontend questions covering architecture, Module Federation, routing, auth, state, testing, deployment, performance, and system design.
Micro frontends are a common topic in senior frontend, frontend lead, and frontend architect interviews.
But interviewers rarely ask only:
What are micro frontends?They usually go deeper:
When would you use them?
When would you avoid them?
How do you design the shell?
How do remotes communicate?
How do you handle routing?
How do you handle authentication?
How do you avoid duplicate React?
How do you test independent deployments?
What happens if one remote fails?
How do you deploy and roll back safely?This article gives you interview-ready answers from beginner level to architect level.
The goal is not memorization.
The goal is to help you explain micro frontends like a senior engineer who understands tradeoffs.
1. How to Answer Micro Frontend Questions
A strong answer should include four things:
Definition
Problem solved
Tradeoffs
Production concernsWeak answer:
Micro frontends mean splitting frontend into multiple apps.Strong answer:
Micro frontends split a large frontend into independently owned and independently deployable domain applications. They help large teams move independently, but they add complexity around routing, shared dependencies, testing, deployment, observability, and failure isolation.That difference matters.
2. Beginner Questions
Q1. What are micro frontends?
Micro frontends are an architectural pattern where a large frontend application is split into smaller, independently owned frontend applications.
Each micro frontend usually represents a business domain.
Example:
Catalog Remote
Cart Remote
Checkout Remote
Profile Remote
Orders RemoteThese are composed together by a shell or host app to create one user experience.
Strong answer:
Micro frontends are like microservices for the frontend, but the main goal is not just splitting code. The real goal is independent ownership, independent deployment, and domain-level autonomy for large frontend teams.
Q2. Why do companies use micro frontends?
Companies use micro frontends when one frontend monolith becomes difficult for many teams to work on together.
Common reasons:
Large frontend codebase
Slow build and test pipeline
Many teams blocked by one release cycle
Unclear ownership
Difficult migration from old technology
Need for independent deploymentGood answer:
Micro frontends are useful when team scale and release independence become bigger problems than code organization.
Q3. Are micro frontends only about performance?
No.
Micro frontends are mainly about:
Team ownership
Independent deployment
Domain boundaries
Incremental migration
Release autonomyThey can improve performance if implemented with route-level lazy loading and shared dependency governance.
But they can also hurt performance if every remote ships duplicate dependencies or creates runtime loading waterfalls.
Strong phrase:
Micro frontends do not automatically improve performance. They improve ownership and deployment autonomy. Performance still needs deliberate design.
Q4. What is a shell app?
The shell app is the host or container application that composes micro frontends into one product.
The shell usually owns:
Global layout
Top-level routing
Authentication bootstrap
Remote loading
Error boundaries
Fallback UI
Feature flag bootstrap
Analytics initializationThe shell should not own domain business logic.
Strong answer:
The shell coordinates the experience. It should not become the new frontend monolith.
Q5. What is a remote app?
A remote app is an independently built and deployed frontend application that owns a specific domain.
Example:
Cart Remote owns cart UI and cart behavior.
Checkout Remote owns checkout flow.
Profile Remote owns profile pages.A remote can be loaded by the shell at runtime.
Strong answer:
A remote owns domain UI and behavior. It should be independently testable, deployable, observable, and rollback-safe.
3. Intermediate Questions
Q6. What is Module Federation?
Module Federation is a webpack feature that allows one JavaScript application to load code from another independently built application at runtime.
In micro frontends, it is commonly used to let a shell app load remote apps.
Important concepts:
Host
Remote
remoteEntry.js
Exposes
Shared dependencies
Singleton dependenciesStrong answer:
Module Federation enables runtime composition, where the shell can load remote modules without rebuilding the full application.
Q7. What is remoteEntry.js?
remoteEntry.js is the runtime entry file exposed by a remote application.
It tells the host:
Which modules the remote exposes
How to load those modules
What shared dependencies are required
Where chunks can be loaded fromExample:
cartApp/remoteEntry.jsThe shell loads this file to access something like:
cartApp/CartPageStrong answer:
remoteEntry.js is the handshake file between host and remote.
Q8. What is the difference between build-time and runtime composition?
Build-time composition
All code is combined during build.
App imports package.
Build creates one artifact.
Deployment happens together.Runtime composition
The shell loads remote code at runtime.
Shell loads remoteEntry.js.
Remote code is fetched dynamically.
Remote can deploy independently.Strong answer:
Build-time composition is simpler, but runtime composition gives more deployment independence.
Q9. What are exposed modules?
Exposed modules are the modules a remote makes available to the shell.
Example:
Cart Remote exposes:
./CartPage
./CartDrawer
./MiniCartThe shell can then load those modules.
Important:
Exposed modules are part of the remote contract. Changing them can break the shell.
Q10. What are shared dependencies?
Shared dependencies are libraries that the shell and remotes agree to share instead of bundling separately.
Common examples:
React
React DOM
Design system
Auth SDK
Analytics SDKReact and React DOM are often shared as singletons to avoid multiple React instances.
Strong answer:
Shared dependencies reduce duplication, but they need governance. Sharing too much creates coupling.
4. Architecture Questions
Q11. How would you design a micro frontend architecture for an e-commerce platform?
A strong architecture:
Shell App
├── Home Remote
├── Catalog Remote
├── Product Details Remote
├── Cart Remote
├── Checkout Remote
├── Profile Remote
└── Orders RemoteThe shell owns:
Global layout
Top-level routing
Auth bootstrap
Remote loading
Error boundaries
Feature flags
AnalyticsEach remote owns its domain.
Example:
Catalog Remote → category pages, filters, sorting
Cart Remote → cart page, quantity updates
Checkout Remote → address, delivery, payment, review
Orders Remote → order history and order detailsStrong answer:
I would split by business domain, not by UI widgets. Each remote should have clear ownership, independent CI/CD, contract tests, fallback UI, observability, and rollback support.
Q12. How do you decide micro frontend boundaries?
Good boundaries follow business domains.
Good examples:
Catalog
Cart
Checkout
Orders
Profile
SearchBad boundaries:
Button
Header text
Product image
Small filter component
Price labelDecision checklist:
Can one team own it?
Can it deploy independently?
Can it be tested independently?
Does it have clear route ownership?
Does it have limited communication with other domains?
Can it fail without breaking the whole app?Strong phrase:
A good micro frontend boundary is an ownership boundary, not just a component boundary.
Q13. What should the shell own?
The shell should own platform-level concerns:
Global layout
Top-level routing
Auth bootstrap
Remote loading
Fallback UI
Error boundaries
Feature flag initialization
Analytics initialization
Theme and locale providers
Remote manifest loadingIt should not own:
Cart calculations
Checkout rules
Product filtering logic
Payment behavior
Order business rules
Domain API logicStrong answer:
The shell should coordinate composition, not own business logic.
Q14. What should remotes own?
Remotes should own domain-specific UI and behavior.
Example:
Catalog Remote owns filters, sorting, category listing.
Cart Remote owns cart UI and cart interactions.
Checkout Remote owns checkout steps and validation UX.
Profile Remote owns profile pages and account settings.Remotes should own:
Domain components
Domain routes
Domain API calls
Domain state
Domain tests
Domain observability
Domain deploymentStrong answer:
A remote should be independently owned, independently deployable, and independently observable.
Q15. How do micro frontends communicate?
Prefer communication methods that keep remotes loosely coupled.
Recommended:
URL state
Backend APIs
Small custom events
Shell-mediated platform context
Event bus with strict contractsAvoid:
Direct remote-to-remote imports
Shared global store for everything
Reading hidden localStorage keys
Mutating another remote’s stateStrong answer:
Communication should happen through explicit contracts, not private implementation details.
5. Routing Questions
Q16. Who owns routing in micro frontends?
Usually:
Shell owns top-level routing.
Remotes own nested domain routing.Example:
Shell:
/checkout/* → Checkout Remote
Checkout Remote:
/checkout/address
/checkout/delivery
/checkout/payment
/checkout/reviewStrong answer:
The shell owns route selection. The remote owns route interpretation.
Q17. How do you support deep linking?
Deep linking means direct URLs should work.
Example:
/profile/addressesFlow:
Server returns shell app.
Shell matches /profile/*.
Shell loads Profile Remote.
Profile Remote renders Addresses page.Important:
Hosting/server must fallback to shell index.html for client-side routes.Strong answer:
Deep links work when the shell can route directly to the correct remote and the remote can interpret its nested path.
Q18. How do you avoid route conflicts?
Use:
Central route registry
Route ownership documentation
Route naming conventions
CI validation
Platform review for top-level routesExample:
/categories/* → Catalog Remote
/product/:id → Product Remote
/cart → Cart RemoteAvoid overlapping ownership.
Strong answer:
Every route should have exactly one owner.
6. Authentication and Authorization Questions
Q19. Where should authentication live?
Authentication bootstrap usually belongs in the shell or platform layer.
The shell can own:
Session bootstrap
Login/logout
Token refresh orchestration
Protected route checks
Redirect after login
Identity contextRemotes consume safe identity context.
Strong answer:
Authentication should be centralized for consistency. Remotes should not each implement their own login flow.
Q20. Where should authorization live?
Authorization should happen at multiple levels.
Shell → broad route protection
Remote → feature-level permission UX
Backend → real security enforcementExample:
Shell checks if user is logged in for /orders.
Orders Remote checks if user can view this order.
Orders API enforces ownership.Strong answer:
Frontend authorization improves UX, but backend authorization protects the system.
Q21. Should remotes access tokens directly?
Ideally no.
Better:
Shell/auth provider manages session.
Approved API layer attaches credentials.
Remotes call domain APIs.
Tokens are not passed through props, events, URLs, or localStorage.Strong answer:
Token handling should be centralized and secure. Spreading token logic across remotes creates security and consistency problems.
7. State Management Questions
Q22. Should micro frontends share one global store?
Usually no.
A shared global store creates tight coupling.
Bad:
Catalog writes global state.
Cart reads catalog state.
Checkout mutates cart state.
Profile depends on checkout state.Better:
Shell owns platform state.
Remotes own domain state.
Backend owns business-critical state.
URL owns shareable route state.Strong answer:
Sharing a state library is okay. Sharing one global store across all remotes is usually risky.
Q23. Where should cart state live?
For e-commerce, cart state is business-critical.
Recommended:
Backend/API owns source of truth.
Cart Remote owns cart UI state.
Shell may show cart badge from a small cart summary.
Other remotes communicate through events or API updates.Example:
Product Remote adds item.
Cart API updates cart.
Cart Remote/Header gets updated summary.Strong answer:
Cart is too important to live only in frontend memory. Backend should be the source of truth.
Q24. When should URL state be used?
Use URL state for shareable route-level state.
Examples:
Search query
Filters
Sorting
Pagination
Selected tab
Category slug
Product IDAvoid URL state for:
Tokens
Payment data
Full cart object
Private user data
Large JSON payloadsStrong answer:
URL state is ideal for navigation and shareable state, not sensitive or complex application state.
8. Testing Questions
Q25. How do you test micro frontends?
Use multiple layers:
Unit tests inside each remote
Component tests
Contract tests
Shell + remote integration tests
E2E tests for critical journeys
Visual regression tests
Performance checks
Deployment smoke tests
Production monitoringStrong answer:
Unit tests prove a remote works alone. Contract and integration tests prove it works inside the product.
Q26. What is contract testing in micro frontends?
Contract testing verifies that shell and remotes agree on integration points.
Contracts include:
Exposed modules
Props
Events
Event payloads
Routes
Shared dependency expectations
Feature flagsExample:
Cart Remote must expose ./CartPage.
CartPage must accept userId, locale, currency.
Cart Remote must emit cart:updated with itemCount.Strong answer:
Contract tests protect independent deployment.
Q27. What E2E tests are important?
Test critical user journeys across remotes.
Examples:
Search → Product Details → Add to Cart → Checkout
Login → Orders
Profile address update → Checkout address selection
Cart quantity update → Checkout total updateDo not test every small UI detail with E2E.
Strong answer:
E2E tests should focus on cross-remote business-critical journeys.
9. Deployment and Rollback Questions
Q28. How do you deploy micro frontends independently?
Each remote should have its own CI/CD pipeline.
Example:
Cart Repo → Build → Test → Publish versioned artifact → CDN → Update manifestThe shell loads remotes through:
remoteEntry.js
Remote manifest
Versioned URLsStrong answer:
Independent deployment is safe only when contracts, smoke tests, observability, and rollback are in place.
Q29. What is a remote manifest?
A remote manifest maps remote names to active versions and URLs.
Example:
{
"cartApp": {
"version": "1.8.4",
"url": "https://cdn.company.com/cart/1.8.4/remoteEntry.js",
"rollbackVersion": "1.8.3",
"owner": "cart-team"
}
}Benefits:
Controlled rollout
Rollback
Version visibility
Environment promotion
Canary releaseStrong answer:
A manifest gives runtime flexibility without blindly loading the latest remote.
Q30. How do you roll back one micro frontend?
Keep previous versions available and switch the manifest back.
Example:
cartApp v1.8.5 fails.
Manifest points back to cartApp v1.8.4.
Shell loads stable version.
Cart team investigates v1.8.5.Strong answer:
A remote rollback should not require redeploying the entire shell unless the shell itself is broken.
10. Performance Questions
Q31. How do you optimize micro frontend performance?
Use:
Lightweight shell
Route-level lazy loading
Controlled preloading
React singleton
Shared dependency governance
Bundle budgets per remote
Versioned caching
Skeleton UI
Web Vitals monitoring per route and remoteStrong answer:
Micro frontend performance is not automatic. It requires governance across loading, dependencies, caching, and monitoring.
Q32. How do you avoid duplicate React bundles?
Configure React and React DOM as shared singleton dependencies and enforce version policy.
Also monitor bundles in CI.
Strong answer:
React should usually be shared as a singleton, but singleton must be combined with version governance.
Q33. How do you prevent layout shift when remotes load?
Use:
Stable shell layout
Reserved content space
Skeletons matching final dimensions
Defined image dimensions
Early CSS loading
Avoid late layout-changing stylesStrong answer:
Async remote loading should not cause the page to jump.
11. Failure Isolation Questions
Q34. What happens if one remote fails?
The shell should remain stable.
Expected behavior:
Remote fails.
Shell catches failure.
Fallback UI appears.
Navigation remains usable.
Error is logged with remote name/version.
Owning team is alerted.
Rollback is possible.Strong answer:
Micro frontends are not truly independent unless they can fail independently.
Q35. Are React error boundaries enough?
No.
Error boundaries catch render-time errors, but not all failures.
You also need:
Remote loading failure handling
Chunk load error handling
Timeouts
Retry strategy
API error states
Observability
RollbackStrong answer:
Error boundaries are necessary, but they are only one layer of failure isolation.
Q36. How do you test remote failure?
Simulate:
remoteEntry.js 404
Chunk load failure
Remote render crash
Remote timeout
API 500
API 401/403
Malformed manifestVerify:
Fallback UI
Retry behavior
Navigation stability
Error logging
Alerting
Rollback readiness12. Design System Questions
Q37. How do you keep UI consistent across micro frontends?
Use a governed design system.
It should include:
Design tokens
Reusable components
Accessibility patterns
Documentation
Versioning policy
Visual regression tests
Contribution processStrong answer:
Micro frontends can be independently built, but they should be consistently experienced.
Q38. What should not go into the design system?
Avoid domain-specific business components.
Bad:
CheckoutPaymentStep
CartPromotionCalculator
ProductRankingCard
OrderCancellationPanelGood:
Button
Input
Modal
Toast
Card
FormField
Tabs
SkeletonStrong answer:
The design system should contain reusable UI primitives and patterns, not domain business logic.
13. Architect-Level Questions
Q39. When would you choose micro frontends over a modular monolith?
Choose micro frontends when:
Multiple teams own different domains.
Independent deployment is required.
Release coordination is a bottleneck.
Domains are stable.
CI/CD maturity is high.
Design system exists.
Testing and observability are ready.
Rollback is possible.Choose modular monolith when:
Small team
Early product
Unclear domains
No need for independent deployment
Low CI/CD maturityStrong answer:
I would start with a modular monolith and move to micro frontends only when team scale and independent deployment justify the complexity.
Q40. When would you reject micro frontends?
Reject them when:
One team owns the app.
Domains are unclear.
The app is small.
No independent deployment is needed.
There is no design system.
There is no platform team.
Testing/observability maturity is low.
The motivation is only “modern architecture.”Strong answer:
Micro frontends solve organizational and deployment problems. If those problems do not exist, they may be overengineering.
Q41. How would you migrate a monolith to micro frontends?
Use a strangler pattern.
Steps:
1. Modularize the monolith.
2. Identify domain boundaries.
3. Introduce shell app.
4. Extract one low-risk remote first.
5. Route traffic gradually.
6. Add monitoring and rollback.
7. Repeat for other domains.
8. Extract checkout/auth later, not first.Strong answer:
I would avoid a big-bang rewrite and start with a low-risk domain like catalog, profile, or marketing.
Q42. How do you prevent the shell from becoming a new monolith?
Keep business logic out of the shell.
The shell should own:
Routing
Layout
Auth bootstrap
Remote loading
Fallback UI
Analytics setup
Feature flagsRemotes should own:
Domain UI
Domain state
Domain APIs
Domain behavior
Domain testsStrong answer:
The shell should compose the product, not become the product’s business brain.
14. System Design Mock Interview
Prompt
Design a micro frontend architecture for a large e-commerce platform.
Requirements:
Multiple teams own catalog, cart, checkout, profile, and orders.
Teams need independent deployment.
Checkout is business-critical.
SEO matters for category and product pages.
The system must support rollback and observability.Strong Answer Structure
Start with domain split:
Shell App
Catalog Remote
Product Details Remote
Cart Remote
Checkout Remote
Profile Remote
Orders RemoteExplain shell responsibilities:
Top-level routing
Global layout
Auth bootstrap
Remote loader
Feature flags
Error boundaries
Analytics
Manifest loadingExplain routing:
/categories/* → Catalog Remote
/product/:id → Product Remote
/cart → Cart Remote
/checkout/* → Checkout Remote
/profile/* → Profile Remote
/orders/* → Orders RemoteExplain deployment:
Each remote has independent CI/CD.
Artifacts are versioned and published to CDN.
Shell loads remotes through manifest.
Critical remotes like checkout use controlled rollout.Explain failure isolation:
Each remote is wrapped in an error boundary.
Remote loading failures show fallback UI.
Errors include remote name/version.
Checkout failure triggers alert and rollback.Explain performance:
Route-level lazy loading.
Preload cart/checkout at likely points.
React singleton.
Bundle budgets per remote.
Web Vitals by route and remote.Finish with tradeoffs:
This gives team autonomy and independent deployment, but adds complexity around routing, testing, dependency sharing, observability, and governance.
15. Rapid-Fire Questions
| Question | Short Answer |
|---|---|
| Main goal of micro frontends? | Independent ownership and deployment |
| Best boundary? | Business domain |
| What should shell own? | Platform concerns |
| What should shell avoid? | Domain business logic |
| Routing model? | Shell top-level, remote nested |
| Communication style? | Explicit contracts |
| Best state owner for cart? | Backend + Cart Remote |
| React sharing? | Singleton with version governance |
| Testing focus? | Contracts + integration + E2E |
| Deployment model? | Independent CI/CD + manifest |
| Rollback model? | Manifest points to previous version |
| Failure handling? | Error boundary + fallback + monitoring |
| Performance risk? | Duplicate deps and loading waterfalls |
| UI consistency? | Governed design system |
| When to reject MFEs? | Small team / unclear domains / no deployment need |
16. Red Flag Answers
Avoid these:
“Micro frontends are always better than monoliths.”“We should split every component into a remote.”“The shell can store all shared business state.”“We do not need contract tests.”“If one remote fails, the user can refresh.”“We can load all remotes on app startup.”“Every remote can use any React version.”“Frontend permission checks are enough for security.”These answers show shallow production understanding.
17. Strong Candidate Phrases
Use these in interviews:
Micro frontends solve team-scaling and deployment autonomy problems, not just code-splitting problems.The shell should coordinate composition, not own domain business logic.A good remote boundary is an ownership boundary.Independent deployment is only safe with contracts, observability, and rollback.The shell owns route selection; the remote owns route interpretation.Unit tests prove a remote works alone; integration tests prove it works inside the product.Micro frontends are not truly independent unless they can fail independently.A modular monolith is often the better first architecture.18. Final Revision Checklist
Before your interview, revise:
- Definition of micro frontends
- When to use and when to avoid
- Shell vs remote responsibilities
- Module Federation concepts
- remoteEntry.js
- Shared dependencies and React singleton
- Routing and deep linking
- Auth and authorization
- Communication patterns
- State ownership
- Contract testing
- E2E testing
- Independent deployment
- Manifest-based rollback
- Failure isolation
- Performance optimization
- Design system governance
- Migration strategy
- E-commerce system design example
19. Summary
Micro frontend interviews are not about memorizing buzzwords.
They test whether you understand:
- Architecture boundaries
- Team ownership
- Deployment independence
- Runtime composition
- Routing
- Authentication
- Communication
- Testing
- Performance
- Failure isolation
- Governance
- Tradeoffs
The strongest final answer is:
I would use micro frontends only when team scale, domain ownership, and independent deployment justify the complexity. I would design a lightweight shell, domain-owned remotes, explicit contracts, route-level loading, shared dependency governance, contract testing, rollback, observability, and failure isolation.
That is the level expected from senior frontend and frontend architect interviews.
References
- Micro Frontends — Martin Fowler: https://martinfowler.com/articles/micro-frontends.html
- Micro Frontends: https://micro-frontends.org
- webpack Module Federation Documentation: https://webpack.js.org/concepts/module-federation/
- Module Federation Official Site: https://module-federation.io
- AWS Prescriptive Guidance: Micro-frontends: https://docs.aws.amazon.com/prescriptive-guidance/latest/micro-frontends-aws/introduction.html