Skip to content

Commit

Permalink
docs: add vertical tagging ADR
Browse files Browse the repository at this point in the history
  • Loading branch information
AfaqShuaib09 committed Jan 14, 2025
1 parent 573e569 commit 8911798
Showing 1 changed file with 49 additions and 0 deletions.
49 changes: 49 additions & 0 deletions docs/decisions/0031-vertical-content-tagging.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
31. Vertical Content Tagging
=============================

Status
--------
Accepted (January 2025)

Context
---------
The openedX's `course-discovery` service currently lacks an efficient and flexible way to categorize courses by
granular subject areas and verticals. The existing mechanisms (e.g., tags, Primary Subject) are limited, primarily
partner-driven, and often misaligned with business-specific needs for taxonomy and categorization.
Partner-driven use cases are different from business-specific use cases.

For example, if a partner tags a Python course as a programming language course,
the business wants to tag it as a Data Science tool (to learn and practice Data Science primarily).

Objective
-----------
This Vertical Tagging functionality ensures that the portfolio of courses is aligned with business objectives
by granular tagging using vertical filters.

Decision
----------
A new app will be created for the Vertical Content Tagging functionality in the course-discovery.

The following models will be added to support the vertical tagging functionality:

- **VerticalFilter:** This model will contain the vertical's name and slug value and an active flag.
- **SubVerticalFilter:** This model will contain the sub-vertical's name, slug value, vertical reference,
and an active flag.
- **BaseVerticalFilter:** This abstract model will reference the VerticalFilter and SubVerticalFilter models and will be used for product types.
- **CourseVerticalFilter:** This model extends BaseVerticalFilter and will contain references to the Course model to assign verticals and sub-verticals to courses.

Currently, the decision is to support vertical tagging for courses only. In the future,
the same functionality can be extended to other product types (e.g., Programs, Degrees, etc.).

A new user group will be created to grant access to the admin panel for assigning vertical and sub-vertical tags to courses.
However, this user group will not have permission to manage vertical and sub-vertical filters, this functionality will be restricted to superusers only.

This new user group will be managed using a base settings configuration variable. To implement this, a new user group will be created
and added to the base settings configuration.

Alternatives Considered
-------------------------
- Add New Models in course_metadata: Keeping functionality within a single repository, simplifying integration.
However, it risks app bloat, increased coupling, and reduced readability due to the large number of existing models.
- Create a Separate Plugin: Decouples vertical tagging for better scalability and modularity, with a plug-and-play structure.
However, it requires significant initial effort, coordination, and limits Django ORM relationships with course-discovery models.

0 comments on commit 8911798

Please sign in to comment.