Micro Frontends - a Strive for fully Verticalized Systems

Micro Frontends - a Strive for fully Verticalized Systems

Voxxed Days Bucharest (Bucharest, Romania)

event: https://romania.voxxeddays.com/

E6c61f085d7aceaf97b7bd00e9195514?s=128

SQUER Solutions

March 22, 2019
Tweet

Transcript

  1. leitner.io - @duffleit micro frontends a strive for fully verticalized

    systems_ leitner.io - @duffleit Voxxed Days Bucharest
  2. leitner.io - @duffleit micro frontends just another buzzword_ leitner.io -

    @duffleit Voxxed Days Bucharest
  3. leitner.io - @duffleit David Leitner ▪ Technical Consultant for Senacor

    Technologies ▪ Lecturer for post diploma courses at UAS Technikum Vienna ▪ I do a couple of things around the tech- community I‘m writing code
  4. leitner.io - @duffleit A definition of micro frontends The idea

    of micro frontends is to extend the concepts of micro services to the frontend world.
  5. leitner.io - @duffleit Sam Newman: ▪ small and focused on

    one thing ▪ … to be autonomous ▪ That‘s it WHY we do them? Microservices * UBERHDTV - https://imgur.com/gallery/nup4lfX CVDD HDD/EDD *
  6. leitner.io - @duffleit why autonomous? ✅Independent deployments ✅Small interface surface

    ✅Technology agnostic ✅Based on standards ✅Autonomous operations ✅Parallel Development
  7. leitner.io - @duffleit „Microservices are stated as a contrast system

    to monoliths.“ Where they came from
  8. leitner.io - @duffleit the application the database Ball of Mud

    Brian Foote Joseph Yoder
  9. leitner.io - @duffleit database layer the database business layer frontend

    layer
  10. leitner.io - @duffleit database layer the database business layer frontend

    layer Change #rippleEffect
  11. leitner.io - @duffleit payment the database products user shipping

  12. leitner.io - @duffleit DB DB DB DB DB DB DB

    DB DB
  13. leitner.io - @duffleit DB DB DB DB DB DB DB

    DB DB Independent deployments Autonomous operations Technology agnostic Based on standards Parallel Development Small interface surface
  14. leitner.io - @duffleit

  15. leitner.io - @duffleit But wait, … our microservices have actual

    human users. - Stefan Tilkov
  16. leitner.io - @duffleit

  17. leitner.io - @duffleit the frontend

  18. leitner.io - @duffleit The frontend is … not an implementation

    detail, it is a critical part of a microservice architecture.
  19. leitner.io - @duffleit frontend platform backend platform Independent deployments Autonomous

    operations Technology agnostic Based on standards Parallel Development Small interface surface a frontend monolith was born a micro frontend TO THE RESCUE Independent deployments Autonomous operations Technology agnostic Based on standards Parallel Development Small interface surface
  20. leitner.io - @duffleit

  21. leitner.io - @duffleit an approach driven comparison of micro frontends

  22. leitner.io - @duffleit #1: Hyperlink Integration

  23. leitner.io - @duffleit Flavour #1: Hyperlink Integration frontend platform backend

    platform Catalogue Ordering Payment Shipping hyperlink hyperlink hyperlink
  24. leitner.io - @duffleit Flavour #1: Breaking service boundaries frontend platform

    backend platform Products Ordering Payment Shipping Dash board
  25. leitner.io - @duffleit Flavour #1: Backend for Frontend frontend platform

    backend platform Products Ordering Payment Shipping Dash board BFF BFF BFF BFF BFF samnewman.io/patterns/architectural/bff/
  26. leitner.io - @duffleit Flavour #1: Backend for Frontend frontend platform

    backend platform Products Ordering Payment GraphQL Shipping Dash board samnewman.io/patterns/architectural/bff/
  27. leitner.io - @duffleit Flavour #1: Hyperlink Integration Independent deployments Autonomous

    operations Technology agnostic Parallel Development
  28. leitner.io - @duffleit customers expect one company to have one

    website
  29. leitner.io - @duffleit Flavour #1: Reusage Problem frontend platform backend

    platform Catalogue Ordering Payment Shipping hyperlink hyperlink hyperlink Navigation Navigation Navigation
  30. leitner.io - @duffleit Consumers expect How it really looks Designers

    expect what…
  31. leitner.io - @duffleit Flavour #1: Hyperlink Integration Independent deployments Autonomous

    operations Technology agnostic Parallel Development A consistent UI/UX Smooth user interaction Fast loading
  32. leitner.io - @duffleit #2: Build Time Integration

  33. leitner.io - @duffleit Flavour #2: Build Time Integration

  34. leitner.io - @duffleit Flavour #2: Build Time Integration BUNDLED FRONTED

    UI-Shared-Stuff (e.g. SPA-Framework, Components, Routing) Mono Repo
  35. leitner.io - @duffleit MonoRepo Simplifies dependency management. Allows extensive code

    sharing and reuse. package.json Shared resources (assets, components…) repository
  36. leitner.io - @duffleit Flavour #2: Build Time Integration Independent deployments

    Autonomous operations Technology agnostic Parallel Development A consistent UI/UX Smooth user interaction Fast loading* BUNDLED FRONTED UI-Shared-Stuff (e.g. SPA-Framework, Components)
  37. leitner.io - @duffleit #3: Transclusion

  38. leitner.io - @duffleit Flavour #3: Transclusion BUNDLED FRONTED UI-Shared-Stuff (e.g.

    SPA-Framework, Components) The bundling is done by the webserver.
  39. leitner.io - @duffleit Flavour #3: Server Side Includes or Edge

    Side Includes <html> <body> <!--#include virtual="/products" --> <!--#include virtual="/payments" --> <!--#include virtual="/dashboard" --> <!--#include virtual="/shipping" --> </body> </html>
  40. leitner.io - @duffleit Flavour #3: Transclusion Independent deployments Autonomous operations

    Technology agnostic Parallel Development A consistent UI/UX Smooth user interaction Fast loading BUNDLED FRONTED UI-Shared-Stuff (e.g. SPA-Framework, Components)
  41. leitner.io - @duffleit #4: App Shell Integration

  42. leitner.io - @duffleit Flavour #4: App Shell Integration APP SHELL

    Header Footer The aggregation is done on the client.
  43. leitner.io - @duffleit Flavour #4: App Shell Integration Independent deployments

    Autonomous operations Technology agnostic Parallel Development A consistent UI/UX Smooth user interaction Fast loading APP SHELL Header Footer
  44. leitner.io - @duffleit #5: Metaframework

  45. leitner.io - @duffleit Flavour #5: Metaframework Route-based modularisation is handled

    by a Metaframework Metaframework /catalogue /checkout
  46. leitner.io - @duffleit • they are implemented with iframes. •

    or start using web components now. Flavour #5: Technology agnostic
  47. leitner.io - @duffleit Flavour #5: Metaframework Metaframework /catalogue /checkout Independent

    deployments Autonomous operations Technology agnostic Parallel Development A consistent UI/UX Smooth user interaction Fast loading
  48. leitner.io - @duffleit „a consistent UI“ 1) CDN – for

    static files 2) CMS – for static content 3) A Component Library
  49. leitner.io - @duffleit „a component library in code“ SPA-C SPA-B

    SPA-A component library Time Effort 2019 2020 2021 component library component library a promise that you will save time in the future by reusage. you introduce a dependency between your projects. copy & own
  50. leitner.io - @duffleit >> A little copying is better than

    a little dependency. Rob Pike
  51. leitner.io - @duffleit Low Fidelity High Fidelity Design Toolkits Design

    Specifications Source of truth Even if something has to look equal, it does not have to be technically the same. a design system != component library Component Libraries
  52. leitner.io - @duffleit „a component library“ If you really need

    a component library, then build it framework agnostic. If Angular can be ignored JSX + CSS Modules worked good for us. And, of course web components.
  53. leitner.io - @duffleit Flavour #5: Metaframework Metaframework /catalogue /checkout Independent

    deployments Autonomous operations Technology agnostic Parallel Development A consistent UI/UX Smooth user interaction Fast loading
  54. leitner.io - @duffleit https://codeburst.io/building-efficient-components-6ee2bdaea542 the metaframework will be the framework

  55. leitner.io - @duffleit Summarize Approaches Hyperlink Integration /catalogue /checkout Metaframework

    Modularization APP SHELL Header Footer App Shell Integration
  56. leitner.io - @duffleit Summarize Approaches /catalogue /checkout APP SHELL Header

    Footer Hyperlink Integration App Shell Integration Metaframework Integration Time Frontend Backend Build Transclusion Build-Time Integration Modularization
  57. leitner.io - @duffleit every consultant. always. it depends

  58. leitner.io - @duffleit A general decision advice Your application is

    big?* The need for smooth user interaction Build Time Integration Hyperlink Integration Strongly Independent UI/Domain Parts Complex modularisation needed Transclusion App Shell Integration Meta- Framework * an application is big enough to justify using micro frontends, if slight UI/UX differences between the two most unrelated subpages are acceptable. Yes No
  59. leitner.io - @duffleit Compose your perfect MIX Landing Shop Ordering

    hyperlink hyperlink APP SHELL Header Footer <!–- SSIs --> <!--#include … --> <!--#include … -->
  60. leitner.io - @duffleit Key-Takeaways „Think twice if a frontend monolith

    does not fit your needs and start with a monolith first approach.“
  61. leitner.io - @duffleit Key-Takeaways „the 8 fallacies of distributed computing

    are called fallacies for a reason“
  62. leitner.io - @duffleit Key-Takeaways „Consider the frontend as part of

    your microservice architecture – and solve UI specific problems with UI specific solutions.“
  63. leitner.io - @duffleit Use the right tool for the right

    job. @duffleit
  64. leitner.io - @duffleit David Leitner ▪ Non-Hype-Train-Activist ▪ I’m writing

    code