← Back to projects

Project Case Study

AdaptiveIQ

Adaptive testing engine that uses Item Response Theory to fit each question to a candidate's live ability estimate.

  • One-dimensional adaptive engine inspired by Item Response Theory, updating the ability estimate after every answer.
  • Question selection that targets the candidate's current level, so each session takes a different path.
  • FastAPI backend with MongoDB Atlas storage and an LLM for question handling.

Context

A fixed test wastes everyone's time at both ends. Strong candidates grind through easy questions, weaker ones get buried by hard ones, and the middle is where you actually learn something. Adaptive testing is the old idea that the test should move toward the candidate. AdaptiveIQ is my build of that idea on a modern stack.

Problem

The core is the loop: estimate how able someone is right now, then choose a question that sits near that estimate, because a question they are about fifty-fifty on is the one that tells you the most. Do it badly and the test either bounces around randomly or locks onto one difficulty and stops learning.

Approach

Ability is modeled in one dimension, in the spirit of Item Response Theory. After each answer the estimate updates, and the engine selects the next GRE-style question to match the new level rather than reading down a fixed list. The state and the question bank live in MongoDB Atlas behind a FastAPI service, with an LLM in the loop for handling the question content. Because the path depends on the answers, no two sessions look the same.

Outcome

The result is a test that feels like it is paying attention. The session length and difficulty curve shape themselves around the candidate instead of a one-size script. There is no public live demo for this one; it runs locally against the backend.

Next Iteration

  • Move from one dimension to a multi-skill profile so a candidate can be strong in one area and weak in another.
  • Add exposure control so popular questions do not get overused across sessions.