Skip to content

Complex Course Logic & Tools

Overview

Complex Course Logic & Tools covers the advanced authoring capabilities that go beyond standard course creation — conditional content releases, prerequisite gating, custom course pacing, and specialized course delivery modes. These features allow course creators to design adaptive or conditional learning flows that respond to learner behavior or progress.

CCX (Custom Courses for edX) is the primary vehicle for course customization at the delivery level — allowing instructors to derive modified versions of a master course for specific cohorts.

Current State (2026)

  • Conditional content: ConditionalDescriptor and SplitTestDescriptor XBlocks enable A/B testing and conditional unit visibility based on cohort membership or prerequisite completion
  • Content gating: Graded subsections can be gated behind prerequisite completion; configurable via course advanced settings
  • Course pacing: Instructor-paced vs. self-paced mode; self-paced allows learners to move through on their own schedule with per-learner due dates
  • Prerequisites: Course-level prerequisites (one course must be completed before enrolling in another) configured in course-discovery
  • CCX (Custom Courses for edX): Allows instructors to create customized sub-versions of a master course with their own start dates, content subsets, and enrollment
  • Schedule & Dates: openedx-django-learning-core and edX-platform date logic manages relative and absolute due dates

Architecture

  • Conditional logic: Implemented as XBlocks (SplitTestDescriptor, ConditionalDescriptor); evaluated server-side at render time
  • Gating: Grade-based gating uses the persistent grade model; prerequisite gating uses completion tracking
  • CCX: CCXCon (CCX Connector) and edx-platform CCX models allow per-learner course derivations; not widely deployed
  • Pacing: Course pacing mode stored in course metadata; self-paced due dates computed per-learner from enrollment date
  • Course prerequisites: Enforced by edx-platform at enrollment time; prerequisite course IDs stored in course-discovery

Relevant Repositories

RepositoryRole in This FeatureActivity LevelNotes
openedx/openedx-platformConditional logic, gating, pacing, CCX implementationHighCore platform for all logic
openedx/frontend-app-authoringAuthoring UI for advanced settings and gating configHighStudio MFE
openedx/ccx-keysCCX course key formatLowKey structure for CCX courses
openedx/course-discoveryCourse-level prerequisite configurationHighPrerequisite data model

Recent Changes

  • Self-paced course delivery growing in adoption
  • CCX remains available but not widely deployed

History

Origin

  • Year introduced: Various — conditional content and A/B testing features were added iteratively post-launch; CCX introduced ~2015
  • Initial implementation: Conditional XBlocks and split tests built into the XBlock framework; CCX built as a derivative course model
  • Context: As edX scaled, course teams needed more flexibility — A/B testing for content effectiveness, gated content for structured learning paths, and customized course delivery for enterprise/SPOC use cases

Key Milestones

YearMilestoneTeams / People Involved
~2013–2014SplitTestDescriptor (A/B) and conditional content XBlocks addedUnknown
~2015CCX (Custom Courses for edX) introduced for SPOC useUnknown
~2016–2017Self-paced course mode launchedUnknown
~2018–2019Grade-based content gating implementedUnknown

People Who Shaped This Area

  • Engineering: Unknown — open question for interview
  • Product: Unknown — open question for interview
  • Design: Unknown — open question for interview

Open Questions

  • [ ] What drove the introduction of CCX and who were the primary users?
  • [ ] Is CCX still actively used and maintained, or effectively deprecated?
  • [ ] How does content gating interact with the new persistent grade model?
  • [ ] What are the authoring UX implications of conditional content — can authors preview conditional paths?
  • [ ] What is the relationship between SplitTestDescriptor and cohort-based content visibility?
  • [ ] How does self-paced due date computation work technically?

Schema Education — Internal Research