One of the biggest things I'm thinking about is determining the adaptive algorithm that places you on different portions of the learning experience.
My current strategy is to compose a concept map of all the basic concepts and then devise a proficiency metric on each concept, which might be some aggregate of [correct on first attempt + time to completion + learner history] or whatever else I think of. Then you progress through the content by traversing this graph (with a fair degree of stochastic nature so to keep things moving). I'm hoping collected data can then be used to devise a new concept graph - something of a dependency graph whose density might ultimately reflect an element interactivity [1].
For example, function use might be considered a singular concept, while a function which returns a function might be another concept. The latter is a bit more exotic to newcomers and you can use the metrics determined by the former to gauge a pace to give the learner, but it's a foundational concept which most concepts in functional programming depend on and it might not be fair to consider it a single concept in the learning process until the schema is well-established.
Ideally, within a few questions answered you get pushed up to a state where you're actually learning something, no matter what your proficiency.
[1] http://www.davidlewisphd.com/courses/EDD8121/readings/1998-S...