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

open-edx-proposals/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst at 426f6e09ffe615e77aa9205281d77012385a08d4 · openedx/open-edx-proposals

Inconsistency between MFEs and the legacy codebase

R0002

 

OEP - Motivation

open-edx-proposals/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst at 426f6e09ffe615e77aa9205281d77012385a08d4 · openedx/open-edx-proposals

Inconsistency between the UIs of MFEs themselves (en vogue UI paradigms, no common headers/footers..)

R0003

 

OEP - Motivation

open-edx-proposals/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst at 426f6e09ffe615e77aa9205281d77012385a08d4 · openedx/open-edx-proposals

Regression in customizability

R0004

 

OEP - Motivation

open-edx-proposals/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst at 426f6e09ffe615e77aa9205281d77012385a08d4 · openedx/open-edx-proposals

Changes that affect multiple MFEs are costly (code duplication, webpack build time)

R0005

 

OEP - Motivation

open-edx-proposals/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst at 426f6e09ffe615e77aa9205281d77012385a08d4 · openedx/open-edx-proposals

Inefficient use of network bandwidth (No routing between MFEs, repeated dependencies being downloaded in webpack)

R0006

 

OEP - Motivation

open-edx-proposals/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst at 426f6e09ffe615e77aa9205281d77012385a08d4 · openedx/open-edx-proposals

Incosistent Documentation

R0007

 

OEP - Motivation

open-edx-proposals/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst at 426f6e09ffe615e77aa9205281d77012385a08d4 · openedx/open-edx-proposals

Inconsistency in deprecation efforts (versioning?)

R0008

 

OEP - Specification

https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#specification

Review top level architecture elements (Integration, SPAs, Shared Dependencies, MFE Component Architecture)

R0009

 

OEP - Specification

https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#specification

Review OEP in context of other Community efforts

R0010

 

OEP - Integration Strategy

https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#integration-strategy

Review 5 proposed solutions (javascript runtime, web comp runtime, Weback module Fed, single-spa, Piral)

R0011

 

OEP - Integration Strategy

https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#integration-strategy

Cost of Conversion

R0012

 

OEP - Integration Strategy

https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#integration-strategy

Cost of Integration (tradeoffs of proposed solution against independent MFEs)

R0013

 

OEP - Integration Strategy

https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#integration-strategy

Hosting of build artifacts (object storage, CDN)

R0014

 

OEP - Integration Strategy

https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#integration-strategy

Lazy Loading

R0015

 

OEP - Integration Strategy

https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#integration-strategy

Efficiency of Development

R0016

 

OEP - Integration Strategy

https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#integration-strategy

User impact

R0017

 

OEP - Integration Strategy

https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#integration-strategy

Maturity

R0018

 

OEP - Integration Strategy

https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#integration-strategy

Project Health

R0019

 

OEP - SPA

https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#domain-spas-and-their-interfaces

Domain Containers (SPAs) for LMS and CMS

R0020

 

OEP - Shared Dependencies

https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#shared-dependencies

Shared Dependencies (React, Paragon, React-router etc...)

R0021

 

OEP - MFE Component Arch

https://github.com/openedx/open-edx-proposals/blob/426f6e09ffe615e77aa9205281d77012385a08d4/oeps/architectural-decisions/oep-XXXX-modular-micro-frontend-domains.rst#mfes-as-components

MFE Components architecture (lifecyle, plugin interface, messaging, shared state etc...)

R0022

 

David

https://github.com/openedx/open-edx-proposals/pull/410/files#r1041418854

Reduced Bundle size of runtime

R0023

 

David

https://github.com/openedx/open-edx-proposals/pull/410/files#r1041418854

Page load performance

R0024

 

David

https://github.com/openedx/open-edx-proposals/pull/410/files#r1041418854

page UX and cross MFE navigation

R0025

 

David

https://github.com/openedx/open-edx-proposals/pull/410/files#r1041418854

consistency over flexibility (eg REACT version, Paragon version etc...)

R0026

 

David

https://github.com/openedx/open-edx-proposals/pull/410/files#r1041418854

Code Reuse

R0027

 

David

https://github.com/openedx/open-edx-proposals/pull/410/files#r1041418854

Documentation

R0028

R0021

Adam

https://github.com/openedx/open-edx-proposals/pull/410/files#r1020796342

MFE modularity and swapability

R0029

R0007

Adam

https://github.com/openedx/open-edx-proposals/pull/410/files#r1020796922

Versioning of MFEs and error handling due to Versioning

R0030

R0021

Adam

https://github.com/openedx/open-edx-proposals/pull/410/files#r1020794629

Can an MFE be server side rendered and still be compatible with the container arch.

R0031

R0015

Adam

https://github.com/openedx/open-edx-proposals/pull/410/files#r1019689488

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

https://github.com/openedx/open-edx-proposals/pull/410/files#r1020794246

developer workflow: will this result in GIT repo overload? Do MFE's live in a poly-repo? mono-repo per domain?

R0033

R0002

Adam

https://github.com/openedx/open-edx-proposals/pull/410/files#r1019684161

Gathering of global requirements for common UX elements like headers and footers

R0034

R0021

Adam

https://github.com/openedx/open-edx-proposals/pull/410/files#r1019698067

Dynamically loaded MFEs vs NPMs for shared UX and for selective loading of MFE's at runtime

R0035

R0019, R0021

Adam

https://github.com/openedx/open-edx-proposals/pull/410/files#r1019696132

Gobal state data such as authentication, authorization claims etc...

R0036

R0019, R0021

Adam

https://github.com/openedx/open-edx-proposals/pull/410/files#r1020794737

Events, PubSub, Callbacks Cross-MFE-messaging

R0037

R0007, R0019, R0021

Adam

https://github.com/openedx/open-edx-proposals/pull/410/files#r1019700784

Container / MFE Interface versioning and breaking changes

R0038

R0002, R0019, R0020, R0021

Adam

https://github.com/openedx/open-edx-proposals/pull/410/files#r1019701164

Enforce a consistent version of Paragon

R0039

R0019, R0021

Adam

https://github.com/openedx/open-edx-proposals/pull/410/files#r1026929915

Orchestration/bootstrapping/initialization of MFE. AppProvider.Provider.

R0040

R0003, R0019, R0020, R0021

Adam

https://github.com/openedx/open-edx-proposals/pull/410/files#r1020793201

How to handle deployment specific MFE's such as openEdx vs Edx Brands (previously done by NPM alias)

R0041

R0005, R0013, R0014

Adam

https://github.com/openedx/open-edx-proposals/pull/410/files#r1019677152

Lazy loading and codesplitting tradeoffs

R0042

R0021

Adam

https://github.com/openedx/open-edx-proposals/pull/410/files#r1019670774

What is an MFE

R0043

R0005

Brian

https://github.com/openedx/open-edx-proposals/pull/410/files#r1019646830

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)