02 · NxtWave · 2025

AI Tutor

A companion inside the learning platform that holds two things at once: everything a student has asked before, and exactly what is on their screen right now. Built so someone who is stuck can ask in four words and get moving again.

Role
Associate Product Manager
Focus
screen context, memory layer, personalisation

The problem

The expensive part of a doubt is asking it

A student is forty minutes into a lesson on recursion at eleven at night. Line three of the example does not make sense. That is the whole problem, and it is smaller than it sounds: they do not need the lesson re-taught, they need one line explained, right now, in the words the lesson just used.

What a learning platform can usually offer instead is a queue. Post the doubt, wait for a mentor, come back tomorrow. Or open a chat window and start from nothing: paste the code, name the lesson, explain what you already tried, describe what you expected to happen. By the time a confused person has finished writing that setup, they have spent more effort framing the question than the answer is worth. So most of them never ask. They skip the line, tell themselves it will make sense later, and carry the gap into the next lesson, where it compounds.

This is the part that gets misdiagnosed. The failure is not answer quality. Models were already good enough to explain a base case clearly. The failure is the cost of asking, and a generic assistant bolted onto the side of a product makes that cost as high as it can possibly be, because it starts every single conversation from zero. It knows nothing about the course, nothing about the screen, nothing about the fact that this same student was stuck on the same idea two days ago. Every unit of context it cannot supply, the student has to type.

So the brief was never to add a chatbot. It was to delete the setup. The tutor should already know which lesson is open, which block the student is reading, and what they asked on Tuesday. When the question finally arrives, it should be able to answer something as short as why does this work.

A doubt has a half-life. Answer it late enough and it is no longer a doubt, it is a gap.

The product

What it actually looked like

AI Tutor · student view

  1. The student is on Python, Recursion, Part 3, reading a recursive factorial function.
  2. They select line 3, return 1, and ask about it from inside the lesson.
  3. Student: why does this return 1 and not 0?
  4. Before answering, the tutor resolves two things it already holds: the screen, which is Recursion Part 3, the function fact, line 3, and its memory of this student, who asked about base cases on Tuesday and has recursion marked as a weak area.
  5. Tutor: that line is the base case, and it is the value the whole chain multiplies into. Return 0 and every multiplication above it collapses to 0. Return 1 and the product is left untouched. The tutor adds that the student hit the same idea in the sum exercise on Tuesday, where the base case returned 0.
  6. The tutor offers one reference back into the material: base cases and identity values, from Recursion Part 2.
  7. It then generates one practice question: write product of a list recursively, and decide what the empty list should return. It will not write the answer.
  8. It closes with a check on what it just explained: in a recursive sum, the base case should return 0, 1, or the first element. The student answers 0, correctly, and the student model is updated to record recursion base cases as shaky but improving.
Illustrative reconstruction of the doubt loop. Not a screenshot, and no real student data.

Illustrative reconstruction, built for this page. Not a screenshot, and no real student data: the lesson, the doubt and the model note are all invented.

What I decided

Six calls that shaped the thing

  1. 01

    Screen context is resolved before the question is read

    The tutor knows the course, the lesson, the unit, the block in view and anything the student has selected, and it knows all of it before a single word is typed. Reasoning: most of a doubt is already on the screen. Asking a confused person to describe their own confusion is the most expensive step in the whole interaction, and it is the one step a product can delete outright rather than optimise.

  2. 02

    Show the context, do not just use it

    Two chips sit above the composer: what the tutor can see, and what it remembers about this student. Reasoning: an assistant that silently knows things about you is unsettling, and a student who cannot see the assumption has no way to correct it. Making the context visible turned a privacy question into a trust affordance, and it bought us a free feedback channel, because when a chip is wrong, students say so immediately.

  3. 03

    One answer, one reference, one question. Never a wall.

    The response is capped by design: the explanation, a single pointer back into the material, a single practice attempt. Reasoning: someone who is already confused has no capacity left for triage. Six options is not generosity, it is work handed back to the person least able to do it. Holding things back was harder to defend internally than adding them, because a longer answer looks more impressive in a demo and performs worse inside a lesson.

  4. 04

    The tutor asks the last question

    Every resolved doubt closes with a check on the thing that was just explained. Reasoning: reading a good explanation feels almost exactly like learning and mostly is not. The moment a student has to produce the idea themselves is the moment it holds, and the tutor is the only thing in the room that knows precisely what was just explained, so it is the only thing that can ask the right question. One question, always skippable.

  5. 05

    Depth comes from the student model, not from the question

    The same question from two students returns two different answers, because the strong and weak point model decides how much scaffolding to build. Solid topic: one line, then stop. Shaky topic: explanation, reference, practice, check. New topic: start from the idea rather than the syntax, in smaller steps, and no check yet. Reasoning: over-explaining to someone who already understands reads as condescension and they quietly stop asking, and under-explaining to someone new leaves them exactly where they started.

  6. 06

    Say when it does not know

    Where the tutor is not confident, or the doubt falls outside the curriculum it can ground an answer against, it says so and routes to a human mentor instead of composing something plausible. Reasoning: in a learning product a confidently wrong answer is worse than no answer at all, because the student has no way to catch it and will build the next three lessons on top of it. One bad explanation costs more trust than ten good ones earn.

How it works

The loop, from screen to student model and back

Four pieces do the work: screen context awareness, the student memory layer, the personalisation loop that models strong and weak points, and the doubt resolution flow that runs from question to answer to reference to check. The order matters more than any individual piece, because the whole point is that the slow, expensive context is already resolved by the time the student decides to ask.

  1. Step 1

    Screen context resolved

    Course, lesson, unit, the block in view and anything selected. Captured continuously, so it is already sitting there when the student decides to ask.

  2. Step 2

    The doubt is read against that context

    Why does this return 1 resolves to a specific line of a specific example, not to a general question about recursion. Four words is enough input.

  3. Step 3

    Retrieval scoped to the curriculum

    The answer is grounded in the material this student was actually taught, in the vocabulary that lesson used, rather than in every possible way of explaining the idea.

  4. Step 4

    Student memory read

    What they have asked before, what was explained, what they got right afterwards, and the strong and weak areas built up out of all of it.

  5. Step 5

    Response shaped, then capped

    Depth, scaffolding and tone come from the model. The cap comes from the design: one explanation, one reference, one practice question, one check.

  6. Step 6

    Result written back

    The check outcome and the shape of the interaction update the student model, so the next answer starts from a better estimate. This loop is the difference between a tutor and a search box.

The write-back is the piece that is easy to skip and impossible to fake. Without it every session starts from the same blank estimate of the student, and the tutor is a search box with a nicer voice. With it, the model is what decides how much the next answer gives: confidence per topic, the evidence behind it, and a rule for what each band changes about the response.

Student model · strong and weak points

Topic confidence

  • Loops and iteration

    Solid

    twelve exercises clean, no doubts in three weeks

  • Functions and scope

    Solid

    one doubt, resolved, check passed

  • Recursion, base cases

    Shaky

    four doubts, last two checks passed, rising

  • Time complexity

    Shaky

    three doubts, the last one left unresolved

  • Dictionaries

    New

    not started

What each band changes

  • Solid

    One line, no scaffold. Answer what was asked and stop. Over-explaining to someone who already understands reads as condescension, and they stop asking.

  • Shaky

    Explanation, one reference back into the material, one practice attempt, then a check. This is the only band that gets the full loop.

  • New

    Start from the idea rather than the syntax, in smaller steps. No check yet: testing someone on their first contact with a concept mostly teaches them they are bad at it.

Confidence decays. Recent evidence outweighs old evidence, and a student can tell the tutor it has them wrong.

Illustrative. The topics, levels and evidence lines here are invented for this page.

What was hard

The parts that were genuine tradeoffs

Screen context is a scope problem long before it is a technical one. Knowing what is on the screen has to be written down as a list of things the tutor may read and a list it may never touch, and that list is a product decision, not an engineering detail. We drew it tightly: curriculum surfaces only, nothing wandering into whatever a student had typed somewhere else. The visible context chip started life as a way of making that boundary legible, and ended up being the thing students notice first.

Memory makes mistakes sticky. A model that has decided a student is weak at recursion will over-explain recursion for weeks, and over-explanation is the fastest way to make someone stop asking questions. So confidence had to decay, recent evidence had to outweigh old evidence, and the student needed a way to say I have got this and be believed. A memory layer with no forgetting policy is not personalisation, it is an accumulating prejudice.

Latency stopped being a technical metric and became an emotional one. Every retrieval hop is another second a stuck student spends stuck, and stuck students close tabs. So the loop got split: answer first, out of context that was already resolved, then load the reference and generate the practice question behind it. The student is reading by the time the slower parts land.

The hardest single call was deciding not to solve the exercise. In a coding lesson the tutor can trivially produce working code, and every instinct in a product team pushes towards it, because it demos beautifully and it is precisely what students ask for. It also removes the only part of the lesson that was doing any work. We drew the line at explaining the idea and never writing the answer, which meant accepting that some students would find the tutor less useful than they wanted it to be, and saying so out loud in the interface rather than pretending the limitation was a capability gap.

And quizzing a frustrated person is genuinely risky. A check-back question at the wrong moment does not read as teaching, it reads as being tested by the one thing that was supposed to help. So it is one question, it is always skippable, and where the signals suggest a student is annoyed rather than curious, the tutor does not ask it at all.

Outcome

What changed, stated honestly

The numbers on this one are internal, so what follows is qualitative. Nothing below is a performance claim: it is a description of the shape of the thing that shipped.

The tutor shipped as a companion across the learning platform: always available, holding screen context and student memory at the same time, resolving doubts inside the lesson instead of outside it. The behaviour change worth naming is that a doubt stopped being an event that took a student out of what they were doing. It became something handled in place, in the same minute, after which they kept going.

The second-order effect mattered more than I expected. Once the strong and weak point model existed and was being written to on every interaction, it stopped being the tutor's private state and became a platform input: it is what lets other systems notice a student is stuck before the student reports it. The companion turned out to be the cheapest way to build a longitudinal picture of how someone actually learns, because it is the one surface a student talks to honestly.

  • In the lesson

    Where a doubt gets resolved

    not in a queue

  • Across sessions

    What the memory layer carries

    same student, next day

  • Per student

    How deep any answer goes

    shaped by the model

What I would do differently

Control before capability

I would have given students control over their own memory on day one instead of treating it as a follow-up. We built the model first and the ability to see it, correct it and clear it second, which is the wrong order for anything that claims to know you: the control is what makes the knowing acceptable, so it belongs in the first version rather than the next one. I would also have shipped the check-back question as an opt-in before making it the default, purely to learn where it lands well and where it irritates, rather than inferring that from complaints after the fact.