$customHeader
Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

The Open edX micro-frontend framework has some problems and growing pains which we’re trying to solve in a variety of ways. This is an attempt at cataloging those so we can understand which of them the frontend composability project (FC-0054) should be responsible for fixing, vs. things like the frontend plugin framework or improvements to Tutor, which are both arguably outside the scope of this work.

Potential Solutions

  • πŸ”Œ Plugin Framework

  • πŸŽ“ Tutor Improvements

  • πŸ₯— MFE Combining

  • 🧩 Piral

  • πŸ‘€ People Processes

  • 🏨 Multi-tenancy Support

Pains (with associated potential solution icons)

  • Consistency

    • πŸ₯—πŸ§© Reusable Component Consistency

      • MFEs will have different versions of Paragon, resulting in UI inconsistencies

    • πŸ₯—πŸ§© Shared Organism (header/footer/navigation) Consistency

      • MFEs will have different versions of shared components like the header and footer, resulting in navigation inconsistencies

    • πŸ₯—πŸ§© Branding/Styling Consistency

      • MFEs will have different versions of the brand and paragon, resulting in visual inconsistencies

    • πŸ‘€ User Experience Consistency

      • MFEs do not have a unified user experience, since they were all made at different times.

    • πŸ₯—πŸ§© Dependency Consistency

      • Inconsistent dependency versions between MFEs will have different capabilities and bugs.

    • πŸ‘€ Testing Standards Consistency

      • MFEs will have been written with different testing standards

    • πŸ₯—πŸ§© Technology Consistency

      • Different MFEs will sometimes use different libraries and paradigms, like redux, react-query, redux-saga, react context, font awesome, paragon icons, etc.

    • πŸ‘€ Documentation Consistency

      • MFEs will have been written with different documentation standards and levels of completion.

    • πŸ‘€ Deprecation Standards

      • We lack consistent application of DEPR standards and processes across MFEs.

  • Performance

    • πŸŽ“πŸ₯— Build time

      • Because each MFE bundles its own complete set of dependencies, and because there are so many, build time suffers.

    • πŸ₯—πŸ§© Bundle size

      • Because each MFE bundles its own complete set of dependencies, our bundle sizes are much larger than should be necessary.

    • πŸŽ“πŸ₯— Development Cycle Time

      • The tools we need to manage running so many MFEs slow down development for any given MFE. (i.e., in Tutor, making a change in one MFE means they all need to be rebuilt since they share an image)

  • Development

    • πŸ”ŒπŸ§©Decoupled Cross-MFE Composability

      • We have no good way displaying components from two MFEs (think domains) at the same time short of creating a hard-coded build-time dependency between the two.

    • πŸŽ“πŸ₯— Development Resource Consumption

      • Running so many development servers, one for each MFE, is very resource intensive.

    • πŸŽ“Library Development Complexity

      • Developing libraries means fooling an MFE into using local sibling code, which can be brittle.

    • πŸ₯—πŸ§© Dependency Maintenance Burden

      • Each MFE bundles its own version of all MFE dependencies, drastically increasing the number of dependencies we need to keep up-to-date overall.

    • Repository Proliferation

      • We rely on creating separate repositories frequently as a way of being flexible (separating deployments, custom libraries, overrides, etc.) which increases complexity for all the above roles.

    • πŸ‘€ Documentation Quality

      • A lack of complete documentation makes the platform more difficult to work with.

  • Customization

    • πŸ”Œ MFE Component Overrides

      • Overriding an MFE component is not supported

    • πŸ”Œ Limited Non-Invasive Customization

      • We have few ways of customizing MFEs short of forking them.

    • 🏨 Multi-tenancy Configuration

      • Configuring an instance to use different MFEs and brands per tenant is not supported.

  • Autonomy

    • πŸ”Œ Independent Deployment

  • No labels