Overview
It’s critical to arrive at a unified understanding of the purpose and function of Content Libraries, because Content Libraries intersect multiple short- and medium-term projects, many of which are key strategic investments for the platform, including content reuse, content modularity, and content sharing. The purpose of this Product Requirement Document is to outline the high-level requirements that Content Libraries will need in order to support these major initiatives. This document builds on the functionality that will be included in the upcoming release (October 2023) of Content Libraries V2, and will inform how we plan to deliver incremental value with Content Libraries over the next 18-24 months.
Current State: What’s included in Content Libraries V2?
Authors can create component xblocks in Libraries, independently of the course authoring environment, including text blocks, video blocks and problem blocks. The V2 interface will include the new text, video and problem Editor Interfaces that are already live in the course authoring environment.
Authors can reuse components that they create in Libraries in any course, as many times as they want to, by selecting Library content from the Unit Editor page.
Authors can choose whether to randomize problems from a Library, or use any component type from a Library as static content.
Authors can update Library content in the Library and push out updates to courses using the content. Course teams can make the decision to accept or reject updates.
Authors can do library->library import/export, so that users who have multiple instances of openedx can move content across instances.
All former V1 Content Libraries will be auto-migrated to the new V2 Library environment.
Possible limitations of the V2 release:
While a Library can be used for either block type - reference or random - there won’t be an easy way to group a subset of content within a library for randomization. So authors will still need to create a stand-alone library for each use of the randomized content block.
The reference block and the randomized content block will be implemented as separate blocks. So authors will need to choose which block to use, depending on whether they want to use content from a library statically or dynamically.
What’s the plan for Content Libraries after the V2 launch?
While the V2 launch moves Content Libraries closer toward supporting more robust content reuse and modularity use cases, there are still many feature enhancements needed to bring Content Libraries to their full potential. Content Libraries intersect the following use cases around content reuse and modularity at the junction of: Where the content needed for these initiatives is created, organized, accessed, managed and stored. Thus, additional features and enhancements will be needed to make Content Libraries more robust and functional spaces for creating, organizing and managing large and diverse types of course content for reuse and modular delivery.
Community Use Cases
Community use cases for content reuse and modularity that will rely on Content Libraries:
Harvard Medical School has a catalog of dozens of courses. They want to be able to modularize their catalog by extracting lessons from their courses (where lesson = section) and delivering them independently. They also want to create custom learning pathways by remixing sections from different courses. They need a place to store, organize and manage the extracted sections and new learning pathways. [Note: the delivery environment of new learning contexts/presentations is out of scope for this Content Libraries document.]
Western Governors University is taking a different approach to their general education requirements. They are breaking down their catalog of gen ed courses into competencies (where competency = section). Advisors will be able to custom select which competencies a student needs in order to meet their gen ed requirements. They need a place to create, organize and manage these competencies independently of the courses. They want to be able to create a competency as a stand-alone entity, in an authoring environment that is independent from the course. They may also want to extract sections from previously existing courses and be able to manage each section as an independent entity. They also need to be able to tag sections with competency metadata. [Note: the delivery environment of new learning contexts/presentations is out of scope for this Content Libraries document.]
Western Governors University wants easier ways for authors to customize course content for different audiences by substituting specific pieces of content (a problem, a unit, a section) to effectively create two versions of a course. For example, a course may have a unit on design thinking. The content within that unit was created for a business course. The IT college wants to use the same course, but swap out the unit for a different one that has content catered to the IT audience. Authors want to build a library with various iterations of the units that can be used and reused in different courses. [Note: an adjacent feature to copy a course run and remix is out of scope for this Content Libraries document.]
MITx has a similar use case, where they want to iterate on the same course for two different audiences, such that audience 1 can take V1 of the course and audience 2 can take V2 of the course, and the courses are the same except for one section, or a few units. They need a place to create, store and manage the swappable course components. [Note: an adjacent feature to copy a course run and remix is out of scope for this Content Libraries document.]
MRI Online wants to create dozens or hundreds of case studies (where case study = unit) that can be offered to administrators in a catalog and administrators can pre-select which case studies will be offered to learners. Case studies can be stacked to count to CME credits. They need an authoring environment to create these units, and to manage them. They also need to be able to add tags from learning taxonomies to the units.
The Spanish Consortium wants to be able to reuse sections of courses. “This section is good for another course that I am teaching and I want to reuse it in that other course and I don’t want to recreate it from scratch.”
Penn State wants to be able to create a library of evergreen course lessons (where lesson = section) that they can use over and over without needing to rebuild it each time.
Penn State wants to be able to create libraries of course lessons (where lesson = section) that can be offered as stand-alone credits. [Note: the delivery environment of new learning contexts/presentations is out of scope for this Content Libraries document.]
MITx wants better ways to organize content in their libraries, to make it easier to find content.
Western Governors University is looking for ways to create modularized content at scale, more quickly and efficiently. They want authors to be able to create content templates at the unit level that can be copied and quickly populated with component xblocks.
User Stories
The above use cases can be distilled into the following high-level user stories for Content Libraries:
As a content author:
I want to create a unit or a section independently from the course, so that I can reuse the unit or section in many different courses, [or future state: deliver it as a stand-alone learning objective, or sequence it into a custom learning pathway.]
I want to be able to extract units or sections from courses that already exist and put them into a Library for reuse later. I may want to do this with individual units or sections, or pull all the sections from a course into a library.
I want to be able to reuse any content that I create in a Library - whether a component xblock, a unit or a section - in any course, as many times as I want to.
I want to be able to update Library content in the Library and push out updates to courses using the content. Course teams can make the decision to accept or reject updates.
I want to be able to search and find units, sections, components and any other content in my Library easily with tools like keyword searches, sorts and filters.
I want to be able to add tags to content in my Libraries, so that I can align my content to learning competencies, or subjects, or skills. This will help me to find the right content for reuse later.
When I am ready to use content from my Library in a course, I want an easy way to search the content in my library while I’m in the course authoring environment.
I want to be able to organize or categorize content in my library, maybe into playlists, or into folders, or by tags, so that I can easily find what I need later.
I want to be able to create a template for a unit or a section, then copy that template and quickly populate it with the right component content.
Features and Requirements
(Epic level, need further refinement and incremental delivery planning)
Feature | Requirements |
More robust authoring environment in Content Libraries |
|
Enhancements to the randomization tool | |
UX/UI enhancements |
|
Enhancements to Library Reference block/content selection tool in courses |
|
Expand content syncing options to units and sections |
|
Export from course to library |
|
Expand content tagging feature to all content in a Library |
|
Using tags to create subsets of content to randomize |
|
Better content management tools |
|
Search function |
|
Content templates feature |
|
At-a-glance information about library-course relationship |
|
Open Product Questions
What’s the strategy for Files & Uploads? Do course-level files and uploads continue to live at the course level, or do we leverage Content Libraries as the home for them? This could enable authors to easily reuse external content across many courses and to take advantage of the content organization tools available in Libraries to manage their external content.
When the Content Tagging MVP launches and authors have the ability to add tags to components in Libraries, what additional enhancements do we need to add to make it possible for authors to group subsets of components in a Library by tag to use with the randomized content block?
Open Process Questions
How can we leverage the V2 release to create user feedback mechanisms that can inform how we prioritize from the above list of user stories and Features & Requirements? And to identify gaps or incorrect assumptions in the V2 functionality?
How do we pull edX partner voices into the mix to check where their expectations for Content Libraries may or may not align?
Open Technical Questions
In terms of implementation: should this be built on Blockstore, Learning Core, or ?
How do we represent structures larger than a unit within libraries? (Both in terms of UX and technically)
At what point in the editing/publishing process do we need to make this decision [the decision to break links or sync between shared content] when reusing a content object?
Does the original content author get any say here, or is it only the reusing content author?
With automated updates, do we still need a UI to show the upstream changes made over time?
Do content libraries become the defacto way for all content to be stored, even if it’s created first in a course rather than a library?
If someone creates a structure, call it a section, and that structure contains 5 units, are those units imprisoned in that structure, the section? I understand that what a unit is is fuzzy. It might, for example, be learning content, plus a formative assessment, because they are seen as inextricably bound together. But if there were 5 pairs of content + formative assessment -- units -- in a section and all that was shareable was the section, that feels sub-optimal.
Anticipated product challenges with the V2 launch
Users currently equate “Content Libraries” with the randomized content functionality. This is a very limited view of Libraries, both in terms of new V2 functionality and the plans for a more robust future. How can we 1) most effectively get the word out about the new functionality and 2) get users thinking about what they need for future state?
Clear messaging about the value of V2
What you can do with static component reuse
Why you would want to use the reference block
Clear documentation
How-to guide for using the net-new features of component authoring and static reuse
How-to guide for choosing the randomized block
How-to guide for choosing the reference block
Concept doc: When to use the randomized block vs when to use the reference block
Reference guide with some use case examples that demonstrate examples of the net-new features in action
Put together a focus group with edx and community users with a usability test with clear tasks that illustrate how to use the net-new features. See if/where there is confusion or excitement.
Clear messaging about the soon-to-follow updates and how they build value
Component tagging, which will come with the tagging MVP
What you can do with component tagging in libraries
The current established pattern of usage for Libraries is for authors to create one or more libraries per course, because libraries in the V1 state were only built to create pools of problems to randomize. How do we move users away from this pattern of 1:1 usage toward a pattern of 1:many usage, where a Library can be robust enough to support large amounts of content for use across many courses or use cases?
How do we drive enough usage of the new features in the V2 launch to get enough user input to inform where we invest next?
Will users be able to get enough value from the V2 launch without any supporting features like content tagging, content search, etc? Do we frame the V2 launch as a soft launch?
How do we get away from using “V1” and “V2” entirely and move toward Content Libraries simply being Content Libraries, with plans for future incremental improvements, enhancements and new features?