Naming lesson events so tutors and engineers agree

A practical naming pattern for lesson start, exercise attempt, and mastery signals that survive a schema rebuild.

When we open an event catalogue for a language app, we often find three names for the same action: lesson_view, unit_open, and content_start. Tutors mean “learner began the graded exercises.” Engineers mean “the lesson screen rendered.”

A naming pattern that survives rebuilds:

  1. Surface — screen or route shown (lesson_screen_viewed)
  2. Intent — learner starts graded work (exercise_attempt_started)
  3. Outcome — score or rubric result (exercise_attempt_scored)
  4. Mastery — curriculum rule met (skill_checkpoint_passed)

Keep language code and lesson ID as properties, not as separate event names per language. Parallel event trees for Malay versus Mandarin multiply inventory pain without teaching you more about behaviour.

Bring this draft into a metric framework session if your team cannot agree in Slack threads alone.