Artigo

11 de Junho de 2025 | FRT Digital

Micro-frontends — Escalando Times de Desenvolvimento com Autonomia

Quando a arquitetura de micro-frontends faz sentido, como implementá-la e quais armadilhas evitar

Leia mais

Quando a arquitetura de micro-frontends faz sentido, como implementá-la e quais armadilhas evitar

11 de Junho de 2025 | FRT Digital

Micro-frontends aplicam ao front-end os mesmos princípios que microsserviços aplicaram ao back-end: decomposição por domínio de negócio, autonomia de times e deploy independente. Como qualquer decisão arquitetural significativa, traz benefícios reais em contextos específicos e complexidade injustificada em outros. Este artigo examina os fundamentos técnicos, os padrões de implementação mais maduros e os critérios para decidir se essa arquitetura faz sentido para seu produto.

O problema que micro-frontends resolve

Em organizações com múltiplos times trabalhando no mesmo front-end, o monólito de UI se torna um gargalo. Times precisam coordenar releases, conflitos de merge são frequentes, e uma mudança em uma área pode causar regressões em outra. O ciclo de deploy fica tão arriscado que os times tendem a agrupar releases, aumentando o lote e o risco de cada deploy.

Micro-frontends resolve esse problema permitindo que cada time publique sua parte da aplicação de forma independente, sem coordenação com outros times. Um time responsável pelo checkout pode fazer deploy às 14h sem esperar que o time de catálogo finalize sua feature.

Padrões de implementação

Existem quatro abordagens principais para compor micro-frontends:

Composição no servidor (SSR): Cada micro-frontend é renderizado por seu próprio servidor, e um serviço de composição (ou o servidor principal) inclui os fragmentos no HTML final. É a abordagem mais antiga (usada por empresas como Zalando e IKEA há anos) e oferece excelente performance de first-load. A desvantagem é a complexidade operacional: cada micro-frontend precisa de seu próprio servidor de renderização.

Composição em build time: Os micro-frontends são publicados como pacotes npm e compostos em um shell durante o build. É simples de implementar mas elimina o deploy independente — qualquer mudança exige rebuild do shell.

Composição em runtime via iframes: Cada micro-frontend vive em um iframe isolado. Oferece isolamento perfeito (CSS, JavaScript, estado) mas torna a comunicação entre micro-frontends complexa e prejudica a experiência do usuário (scroll, foco, tamanho dinâmico).

Module Federation (Webpack/Rspack): Atualmente o padrão mais adotado para composição em runtime sem iframes. Permite que um bundle JavaScript exponha módulos que outro bundle carrega dinamicamente em tempo de execução. O shell carrega apenas o código necessário para o bootstrap, e cada micro-frontend é carregado sob demanda.

Module Federation em profundidade

Module Federation, introduzido no Webpack 5 e agora disponível no Rspack (implementação mais rápida em Rust), funciona através de dois conceitos centrais: host (a aplicação que consome módulos remotos) e remote (a aplicação que expõe módulos).

A configuração no webpack do remote expõe componentes ou rotas completas. O host os declara como dependências remotas e as importa como se fossem módulos locais. O Webpack resolve esses imports em runtime, fazendo download do bundle do remote apenas quando necessário.

Um desafio crítico é o gerenciamento de dependências compartilhadas. Se o host e cada remote carregarem sua própria cópia do React, o usuário baixa React N vezes. Module Federation resolve isso com o mecanismo `shared`: você declara quais pacotes são compartilhados e o Webpack garante que apenas uma versão seja carregada, com fallback para versão local caso as versões sejam incompatíveis.

Design e experiência do usuário distribuídos

Um risco frequentemente subestimado em micro-frontends é a fragmentação da experiência do usuário. Se cada time tem autonomia total sobre seu micro-frontend, a interface pode se tornar visualmente inconsistente — botões com estilos diferentes, espaçamentos divergentes, comportamentos de loading incompatíveis.

A solução é o design system como camada compartilhada. O design system é o único artefato que os times não têm autonomia para ignorar — ele é a garantia de coerência visual mesmo com times e deploys independentes. Isso reforça a importância de investir em um design system sólido antes ou paralelamente à adoção de micro-frontends.

Comunicação entre micro-frontends

Micro-frontends devem ser o mais independentes possível, mas às vezes precisam se comunicar. Os padrões mais confiáveis são:

Custom Events do browser: Um micro-frontend dispara um `CustomEvent` no `window`, outro escuta. É simples, nativo e não cria acoplamento entre os bundles.

Props e callbacks via shell: O shell passa dados e callbacks para os micro-frontends como props. Funciona bem para dados que o shell naturalmente possui (dados do usuário autenticado, idioma selecionado, configurações globais).

Estado compartilhado via URL: Rota, query params e hash são o mecanismo de estado mais universal e robusto. Micro-frontends que precisam compartilhar estado frequentemente podem fazê-lo através da URL sem nenhuma dependência direta.

Quando não usar micro-frontends

Micro-frontends adicionam complexidade operacional significativa. Você passa a gerenciar múltiplos pipelines de CI/CD, múltiplos projetos npm, e uma estratégia de compatibilidade de versões entre os remotes.

Se o produto é desenvolvido por um time único ou pequeno, se o front-end é relativamente simples, ou se a organização ainda está no início e a velocidade de iteração é prioritária, micro-frontends são overengineering. Comece com um monólito bem estruturado e modular — a migração para micro-frontends é mais fácil quando existe uma base de código madura com domínios bem delimitados do que quando começa do zero com infraestrutura distribuída.

A decisão pela arquitetura de micro-frontends deve ser guiada pelo tamanho e estrutura da organização, não pela sofisticação técnica da solução.

Artigo

Micro-frontends — Escalando Times de Desenvolvimento com Autonomia

11 de Junho de 2025 | FRT Digital

Leia também

Artigo

UX Research Aplicado — Da Entrevista ao Design Decision

21 de Maio de 2025

UX Research Aplicado — Da Entrevista ao Design Decision
Ler

Blog

Gostou? Então leia mais sobre o assunto: