Design Course, Module, and Lesson Progress APIs

Quick Overview

Design authenticated APIs for course, module, and lesson progress plus an idempotent lesson-completion update. Define safe user scoping, stable response shapes, hierarchy authorization, derived progress, and efficient list queries.

Design Course, Module, and Lesson Progress APIs

Company: Fora Travel

Role: Software Engineer

Category: Software Engineering Fundamentals

Difficulty: medium

Interview Round: Technical Screen

# Design Course, Module, and Lesson Progress APIs Design authenticated APIs for three application pages: 1. A course list showing course ID, course name, and whether the current user completed each course. 2. A module list for one course showing module ID, module name, completed lessons, total lessons, and progress. 3. A lesson list for one module showing lesson ID, lesson name, and whether the current user completed each lesson. Also design an idempotent operation that updates one lesson's completion state. Specify request parameters, request bodies, response shapes, user identity, authorization, and error responses. ### Constraints & Assumptions - Progress is user-specific; the client must not choose an arbitrary user ID to read or update. - Course completion derives from lesson completion unless the product defines a separate override. - List ordering must be deterministic. - Repeating the same completion update must leave the resource in the same state. ### Clarifying Questions to Ask - Are courses globally visible, or is access based on enrollment? - Does progress need to update synchronously after a lesson-completion write? - Can modules or lessons be reordered or removed while a learner is in progress? ```hint Keep hierarchy and progress separate Course, module, and lesson definitions are shared content; completion records belong to a particular authenticated user. ``` ```hint Make the write express desired state Setting `completed` to true or false is naturally idempotent, unlike an ambiguous toggle operation. ``` ### What a Strong Answer Covers - Clear routes for all three pages and one completion update. - Authentication-derived user identity and hierarchy-aware authorization. - Concrete response and error shapes with stable ordering and pagination considerations. - Idempotent completion writes and a consistent derivation of module and course progress. - Avoidance of per-row progress queries when listing a hierarchy. ### Follow-up Questions - How would you prevent stale responses from overwriting the UI immediately after a completion update? - What changes if lesson completion events must be retained for audit? - How would you serve a course containing enough modules or lessons to require pagination?

Quick Answer: Design authenticated APIs for course, module, and lesson progress plus an idempotent lesson-completion update. Define safe user scoping, stable response shapes, hierarchy authorization, derived progress, and efficient list queries.

|Home/Software Engineering Fundamentals/Fora Travel
Fora Travel logo
Fora Travel
Aug 16, 2026, 12:00 AM
mediumSoftware EngineerTechnical ScreenSoftware Engineering Fundamentals
0
0

Design Course, Module, and Lesson Progress APIs

Design authenticated APIs for three application pages:

  1. A course list showing course ID, course name, and whether the current user completed each course.
  2. A module list for one course showing module ID, module name, completed lessons, total lessons, and progress.
  3. A lesson list for one module showing lesson ID, lesson name, and whether the current user completed each lesson.

Also design an idempotent operation that updates one lesson's completion state. Specify request parameters, request bodies, response shapes, user identity, authorization, and error responses.

Constraints & Assumptions

  • Progress is user-specific; the client must not choose an arbitrary user ID to read or update.
  • Course completion derives from lesson completion unless the product defines a separate override.
  • List ordering must be deterministic.
  • Repeating the same completion update must leave the resource in the same state.

Clarifying Questions to Ask Guidance

  • Are courses globally visible, or is access based on enrollment?
  • Does progress need to update synchronously after a lesson-completion write?
  • Can modules or lessons be reordered or removed while a learner is in progress?

What a Strong Answer Covers Guidance

  • Clear routes for all three pages and one completion update.
  • Authentication-derived user identity and hierarchy-aware authorization.
  • Concrete response and error shapes with stable ordering and pagination considerations.
  • Idempotent completion writes and a consistent derivation of module and course progress.
  • Avoidance of per-row progress queries when listing a hierarchy.

Follow-up Questions Guidance

  • How would you prevent stale responses from overwriting the UI immediately after a completion update?
  • What changes if lesson completion events must be retained for audit?
  • How would you serve a course containing enough modules or lessons to require pagination?
Loading comments...