The Dark Side of Micro-Frontends

Bookmark
Rate this content

Micro-Frontends are the distributed architecture for the user interfaces that are solving not only technical but also organizational challenges. In this session, you will learn the most common anti-patterns I've seen in the past 10 years of implementing and consulting worldwide companies in their journey into the micro-frontends architecture. Whether you are an expert or a newbie, in this talk, you will learn how to properly structure your micro-frontends architecture and how to avoid common mistakes while building micro-frontends.

This talk has been presented at React Advanced 2025, check out the latest edition of this React Conference.

FAQ

A micro-frontend is a part of a frontend application that is independently developed, deployed, and maintained. It is designed to optimize for team independence by reducing external dependencies, unlike components which focus on reusability and UI consistency.

Common mistakes include treating components and micro-frontends as the same, over-relying on runtime composition, and mismanaging global states. These mistakes often lead to poor design and operational challenges.

Teams should consider three dimensions: architecture, engineering culture, and team topology. Each decision in designing a distributed system affects these dimensions, and friction in the system often indicates areas for improvement.

Starting with a coarse-grain approach reduces complexity, allows easier splitting of systems, faster building and deployment, and simplifies rollback processes, thereby reducing cognitive load on developers.

A frontend discovery service dynamically generates and manages routing configurations, enabling efficient deployment and routing of micro-frontends without hard-coding dependencies in the configuration files.

By allowing independent deployment and iteration of micro-frontends, organizations can increase deployment frequency, enabling faster testing and feature rollouts, thus creating value for users and businesses.

Governance measures include implementing fitness functions to test application architecture, setting budget size limits to control bundle sizes, and using tools like Dependabot for dependency management to ensure system coherence and performance.

The choice between monorepos and polyrepos depends on the desired engineering culture and collaboration style. Monorepos encourage trunk-based development, while polyrepos promote working by contracts and reduce inter-team dependencies.

Organizations should handle routing by implementing an application shell that manages global routing and delegates local routing to individual micro-frontends. A meta-shell can be used to position multiple micro-frontends within a unique view.

Luca Mezzalira
Luca Mezzalira
29 min
28 Nov, 2025

Comments

Sign in or register to post your comment.
Video Summary and Transcription
In the Talk, various key points were discussed regarding micro-front-end architecture. These included challenges with micro-intents, common mistakes in system design, the differences between micro-intents and components, granularity in software architecture, optimizing micro-front-end architecture, efficient routing and deployment strategies, edge computing strategies, global state and data sharing optimization, managing data context, governance and fitness functions, architectural testing, adaptive growth, value of micro-frontends, repository selection, repo structures, and web component usage.

1. Challenges with Micro-Intents

Short description:

In the last 10 years, worked with various teams globally, highlighting issues with micro-intents. Common misconceptions: equating components with micro-intents, relying only on runtime composition. Avoid mixing multiple frameworks in micro-intents for success in implementation.

In the last 10 years, I embarked on this journey on how to make a distributed system on the front end. And the last five, I was working for AWS, so I had the pleasure to work with hundreds of teams worldwide, internal teams from Amazon, AWS, teams from New Zealand, Silicon Valley, from insurance, banks, e-commerce, you name it. And I have seen quite a lot of, let's say, bad implementation of micro-intents and successful implementation of micro-intents. And today, I want just to highlight the main issues that I've seen with micro-intents. It's not going to be a lecture on how micro-intents works end to end, but focusing on the main problems, because there are the parts that usually hurt the most.

Okay, let's see if it works. Yes. Okay, most of the time when I walk in a room with a customer, we do a bit of a whiteboarding session together. And maybe they already started to deploy something in production. What I see is something like that. They have a website and then just say, okay, listen, can you explain to me how it works? And then I tell them, oh yes, of course we can. So, we have the header, this is a micro-intent. Then we have another component, another micro-intent, another micro-intent, another micro-intent, another micro-intent, and so on until the end. Now, there is a fundamental problem here that is basically thinking that components and micro-intent are exactly the same thing. And secondly, thinking that runtime composition is the only way to do micro-intents. That is absolutely not.

Then we move to the next step. This is the real dark side of micro-intents, where after telling me how many components they have or many micro-intents they have in the same view, they start to say, oh yeah, because we are using modified iteration, but we are thinking about single SPA, but also we want a bit of next JS multi-zone, we are using multi-framework approach, or we are choosing one of those frameworks, or even no frameworks, we're using iframes, whatever it is. The problem is none of those are making successful micro-intents platform. So, stop it. That's the most important thing, the only takeaway that you have from this part.

2. Common Mistakes in System Design

Short description:

Avoid blaming architecture for system issues. Consider architecture, engineering culture, and team structure in system design. Friction indicates areas to address, often not related to architecture. Common mistakes: defining micro-intents, understanding granularity, and context ownership in components.

Then, please, also don't blame the architecture, like I heard a bazillion times, that is not only for micro-intents, by the way, it's also for any distributed system, also microservices, I heard several times, if things are not working. Because you need to think about three dimensions when you are designing a distributed system, it's not only for micro-intents. You need to think about the architecture part, so investing time designing your system. You need to think about the engineering culture you want to have. If you have, I don't know, half or majority of junior developers, you cannot start immediately with the most advanced things that you find in engineering. And finally, you need to think about the team topology, so how you're structuring the teams. Because every single decision that you make in an architecture is going to affect, intentionally or not, the other two dimensions, and vice versa, by the way. So, when you see friction inside the system, it's a gift. It's not negative, it's a gift. Because it means that something doesn't work and you need to understand which dimension you're going to solve. Surprise! Vast majority of the time it's not architecture.

Okay, so I want to share with you the three most common mistakes I have seen in the last four years and how to overcome them. The first one is, what is a micro-intent? You have no idea how often I ask how micro is a micro-intent or how micro is a microservice, by the way. Is 100 lines of code a microservice or a micro-intent? But the answer is no. There are different characteristics. So let's try to come to consensus on this one. Let's take the most amazing... I'm not a designer, as you can see. Let's see the most amazing things that you can have or the most granular things that you can have in front of this component. So this button is exposing a bunch of properties. So you have the label, you have methods, you have an ID, you have a bunch of things. Think about that. Who is setting this information? The context of the button, right? So it's the container of the button that is instructing the button how to behave.

Check out more articles and videos

We constantly think of articles and videos that might spark Git people interest / skill us up or help building a stellar career

Scaling Up with Remix and Micro Frontends
Remix Conf Europe 2022Remix Conf Europe 2022
23 min
Scaling Up with Remix and Micro Frontends
Top Content
This talk discusses the usage of Microfrontends in Remix and introduces the Tiny Frontend library. Kazoo, a used car buying platform, follows a domain-driven design approach and encountered issues with granular slicing. Tiny Frontend aims to solve the slicing problem and promotes type safety and compatibility of shared dependencies. The speaker demonstrates how Tiny Frontend works with server-side rendering and how Remix can consume and update components without redeploying the app. The talk also explores the usage of micro frontends and the future support for Webpack Module Federation in Remix.
Understanding React’s Fiber Architecture
React Advanced 2022React Advanced 2022
29 min
Understanding React’s Fiber Architecture
Top Content
This Talk explores React's internal jargon, specifically fiber, which is an internal unit of work for rendering and committing. Fibers facilitate efficient updates to elements and play a crucial role in the reconciliation process. The work loop, complete work, and commit phase are essential steps in the rendering process. Understanding React's internals can help with optimizing code and pull request reviews. React 18 introduces the work loop sync and async functions for concurrent features and prioritization. Fiber brings benefits like async rendering and the ability to discard work-in-progress trees, improving user experience.
Thinking Like an Architect
Node Congress 2025Node Congress 2025
31 min
Thinking Like an Architect
Top Content
In modern software development, architecture is more than just selecting the right tech stack; it involves decision-making, trade-offs, and considering the context of the business and organization. Understanding the problem space and focusing on users' needs are essential. Architectural flexibility is key, adapting the level of granularity and choosing between different approaches. Holistic thinking, long-term vision, and domain understanding are crucial for making better decisions. Effective communication, inclusion, and documentation are core skills for architects. Democratizing communication, prioritizing value, and embracing adaptive architectures are key to success.
Full Stack Components
Remix Conf Europe 2022Remix Conf Europe 2022
37 min
Full Stack Components
Top Content
RemixConf EU discussed full stack components and their benefits, such as marrying the backend and UI in the same file. The talk demonstrated the implementation of a combo box with search functionality using Remix and the Downshift library. It also highlighted the ease of creating resource routes in Remix and the importance of code organization and maintainability in full stack components. The speaker expressed gratitude towards the audience and discussed the future of Remix, including its acquisition by Shopify and the potential for collaboration with Hydrogen.
The Eternal Sunshine of the Zero Build Pipeline
React Finland 2021React Finland 2021
36 min
The Eternal Sunshine of the Zero Build Pipeline
For many years, we have migrated all our devtools to Node.js for the sake of simplicity: a common language (JS/TS), a large ecosystem (NPM), and a powerful engine. In the meantime, we moved a lot of computation tasks to the client-side thanks to PWA and JavaScript Hegemony.
So we made Webapps for years, developing with awesome reactive frameworks and bundling a lot of dependencies. We progressively moved from our simplicity to complex apps toolchains. We've become the new Java-like ecosystem. It sucks.
It's 2021, we've got a lot of new technologies to sustain our Users eXperience. It's time to have a break and rethink our tools rather than going faster and faster in the same direction. It's time to redesign the Developer eXperience. It's time for a bundle-free dev environment. It's time to embrace a new frontend building philosophy, still with our lovely JavaScript.
Introducing Snowpack, Vite, Astro, and other Bare Modules tools concepts!
Composition vs Configuration: How to Build Flexible, Resilient and Future-proof Components
React Summit 2022React Summit 2022
17 min
Composition vs Configuration: How to Build Flexible, Resilient and Future-proof Components
Top Content
Today's Talk discusses building flexible, resilient, and future-proof React components using composition and configuration approaches. The composition approach allows for flexibility without excessive conditional logic by using multiple components and passing props. The context API can be used for variant styling, allowing for appropriate styling and class specification. Adding variants and icons is made easy by consuming the variant context. The composition and configuration approaches can be combined for the best of both worlds.

Workshops on related topic

AI on Demand: Serverless AI
DevOps.js Conf 2024DevOps.js Conf 2024
163 min
AI on Demand: Serverless AI
Top Content
Featured WorkshopFree
Nathan Disidore
Nathan Disidore
In this workshop, we discuss the merits of serverless architecture and how it can be applied to the AI space. We'll explore options around building serverless RAG applications for a more lambda-esque approach to AI. Next, we'll get hands on and build a sample CRUD app that allows you to store information and query it using an LLM with Workers AI, Vectorize, D1, and Cloudflare Workers.
High-performance Next.js
React Summit 2022React Summit 2022
50 min
High-performance Next.js
Workshop
Michele Riva
Michele Riva
Next.js is a compelling framework that makes many tasks effortless by providing many out-of-the-box solutions. But as soon as our app needs to scale, it is essential to maintain high performance without compromising maintenance and server costs. In this workshop, we will see how to analyze Next.js performances, resources usage, how to scale it, and how to make the right decisions while writing the application architecture.
Model Context Protocol (MCP) Deep Dive: 2-Hour Interactive Workshop
AI Coding SummitAI Coding Summit
86 min
Model Context Protocol (MCP) Deep Dive: 2-Hour Interactive Workshop
Workshop
Stepan Suvorov
Stepan Suvorov
Join a focused 2-hour session covering MCP's purpose, architecture, hands-on server implementation, and future directions. Designed for developers and system architects aiming to integrate contextual data with ML models effectively. Agenda:- Introduction & Why MCP? Key challenges MCP solves and core benefits.- Architecture Deep Dive: components, interactions, scalability principles. - Building Your Own MCP Server: guided walkthrough with code snippets and best practices; live demo or code review.- Future of MCP Developments: potential enhancements, emerging trends, real-world scenarios.
Key Takeaways:- Clear understanding of MCP's rationale.- Insight into design patterns and scaling considerations.- Practical steps to implement a prototype server.- Awareness of upcoming trends and how to apply MCP in projects.