Most study apps hide their scheduling behind the word "algorithm" and ask for trust. Here is TURGOR's entire brain instead — the actual math, exactly as it runs on your iPad, with the reasoning behind every constant. If a formula on this page ever disagrees with the app, that's a bug, and I want to hear about it.
The foundation is the SM-2 spaced-repetition family — the most studied scheduling model in existence — with one addition earned the hard way: the clock is part of the evidence. Exam problems aren't vocabulary cards; a right answer that took triple the target time is not the same knowledge as a right answer on pace.
After every rated attempt, the engine computes a time ratio and an adjusted quality:
Rt = clamp( target ÷ actual, 0.5 … 1.2 ) if actual < 20% of target: Rt capped at 1.0 — the anti-recognition floor qadj = clamp( q × Rt, 0 … 5 ) q = your rating (Again 0 … Easy 5) EF′ = max( 1.3, EF + 0.1 − (5 − qadj) × (0.08 + (5 − qadj) × 0.02) )
Read the floor line again — it's my favorite constant on this page. Solve a 40-minute problem in 6 minutes and you get no speed bonus, because recognizing an answer you've seen before isn't the same as working the mechanics, and it shouldn't inflate your schedule.
The adjusted quality feeds the ease factor only — never the pass/fail verdict. That kills the classic SM-2 cliff: a slow-but-correct solve gently erodes ease (it comes back a bit sooner) instead of nuking your interval to one day and burying you in reviews you didn't earn.
rated Again (q < 3): reps = 0, interval = 1 day the curve restarts rated correct: rep 1 → 1 day rep 2 → 6 days rep n → interval × EF′ overrun cap: rep ≥ 3 and actual ≥ 2 × target → interval holds, doesn't grow (that's a fluency gap, not a memory win) fuzz: intervals > 3 days get ±8% jitter, so problems rated the same day don't all come due the same future day
When more is due than fits your day, problems compete. The score is four honest factors, multiplied:
score = w × m × g ÷ c w topic weight your NCEES blueprint %, normalized so the mean over your topics is 1.0 — only relative size matters m subtopic mult. weights within a topic, normalized to mean 1.0 per topic g mastery gap g = clamp( (2.5 − EF) ÷ 1.2, 0 … 1 ) never attempted → g = 1 (you can't have mastered it) c time cost c = max(1, target minutes)
In words: exam value × your weakness ÷ what it costs you. A weak problem in a heavy topic that only costs ten minutes is the best purchase on the board, and the math says so.
Three protections built into the normalization, because weights are where shuffles happen in other tools:
Pure spaced repetition has a blind spot: master a problem in week two and it happily schedules your next review for a month after your exam. TURGOR caps every review date against the calendar:
effective review = min( natural SM-2 date, today + ⌈days-to-exam ÷ 2⌉ )
The cap recedes as the exam approaches: 40 days out, nothing schedules past day 20. Ten days out, nothing past day 5. The result is that everything you know gets touched again before it counts — and cram behavior emerges from the math itself, not from a panic mode. The final 21 days are labeled the cram window because by then the clamp dominates everything.
Your daily capacity is a hard budget in minutes. The queue is packed by score, greedily, with one refinement: a problem too big for the remaining minutes is skipped, not stopped at — so a cheaper high-value problem behind it can still fill the gap. At most one In-Depth full solve per day.
What happens to what doesn't fit is the whole point: it rolls. Still due, still scored, competing again tomorrow — where the shrinking horizon makes it more urgent, not less. A rolled problem cannot roll forever; the math won't let it.
And inside the cram window, greens rest. Cram ignores normal intervals, so without this rule a problem you just rated Easy would re-enter the very next session — cheapened by its tier discount, it would actually outrank problems you'd never attempted. So a problem whose last rating was Easy steps out of the cram pool for max(1, days-to-exam ÷ 2) days since its last attempt, then may return for one final pre-test confirm. Coverage beats polish when the calendar is short. (Found by a beta tester cramming for a school test — reported from inside the app, fixed the same day. The system works.)
Problems are classed by size — Rivet (short, must be automatic), Drill (15–45 min fundamentals), In-Depth (45+ min monsters). For In-Depth problems, the rating you give doesn't just pick a date — it prescribes the task next time:
| You rated | Next session is | At | Because |
|---|---|---|---|
| Again / Hard | Full Solve | base time | No shortcuts on a problem that's beating you. |
| Good | Setup Only | max(5, base ÷ 3) | FBD, governing equations, method — stop before arithmetic. The setup is the engineering. |
| Easy | Concept Review | max(3, base ÷ 10) | Approach and traps, fast. Mastery earns the discount. |
It's absolute and it's reversible: struggle during a Setup Only and rate honestly — the problem promotes straight back to Full Solve. Drills and Rivets are always a full solve; a 12-minute problem doesn't need a discount program.
This is the mechanism that keeps a 400-problem vault reviewable in 90 minutes a day. Mastered monsters never leave the rotation — they get cheap. Retained and affordable, which is the entire game.
every attempt is one of: truly right · mechanical slip · wrong True Accuracy = truly right ÷ (right + slips + wrong)
Slips (setup perfect, dropped a sign in row four) are tracked separately because the cure is different: slips need checking discipline, wrongs need concept work. An app that averages them prescribes the wrong medicine for one of them every time — and an app that counts "basically right" as right is flattering you with points the exam will not award.
solid = problems currently rated Good or Easy required = (rotation − solid) ÷ days to exam problems/day that must turn pace = your attempts over the last 7 days ÷ 7 what you actually did pace ≥ required → ON PACE otherwise → BEHIND
No opaque readiness percentage, no model you can't audit. Arithmetic you could check on a napkin — which is exactly why you can believe it at 10 PM.