   else
     obj.condition = obj.hit.condition.laterTasks
 
+  # Feedback condition needs to retrieval extra information, might as well do it now.
+  # TODO Ideally we'd do it asynchronously with the next step in the waterfall, since
+  # get MaxedItems doesn't depend on this step
   switch obj.condition
     when 'feedback'
       callback('Feedback condition not yet designed', obj)
+      # Psuedo-code
+      #
     else
       callback(null, obj)
 

  return

sampleTaskItems = (obj, callback) ->
  switch obj.condition
    when 'teaching'
      ''' TODO get teaching set '''
      callback("Teaching set not ready yet", bj)
    when 'fast'
      ''' TODO Prep larger set for fast completion '''
      callback("Fast set not ready yet", obj)
    when 'basic'
      ''' doStuff '''
      if obj.opts.user == 'PREVIEWUSER'
        candidates = obj.hit.items
      else
        excludes = obj.maxed.concat (item._id for item in obj.userItemList)
        candidates = _.difference(obj.hit.items, excludes)
      itemSampleIds = _.sample(candidates, if obj.hit.maxSetSize then obj.hit.maxSetSize else 200)
      # Load Item model
      ItemModel = require('./models/' + obj.hit.itemModel)
      # Query info for all the sampled items
      if obj.hit.itemModel is 'pin'
        projection = { url:1, description:1, title:1, image:1, likes:1, repins:1 }
      else
        projection = {}
      ItemModel.find({_id:$in:itemSampleIds},
        projection,
        (err, results) ->
          obj.sample = results
          callback(err, obj)
        )

prepareTaskSet = (obj, callback) ->
  tasks = _.map(obj.sample, (task) ->

# 3.1 Determine with items have already been done enough
getMaxedItems = (obj, callback) ->
  if obj.condition is 'teaching'
    ''' Don't need maxed conditions because teaching set is pre-determined '''
    callback(null, obj)
    return

