Creating Macro Benefits from Micro Frontends
Questions
What is a Micro Frontend?
- architecture & design pattern “An architectural style where independently deliverable frontend applications are composed into a greater whole” - Martin Fowler Missing presentation layer of micro services
 - independent
 - small in scope
 - complete
 - designed to work along each other
 - kinda like power rangers
 - mindset
- often in the shadow of technical topics focused on intricate details of implementation
 - squads/teams/pods can focus on a value add for their customers/users e.g. team Search can focus entirely on “Finding the right product as fast as possible”
 - enables cross functional collaboration (diverse and inclusive teams can excel)
 - reduces friction between backend/frontend/design/product/ux/analytics/qa
 
 
Can we talk about Basecamp on how you are using that for project organization?
- took a lot of inspiration on ShapeUp for our internal process which we name sherpUp
 - we run a series of projects for 6 weeks, each project can take 2-6 weeks each with at least 2 team members
 - each team is, depending on the topic cross-functional and at least a designer + developer
 - tackle often e2e, if a new feature requires a change in our data model/api/frontend the team will take care of everything
 - teams are independent and enabled
 
- Do micro frontends speed up development time?
 
- Yes
 - advocate for incremental development through frequent deployments (~ 10 deployments per week) and close collaboration with partners
 - feature flagging
 - remote configuration
 - keep our tech stack and tooling consistent across all frontends
 
- Can you still utilize a design system?
 
- Yes, it becomes easier if everything is in a mono repo
 - currently in the process of migrating the various frontends we have into a monorepo using the nx workspace
 - Adapting Atomic Design (think in atoms, molecules and organisms)
 - Organisms often remain as part of individual apps but adhere to the design system
 - shared CSS classes + variables + mixins help quite a lot
 
- How does a typical architecture look for you?
 
- we provide a Javascript SDK that acts as an application shell and turns any website into a host
 - SDK or shell manages and maintains registered embedded elements (what we call micro frontends) that will be appended to the host DOM via iFrames
 - inter-application communication is created through a message bus via post messages
 - hosts are typically not in our control and our embedded elements need to be very flexible and adaptable to various environments e.g. devices/platforms and resolutions but also how much you can interact with each
 
- How does security play into Micro Frontends?
 
- we embrace embeddability through iFrames which provide a strict isolation especially in sandbox mode
 - important to limit functionality and content security policies
 - when using post messages to communicate between iFrames, checking for origin/destination and validating payloads is necessary
 - security teams might bring up concerns around click-jacking and end users not being able to distinguish or understand which part of the experience is part the host and which is ours ⇒ we visually indicate through “powered by sherpa°” and logo placements to provide clarity, nothing technical but very relevant
 
Links
- microfrontend-resources
 - Example of using the app
 - https://www.angulararchitects.io/en/
 - https://micro-frontends.org/
 - https://itnext.io/handling-data-with-web-components-9e7e4a452e6e
 - https://micro-frontends.zeef.com/elisabeth.engel?ref=elisabeth.engel&share=ee53d51a914b4951ae5c94ece97642fc
 - https://github.com/rajasegar/awesome-micro-frontendshttps://basecamp.com/shapeup