Micro-Frontends Under The Microscope

A presentation at React Norway in June 2023 in Larvik, Norway by Trent Willis

Slide 1

Slide 1

Micro-Frontends Under The Microscope Trent Willis | Micro-Frontends React Norway

Slide 2

Slide 2

Last year, I was interviewing managers… Trent Willis | Micro-Frontends React Norway

Slide 3

Slide 3

“What trends do you see in web development?” Trent Willis | Micro-Frontends React Norway

Slide 4

Slide 4

Every single one mentioned micro-frontends as a trend to watch Trent Willis | Micro-Frontends React Norway

Slide 5

Slide 5

Why all the hype? Trent Willis | Micro-Frontends React Norway

Slide 6

Slide 6

Micro-Frontends promise to make building complex applications easier and your team more efficient Trent Willis | Micro-Frontends React Norway

Slide 7

Slide 7

Do they live up to that promise? Trent Willis | Micro-Frontends React Norway

Slide 8

Slide 8

Micro-Frontends Under The Microscope Trent Willis | Micro-Frontends React Norway

Slide 9

Slide 9

Trent Willis Staff Software Engineer, Netflix Worked on several micro-frontend apps of varying complexities and scale Trent Willis | Micro-Frontends React Norway

Slide 10

Slide 10

What are micro-frontends, really? Trent Willis | Micro-Frontends React Norway

Slide 11

Slide 11

“An architectural style where independently deliverable frontend applications are composed into a great whole.” - Cam Jackson, martinfowler.com Trent Willis | Micro-Frontends React Norway

Slide 12

Slide 12

“An architectural style where independently deliverable frontend applications are composed into a great whole.” - Cam Jackson, martinfowler.com “A design approach in which a front-end app is decomposed into individual, semiindependent “microapps” working loosely together.” - Bob Myers, Toptal “A type of architecture where a web application is divided into different modules or individual functions, implemented autonomously.” - Aplyca “An architectural and organizational style (NOT a specific technology!!!) in which the front-end of the app is decomposed into individual, loosely coupled “micro apps” that can be built, tested, and deployed independently.” - AltexSoft “An approach to building applications where the front-end is broken down into smaller, independent parts, each with its own user interface and functionality. These independent parts are then integrated to form a complete application.” Trent Willis | Micro-Frontends React Norway

Slide 13

Slide 13

architecture Trent Willis | Micro-Frontends composed independent React Norway

Slide 14

Slide 14

What does it mean for apps to be independent? Trent Willis | Micro-Frontends React Norway

Slide 15

Slide 15

“…scaling frontend development so that many teams can work simultaneously on a large and complex product is even harder…[microfrontends] can increase the effectiveness and efficiency of teams working on frontend code.” - Cam Jackson, martinfowler.com Trent Willis | Micro-Frontends React Norway

Slide 16

Slide 16

“…scaling frontend development so that many teams can work simultaneously on a large and complex product is even harder…[micro-frontends] can increase the effectiveness and efficiency of teams working on frontend code.” - Cam Jackson, martinfowler.com “[Micro-Frontends] are owned by independent teams. Each team has a distinct area of business or mission it cares about and specialises in.” - Michael Geers, micro-frontends.org “Its purpose is to eliminate the dependency between work teams, which slows down development and increases the complexity of the digital product.” - Aplyca “Using this type of architecture, the monolith team gets split to separate independent teams, which helps improve scalability, code complexity, etc., as each team works on a specific feature of the application separately.” - XenonStack “A microfrontend is made of components — owned by different teams — that can be deployed independently…no single team owns the UI in its entirety.” - Semaphore Trent Willis | Micro-Frontends React Norway

Slide 17

Slide 17

What does it mean for apps to be independent? They enable teams developing the apps to work independently Trent Willis | Micro-Frontends React Norway

Slide 18

Slide 18

What are micro-frontends, really? Any application architecture where an app is composed from sub-apps so that teams can work independently Trent Willis | Micro-Frontends React Norway

Slide 19

Slide 19

If your teams are not independent, micro-frontends are failing to deliver on their promises Trent Willis | Micro-Frontends React Norway

Slide 20

Slide 20

But, aren’t they just like microservices? Trent Willis | Micro-Frontends React Norway

Slide 21

Slide 21

No. Micro-Frontends are hyphenated. Microservices are not. Trent Willis | Micro-Frontends React Norway

Slide 22

Slide 22

They sound quite similar… Trent Willis | Micro-Frontends React Norway

Slide 23

Slide 23

An architectural style that structures an application as a collection of services that are: • • • • Independently deployable Loosely coupled Organized around business capabilities Owned by a small team Trent Willis | Micro-Frontends React Norway

Slide 24

Slide 24

There are 2 important differences Trent Willis | Micro-Frontends React Norway

Slide 25

Slide 25

Microservices do not share a runtime. Micro-Frontends do. Trent Willis | Micro-Frontends React Norway

Slide 26

Slide 26

“Isolate Team Code - Don’t share a runtime, even if all teams use the same framework. Build independent apps that are self contained. Don’t rely on shared state or global variables.” - Michael Geers, micro-frontends.org Trent Willis | Micro-Frontends React Norway

Slide 27

Slide 27

Sharing a runtime makes isolation and independence more difficult Trent Willis | Micro-Frontends React Norway

Slide 28

Slide 28

Microservices do not need to deliver a seamless user experience. Micro-Frontends do. Trent Willis | Micro-Frontends React Norway

Slide 29

Slide 29

Micro-Frontends have important differences from microservices that make it harder to be independent Trent Willis | Micro-Frontends React Norway

Slide 30

Slide 30

Micro-Frontends have important differences from microservices that make it harder to live up to the hype Trent Willis | Micro-Frontends React Norway

Slide 31

Slide 31

What happens in reality? Trent Willis | Micro-Frontends React Norway

Slide 32

Slide 32

First, you decide on a technology… Trent Willis | Micro-Frontends React Norway

Slide 33

Slide 33

What technology? • Webpack Module Federation • Emerging Frameworks (single-spa, qiankun, • • piral, luigi, etc.) Framework Specific (Ember Engines, etc.) Custom (Dynamic Imports, Iframes, etc.) Trent Willis | Micro-Frontends React Norway

Slide 34

Slide 34

What technology? • Webpack Module Federation • Emerging Frameworks (single-spa, qiankun, • • piral, luigi, etc.) Framework Specific (Ember Engines, etc.) Custom (Dynamic Imports, Iframes, etc.) Trent Willis | Micro-Frontends React Norway

Slide 35

Slide 35

There is no “standard” micro-frontends technology, yet Trent Willis | Micro-Frontends React Norway

Slide 36

Slide 36

Lack of standardization means lack of best practices Trent Willis | Micro-Frontends React Norway

Slide 37

Slide 37

The pioneer tax is still high today Trent Willis | Micro-Frontends React Norway

Slide 38

Slide 38

TypeScript Integration • How do you share types for the connection • points between micro-frontends? Not a problem if truly isolated, but most apps are not Trent Willis | Micro-Frontends React Norway

Slide 39

Slide 39

A “shared” (type definition) package can quickly become a monolithic dumping ground Trent Willis | Micro-Frontends React Norway

Slide 40

Slide 40

@module-federation/typescript Trent Willis | Micro-Frontends React Norway

Slide 41

Slide 41

Complex apps could benefit the most from micro-frontends, yet they are also the most likely to run into edge cases Trent Willis | Micro-Frontends React Norway

Slide 42

Slide 42

What repository strategy? • Separate repos (multirepo) vs. monorepo • A highly consequential decision we often make implicitly Trent Willis | Micro-Frontends React Norway

Slide 43

Slide 43

Monorepo Repo / App App App App Trent Willis | Micro-Frontends Repo / App Repo / App React Norway

Slide 44

Slide 44

Monorepo Shared Repo / App App App Shared Trent Willis | Micro-Frontends App Shared Repo / App Repo / App Shared React Norway

Slide 45

Slide 45

How much code do you intend to share between apps? Trent Willis | Micro-Frontends React Norway

Slide 46

Slide 46

Sharing code and micro-frontends both intend to make development more efficient, but together they can actually make it less efficient Trent Willis | Micro-Frontends React Norway

Slide 47

Slide 47

Monorepo • Less overhead to share Multirepo • More overhead to share • • • code Requires investment in tooling/processes to keep teams independent More likely for apps to be tightly coupled, but less slow down when that happens Trent Willis | Micro-Frontends • code Tools and processes for each repo are independent Less likely for apps to be tightly coupled, but more slow down when that happens React Norway

Slide 48

Slide 48

If you can’t have dedicated support for your architecture, you probably don’t need micro-frontends Trent Willis | Micro-Frontends React Norway

Slide 49

Slide 49

Each strategy has trade-offs. Choosing the wrong one may negate the intended benefits. Trent Willis | Micro-Frontends React Norway

Slide 50

Slide 50

Isolated Runtime Dependencies • Isolation leads to duplicate dependencies • Will multiple versions running side-by-side work? Trent Willis | Micro-Frontends React Norway

Slide 51

Slide 51

The browser has non-isolated state no matter how well your micro-frontends are isolated Trent Willis | Micro-Frontends React Norway

Slide 52

Slide 52

Shared Runtime Dependencies • How will you handle (major) versions? • Shared dependencies require coordinated upgrades Trent Willis | Micro-Frontends React Norway

Slide 53

Slide 53

Isolated dependencies = Duplication Shared dependencies = Coordination Trent Willis | Micro-Frontends React Norway

Slide 54

Slide 54

How do you divide up the app? • By route, by feature, by screen section? • How large/small are the divisions? • Will the divisions survive organizational change? Trent Willis | Micro-Frontends React Norway

Slide 55

Slide 55

Profile Trent Willis | Micro-Frontends Feed Settings React Norway

Slide 56

Slide 56

Profile Feed Settings Avatar Trent Willis | Micro-Frontends React Norway

Slide 57

Slide 57

Profile Feed Settings Avatar Trent Willis | Micro-Frontends React Norway

Slide 58

Slide 58

Post Summary Profile Settings Feed Avatar Trent Willis | Micro-Frontends React Norway

Slide 59

Slide 59

Post Summary Feed Settings Profile Feed Settings Avatar Trent Willis | Micro-Frontends React Norway

Slide 60

Slide 60

Deciding how to divide an app so that teams can operate independently while maintaining consistency is a hard problem Trent Willis | Micro-Frontends React Norway

Slide 61

Slide 61

No technical strategy/architecture will fix organizational dysfunction Trent Willis | Micro-Frontends React Norway

Slide 62

Slide 62

Handling troubleshooting • Which app is responsible for handling • uncaught errors? How does the correct team get notified about errors? Trent Willis | Micro-Frontends React Norway

Slide 63

Slide 63

Handling errors consistently and “near” where they occurred requires more than just error boundaries Trent Willis | Micro-Frontends React Norway

Slide 64

Slide 64

Dealing with optimization • Whose responsibility is it to monitor the • performance of the composed app? Who owns optimizing the app when things get slow? Trent Willis | Micro-Frontends React Norway

Slide 65

Slide 65

Separate builds and separate repos make it difficult to analyze performance characteristics holistically Trent Willis | Micro-Frontends React Norway

Slide 66

Slide 66

Every division in an app can add complexity Trent Willis | Micro-Frontends React Norway

Slide 67

Slide 67

Every decision in an app can add complexity Trent Willis | Micro-Frontends React Norway

Slide 68

Slide 68

Every decision in an app can add complexity, be intentional and consider the long-term impact Trent Willis | Micro-Frontends React Norway

Slide 69

Slide 69

So, do micro-frontends live up to the hype? Trent Willis | Micro-Frontends React Norway

Slide 70

Slide 70

They can with the right strategy Trent Willis | Micro-Frontends React Norway

Slide 71

Slide 71

Testing (especially end-to-end) Authentication & Authorization Privacy Availability & Resiliency Analytics Accessibility And more… Trent Willis | Micro-Frontends React Norway

Slide 72

Slide 72

We are still figuring out “best practices” for micro-frontends Trent Willis | Micro-Frontends React Norway

Slide 73

Slide 73

My recommendation… • Use Module Federation • In a monorepo • With as few divisions as possible • With as little shared code as possible • Supported by an infrastructure team Trent Willis | Micro-Frontends React Norway

Slide 74

Slide 74

Keep your goals in mind when solving problems Trent Willis | Micro-Frontends React Norway

Slide 75

Slide 75

Micro-Frontends promise to make building complex applications easier and your team more efficient Trent Willis | Micro-Frontends React Norway

Slide 76

Slide 76

Micro-Frontends can make building complex applications easier and your team more efficient Trent Willis | Micro-Frontends React Norway

Slide 77

Slide 77

Micro-Frontends can make building complex applications easier and your team more efficient but require thoughtful investment Trent Willis | Micro-Frontends React Norway