On edX.org, we need to support a learner dashboard that includes some learning experiences (e.g. courses) that are available from other products, not hosted in the Open edX LMS learning experience. I’ll refer to these as “external learning experiences”, meaning “external to the Open edX LMS learning experience.”
Additionally, our team structure provides some additional context for our preferred architecture, because we’d want it to work with, and not against this team structure.
- LMS learning experience
- Studio (authoring of learning experience)
- Course discovery
- Enterprise features
- Learner identity
Borders on both teams:
- Learner dashboard (currently serviced by monolith)
- Credentials (monolith + credentials service)
Finally, note that the concept of “external learning experiences” only affects Marketplace functionality and the border functionality (e.g. learner dashboard, credentials).
Regarding the need to support external learning experiences in strictly Marketplace functionality, there will need to be separate posts to address this. It is less clear who in the community uses the various parts, and although this needs to be addressed, it is out of scope for the rest of this post.
This post will focus solely on the learner dashboard, because even within our own organization, it brings up interesting design questions. Adding in the rest of the community adds an additional twist.
Here are some architectural options for a future learner dashboard that can support external learning experiences:
Retain use of the existing Learner Dashboard MFE, only adding optional support for external learning experiences.
a. Option A: Have the MFE call a variety of services, directly requesting data from the external sources in addition to the monolith, and combining data on the frontend. Note: I’m making an assumption that a simple UX would require combined data, and would rule out frontend plugins for certain functionality.
b. Option B: Update the monolith’s backend apis that support the MFE to also support external learning experiences, or
c. Option C: Use a new backend service that supports external learning experiences.
Create a second unique Learner Dashboard MFE (External Edition).
a. For simplicity’s sake, I’ll assume that if we are separating out support for external learning services in a new MFE, we’d probably want to do the same with a new supporting backend service.
Are there better options?
One missing data point: would anyone in the community want similar support of external learning experiences from within the Open edX platform, and specifically for the Learner Dashboard experience?
As a maintainer of edx-platform, our beloved monolith, I have a preference for any solution that does not add support for external learning experiences to the monolith as part of supporting this dashboard. I’d prefer that the parts of the monolith supporting the learning experience remain purely focussed on LMS hosted learning experiences.
That said, the point of this post is to discuss and see what ultimately makes the most sense. Feel free to amend, or agree or disagree with anything I’ve posted, including any assumptions I’ve made.