Grading & Exam Tools
Overview
Gradebook & Assessment covers the instructor-facing tools for viewing, managing, and adjusting learner grades — including the gradebook MFE, grade overrides, bulk grade import/export, and grade debugging tools.
Instructors use the gradebook to identify struggling learners, apply grade adjustments for extenuating circumstances, and manage the end-of-course grading process.
Current State (2026)
- Gradebook MFE:
frontend-app-gradebookprovides a filterable, sortable table of all learner grades by subsection - Grade overrides: Instructors can override individual subsection grades with justification (audit log)
- Bulk grades:
edx-bulk-gradesallows importing/exporting grades via CSV for batch processing - Grade recalculation: Available via instructor dashboard to recompute grades after policy changes
- Access: Course staff roles (instructor, staff) have gradebook access; learner grades visible per-course only
Architecture
- Frontend:
frontend-app-gradebookcalls the grades REST API inedx-platform - Grades API:
edx-platformexposes/api/grades/v*endpoints for subsection grades, course grades, and overrides - Grade storage: Subsection grades stored in
PersistentSubsectionGrade; course grades inPersistentCourseGrade; computed by Celery tasks - Override model:
PersistentSubsectionGradeOverridestores instructor adjustments with audit trail - Bulk grades: CSV upload triggers background Celery tasks to update grades;
edx-bulk-gradeshandles the CSV parsing and validation
Relevant Repositories
| Repository | Role in This Feature | Activity Level | Notes |
|---|---|---|---|
| openedx/frontend-app-gradebook | Gradebook MFE | Medium | Primary grades UI |
| openedx/edx-bulk-grades | CSV bulk grade import/export | Low | Batch grade management |
| openedx/openedx-platform | Grade backend: storage, computation, API | High | Core grades system |
Recent Changes
- Gradebook MFE incremental improvements
- Persistent grade model stability
History
Origin
- Year introduced: ~2012 (basic grade display in LMS); persistent grades model is newer (~2017–2018)
- Initial implementation: Grade computation was ephemeral (re-computed on demand); no separate gradebook UI initially
- Context: At scale (thousands of learners per course), computing grades on demand was not feasible; persistent grade storage was a major architectural investment
Key Milestones
| Year | Milestone | Teams / People Involved |
|---|---|---|
| ~2012 | Basic grade computation in LMS | Unknown |
| ~2017–2018 | Persistent subsection grades model introduced | Unknown |
| ~2019–2020 | Grade override feature added | Unknown |
| ~2020–2021 | Gradebook MFE (frontend-app-gradebook) development | Unknown |
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
- [ ] When was the persistent grade model introduced and what architectural challenges did it solve?
- [ ] What drove the decision to build a dedicated gradebook MFE?
- [ ] How are grade policies (weighted assignments, passing thresholds) configured and computed?
- [ ] How does bulk grade import work — what validations are performed?
- [ ] What are the most common instructor workflows that are painful in the current gradebook?