Decoupling 50+ Insurance Applications Seamlessly
How I architected and implemented a distributed Microfrontend strategy at VIG that enabled 50+ applications to operate independently while maintaining a seamless single-application experience for users.

Fun Fact
I was the only speaker at this conference presenting on microfrontends. Engineers flew in from across Europe specifically to attend this session and learn directly from me about implementing this architecture in their own organizations.
Conference Presentation
In large-scale enterprise environments, the move to microservices on the backend often leaves the frontend as a monolithic bottleneck. At VIG, a major insurance group, I broke down the architectural strategy to transition from a monolithic frontend to a distributed Microfrontend architecture spanning 50+ applications. The core insight: standard component sharing through NPM libraries is insufficient for enterprise scale because it tightly couples release cycles. My solution focused on Runtime Integration using Module Federation, enabling teams to deploy features independently while maintaining a seamless, single-application feel for users.
The Landscape: When "Big" Becomes "Too Big"
In the insurance industry, complexity is the default state. This was not about building a simple brochure site; it was about architecting an ecosystem. In the context of Project Neuron, the environment consisted of distinct business domains—Policy Management, Claims, Partners, Billing—resulting in over 50 different applications.
Historically, the industry moved through distinct phases: 1) The Monolith with server-side rendering where the backend generated everything (stable, but slow to change), 2) The Split with adoption of microservices to decouple the backend, and finally 3) The Bottleneck where while the backend became agile, the frontend remained a "Thick Client" monolith.
The Pain Point: I observed a critical synchronization conflict. Agile backend teams were shipping microservices daily, yet they were blocked by a singular, massive frontend application. Alternatively, the organization suffered from siloed applications that forced users to constantly jump between tabs, destroying productivity.
The architecture required a shift that honored Domain Driven Design (DDD) on the client side, ensuring high cohesion within domains and loose coupling between them.
The Evolution of Integration: A Search for the Solution
To solve the "50+ apps" problem, I led the evaluation of four distinct integration patterns. This strategic reasoning drove the eventual architectural choice.
Domain Hopping (The Hyperlink Method): The simplest approach linking users between applications. The issue: Context loss—users filling out complex insurance forms would lose their draft state when clicking to another app. My verdict: Feasible only for completely disjointed workflows (approximately 10% of use cases), insufficient for a core enterprise platform.
API Integration: Domain A calls the API of Domain B and builds the UI itself. The issue: Duplication and fragility—Domain A was forced to rebuild the UI for Partner data, and if Domain B changed their structure, Domain A broke. My verdict: Acceptable for raw data, but unsustainable for UI consistency and long-term maintenance.
Build-Time Component Sharing (NPM/Libraries): Domain B publishes a component as a library that Domain A installs. The issue: "Version Hell"—if Domain B fixed a critical bug, Domain A would not receive it until they bumped the version, rebuilt, and redeployed their entire application. In an enterprise with rigid release cycles, this latency was unacceptable. My verdict: Solves UI consistency but fails to deliver deployment independence.
Runtime Microfrontends: The breakthrough. The architecture demanded a method to embed Domain B functionality into Domain A without forcing Domain A to rebuild. I directed the implementation of Webpack Module Federation, where a Microfrontend is a runtime artifact—Domain A downloads the component code from Domain B when the user opens the browser. Result: Domain B deploys a fix, and the next time a user logs into Domain A, they see the fix instantly with zero rebuilds required.
Architecture Design: The "Project Neuron" Implementation
Implementing raw Module Federation was not enough; I had to establish a governance framework around it. In an environment with 50+ apps, an architectural "wild west" is a recipe for disaster.
The Framework Layer: I designed a shell architecture (the Host) and defined strict contracts for the remotes (the Microfrontends). To ensure a Microfrontend from the Claims domain looked native inside the Policy domain, I enforced a shared design system token strategy.
The architecture I designed supports both: Visual MFE (purely for display, like a "Partner Card") and Thick MFE (self-contained state, validation, and business logic like a "Create Relationship" wizard) that talks directly to its own backend microservices.
Bi-directional Integration: We achieved Policy → Partner with a PartnerSearch microfrontend embedded inside the Policy management screen, and Partner → Policy with the Partner domain exposing a slot where the Policy domain injects a PolicyAssignment microfrontend.
Seamless Experience: To the user, this appears as one seamless application. Under the hood, two different teams deploy these parts completely independently based on the boundaries I defined.
Real-World Use Case: Policy & Partners Integration
The bi-directional integration between Policy and Partner domains demonstrated the power of this architecture. Inside the Policy management screen, users could search for partners without ever knowing they were using functionality built and deployed by an entirely different team.
Conversely, when viewing partner details, users could assign policies through an interface that was actually maintained by the Policy team. This seamless integration meant users never experienced context switching or data loss.
Each domain team could deploy updates to their microfrontends independently. A bug fix or new feature in the Partner search could go live immediately without requiring the Policy team to rebuild or redeploy their application.
This independence accelerated delivery velocity across all teams while maintaining a cohesive user experience that felt like a single, well-integrated application.
Security & Governance
With great power comes great responsibility. I addressed the security implications of loading external code at runtime through specific protocols.
Style Isolation: While operating on a high-trust model within the organization, I ensured styles were sandboxed to prevent CSS leakage using scoped CSS or Shadow DOM where necessary.
Performance Optimization: The architecture utilizes the Module Federation shared scope to prevent the user from downloading duplicate dependencies (like React core), optimizing performance significantly.
Contract Governance: I treated Microfrontends as public APIs—breaking changes to input/output contracts are strictly governed. Each microfrontend exposes a clear interface contract that consuming applications can rely on.
Versioning Strategy: Versioning strategies were established to allow gradual migration when breaking changes were absolutely necessary, ensuring no host application was left in a broken state.
Lessons Learned & Key Takeaways
Don't micro-optimize too early: Do not split your app into microfrontends just for the sake of it. If a Monolith suffices, use it. I use MFE as a solution for organizational scaling problems, not just technical ones.
Inputs/Outputs must be minimal: If you are passing huge objects and complex state between the Host and the Microfrontend, the coupling is too tight. I always advise keeping the interface narrow (IDs, simple events).
The Framework is Mandatory: You need a "Glue" layer. Without a unified strategy for routing, authentication, and theming, the application will become a fragmented user experience.
SEO & SSR: In this specific enterprise context, SEO was not a priority. However, for public-facing web applications, I would recommend integrating Server Side Rendering (SSR) for Microfrontends, despite the added complexity.
Team boundaries must align with domain boundaries: The success of this architecture relied heavily on having clear domain ownership. Each microfrontend belonged to exactly one team.
Visual Context

Illustration of domain partner integration with domain policy via microfrontends - Emphasize collaboration and seamless interaction between domains

Illustration of domain policy with microfrontend partner domain integration - Emphasize cross-domain communication and user journey
Conclusion
The transition from Monolithic architectures to Microfrontends is not an evolution; it is a paradigm shift in how we view the browser. My approach moves organizations toward Thick Clients where the browser performs heavy lifting, and the application is composed of distributed, independently deployable features. For Project Neuron, this strategy successfully broke down the walls between 50+ applications, allowing users to complete complex workflows without ever realizing they were crossing domain boundaries. The result was a system that scaled technically and organizationally while maintaining user experience excellence.
Key Takeaways
- Runtime integration via Module Federation enables true deployment independence
- Microfrontends solve organizational scaling problems, not just technical ones
- Keep interfaces minimal—pass IDs and simple events, not complex objects
- A unified "glue" layer is mandatory for routing, auth, and theming
- Treat microfrontends as public APIs with strict contract governance
- Sandbox styles to prevent CSS leakage between domains
- Use shared scopes to prevent duplicate dependency downloads
- Align team boundaries with domain boundaries for clear ownership
- Not all applications need microfrontends—use them when organization demands it

About the Author
Vojtech Gintner - CTO @ Finviz
"Turning Engineering Chaos into Business Value"
Real-world leadership, not just theory. As the active CTO of Finviz, I don't just advise on strategy—I execute it daily. I navigate the same market shifts, technical bottlenecks, and leadership challenges that you do.
With 20 years of hands-on engineering experience (from React/Node to distributed infrastructure), I specialize in turning chaotic software organizations into scalable, high-performing assets. I bridge the gap between business goals and technical reality—speaking the language of your board and your developers.
Interested in similar results for your organization?
Let's discuss how I can help your engineering team overcome challenges and achieve ambitious goals.
Get in Touch