docs: def _estimate_free(self):
          """
          Estimate completion time for a free task.
  
          :returns: deferred that when fired returns a datetime object for the
                    estimated, or the actual datetime, or None if we could not
                    estimate a time for this task method.
          """
          # Query the information we need for this task's channel and package.
          capacity_deferred = self.channel.total_capacity()
          open_tasks_deferred = self.channel.tasks(state=[task_states.OPEN])
          avg_delta_deferred = self.estimate_duration()
          deferreds = [capacity_deferred,
                       open_tasks_deferred,
                       avg_delta_deferred]
          results = yield defer.gatherResults(deferreds, consumeErrors=True)
          capacity, open_tasks, avg_delta = results
          # Ensure this task's channel has spare capacity for this task.
          open_weight = sum([task.weight for task in open_tasks])
          if open_weight >= capacity:
              # TODO: Evaluate all tasks in the channel and
              # determine when enough OPEN tasks will complete so that we can
              # get to OPEN.
              raise NotImplementedError('channel %d is at capacity' %
                                        self.channel_id)
          # A builder will pick up this task and start it within SLEEPTIME.
          # start_time is the maximum amount of time we expect to wait here.
          start_time = self.created + SLEEPTIME
          if avg_delta is None:
              defer.returnValue(None)
          est_completion = start_time + avg_delta
          defer.returnValue(est_completion)