FC-0007 - Gathered Requirements
The following table summarizes the list of requirements gathered from the OEP, comments there in, as well as conversation and meetings with stakeholders.
ID | Related to... | Source |
| Requirement/Feature/Problem |
R0001 |
| OEP - Motivation | https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#motivation | Inconsistency between MFEs and the legacy codebase |
R0002 |
| OEP - Motivation | https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#motivation | Inconsistency between the UIs of MFEs themselves (en vogue UI paradigms, no common headers/footers..) |
R0003 |
| OEP - Motivation | https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#motivation | Regression in customizability |
R0004 |
| OEP - Motivation |
| Changes that affect multiple MFEs are costly (code duplication, webpack build time) |
R0005 |
| OEP - Motivation |
| Inefficient use of network bandwidth (No routing between MFEs, repeated dependencies being downloaded in webpack) |
R0006 |
| OEP - Motivation |
| Incosistent Documentation |
R0007 |
| OEP - Motivation |
| Inconsistency in deprecation efforts (versioning?) |
R0008 |
| OEP - Specification |
| Review top level architecture elements (Integration, SPAs, Shared Dependencies, MFE Component Architecture) |
R0009 |
| OEP - Specification |
| Review OEP in context of other Community efforts |
R0010 |
| OEP - Integration Strategy |
| Review 5 proposed solutions (javascript runtime, web comp runtime, Weback module Fed, single-spa, Piral) |
R0011 |
| OEP - Integration Strategy |
| Cost of Conversion |
R0012 |
| OEP - Integration Strategy |
| Cost of Integration (tradeoffs of proposed solution against independent MFEs) |
R0013 |
| OEP - Integration Strategy |
| Hosting of build artifacts (object storage, CDN) |
R0014 |
| OEP - Integration Strategy |
| Lazy Loading |
R0015 |
| OEP - Integration Strategy |
| Efficiency of Development |
R0016 |
| OEP - Integration Strategy |
| User impact |
R0017 |
| OEP - Integration Strategy |
| Maturity |
R0018 |
| OEP - Integration Strategy |
| Project Health |
R0019 |
| OEP - SPA |
| Domain Containers (SPAs) for LMS and CMS |
R0020 |
| OEP - Shared Dependencies |
| Shared Dependencies (React, Paragon, React-router etc...) |
R0021 |
| OEP - MFE Component Arch |
| MFE Components architecture (lifecyle, plugin interface, messaging, shared state etc...) |
R0022 |
| David |
| Reduced Bundle size of runtime |
R0023 |
| David |
| Page load performance |
R0024 |
| David |
| page UX and cross MFE navigation |
R0025 |
| David |
| consistency over flexibility (eg REACT version, Paragon version etc...) |
R0026 |
| David |
| Code Reuse |
R0027 |
| David |
| Documentation |
R0028 | R0021 | Adam |
| MFE modularity and swapability |
R0029 | R0007 | Adam |
| Versioning of MFEs and error handling due to Versioning |
R0030 | R0021 | Adam |
| Can an MFE be server side rendered and still be compatible with the container arch. |
R0031 | R0015 | Adam |
| changes to devstack when developing on individual MFE's. How are other MFE's and containers loaded? Via npm or via source? |
R0032 | R0015 | Adam |
| developer workflow: will this result in GIT repo overload? Do MFE's live in a poly-repo? mono-repo per domain? |
R0033 | R0002 | Adam |
| Gathering of global requirements for common UX elements like headers and footers |
R0034 | R0021 | Adam |
| Dynamically loaded MFEs vs NPMs for shared UX and for selective loading of MFE's at runtime |
R0035 | R0019, R0021 | Adam |
| Gobal state data such as authentication, authorization claims etc... |
R0036 | R0019, R0021 | Adam |
| Events, PubSub, Callbacks Cross-MFE-messaging |
R0037 | R0007, R0019, R0021 | Adam |
| Container / MFE Interface versioning and breaking changes |
R0038 | R0002, R0019, R0020, R0021 | Adam |
| Enforce a consistent version of Paragon |
R0039 | R0019, R0021 | Adam |
| Orchestration/bootstrapping/initialization of MFE. AppProvider.Provider. |
R0040 | R0003, R0019, R0020, R0021 | Adam |
| How to handle deployment specific MFE's such as openEdx vs Edx Brands (previously done by NPM alias) |
R0041 | R0005, R0013, R0014 | Adam |
| Lazy loading and codesplitting tradeoffs |
R0042 | R0021 | Adam |
| What is an MFE |
R0043 | R0005 | Brian |
| Container routing to MFE entry points and MFE internal routing |
R0044 | R0010, R0019, R0020, R0021 | Adolfo | Google Meet | MFE should be able to run independently from the stack, for development purposes |
R0045 |
| Adolfo | Google Meet | Infrastructure Creep (Piral Registry) |