Discovery: Courses Based on Atomic Learning Units

Goal or focus of the Discovery Initiative:

By re-architecting how the platform stores content and how it combines pieces of content together into larger learning experiences, we can unlock a number of learner and author experience improvements that have proved elusive to date:

  • Flexible content reuse, with tagging (use any XBlock or LTI component in libraries)

  • Fully integrated adaptive learning (true dynamic content)

  • Full-featured course previews

  • Template courses and runs (CCX-like functionality without limitations of CCX)

  • More flexible course experiences

  • Easier extension for developers via simpler APIs

Link to the discovery ticket or epic

and it relates to

(which is more LMS-focused)

Findings of the Discovery work

Technical discovery and planning will follow once we can agree on the ideal outcomes for the project - see below.

Call to action - What kind of feedback or input do you seek?

At this time we are seeking feedback on the high-level goals listed below.

  1. Are any of these goals unnecessary? Are some more important than others? If all of these were implemented, is there other functionality related to course content composition/reuse/structuring you would still wish to have?

  2. If we can only achieve a 3-4 of these goals, which are most important to you?

  3. Granularity of re-use. Do you need to be able to re-use chapters? units? Or just individual XBlocks or pairs of XBlocks? (In this case, “re-use” refers to being able to use something in multiple courses and when you update the “source” version, it will update in every course where it is used. It doesn’t refer to just being able to copy a chapter or unit into a new run/course.)

  4. To what extent are you interested in being able to share content across Open edX instances?



High level goals

  • Make content re-use easier

    • Tagging: As a content author, I want to create (or import) a bank of problems with metadata that makes them useful in a variety of courses.

      • Example: I want to import a bank of 5,000+ physics problems, tagged by topic and difficulty level. Then in a course that I'm authoring, for a homework assignment, I want to be able to randomly pull problems from the problem bank, filtered by topic and difficulty level.

    • Convenience: As a content author creating a course, I don't want to have to decide in advance if the content I'm creating is "re-usable" or not. I want to create it in the context where I'm working but later be able to re-use it.

      • Example: an existing course has a couple of chapters that I want to use in the new course I'm authoring. If I make edits to improve those chapters in the new course, I want the original course to benefit from those updates as well.

    • Bundling: Assets (image files, PDFs, videos) used by a particular learning component are stored with that component, not in a general "course files" area. That way, when I use the content in a new context, the assets/links aren't broken.

  • Make course re-use smarter

    • CCX-style: As an instructor, I want to make a copy of an existing reusable course, customize the outline (e.g. remove some sections), add a bit of custom content (e.g. introduction), then teach it. If improvements are made to the original template course while my course is running, I want to be able to pull in those updates.

      • Example: Campus and Davidson both had this use case

      • Alternative (simpler to implement): Derived courses can hide content from the “source” course but cannot add new content to it.

    • Enterprise: As a learning provider that targets enterprise customers, I want to take one of our popular courses and create a customized version of it for a particular enterprise customer. If improvements are made to the original template course while that customized course is running, I want to be able to pull in those updates.

    • Manageable: As a content author, I want to easily see what course instances are currently in use based on a given template course.

  • Pedagogical Flexibility

    • Mini courses: As a learning provider, I want to offer mini-courses that are smaller, simpler, and lighter than the current course experience. I don't want to be limited to the strict Sections, Subsections, Units hierarchy.

    • Paths: As a learning provider, I want to offer customizable programs that combine [regular or mini] courses together into programs/paths/certifications, and to combine those programs/paths into larger programs/degrees/certifications.

      • Example: complete at least four mini courses from this set and two from this other set to earn this certificate

      • Example: LabXchange

    • Adaptivity: As a course author, I want to integrate an external adaptive learning engine into my course that can customize what content each learner sees based on their learner profile, learning activity, and the available content. This may involve displaying output and UI components from the adaptive engine on some or all pages of the course.

    • Scriptable/Extendable: As a course author, I want a plugin or an external system to be able to control course behavior (what content individual users see, what notifications they get, how their grade is computed, etc.) using a standard API.

  • Backwards compatibility

    • Upgradability: As a course author, I want to be able to take advantage of these new features by upgrading my existing courses to support them, without having to re-create or re-work the course.

      • Alternative (simpler to implement): These new features are only available to newly-created courses.

  • Control

    • As an instructor I don't want a course to change without my knowledge and consent. When updated content is available I want to be notified and to approve the updates before my course instance is changed.

      • Alternative (simpler to implement): Updates always get applied immediately.

  • Content Flexibility

    • As a course author, I want to be able to install new learning component types without having to ask the Open edX instance administrator

      • Alternative (status quo): Only system administrators can install new XBlocks.

    • As a course author, I want to be able to use other content types besides XBlocks, such as LTI components or H5P components

    • As an Open edX developer, I want the system to support a new content API that is better sandboxed, runs asynchronously, and is more scalable.