def METHOD_NAME(self, task, entry, amount='', session=None):
    """Add single entry to task backlog
    If :amount: is not specified, entry will only be injected on next execution."""
    snapshot = entry.get('_backlog_snapshot')
    if not snapshot:
        if task.current_phase != 'input':
            # Not having a snapshot is normal during input phase, don't display a warning
            logger.warning(
                'No input snapshot available for `{}`, using current state', entry['title']
            )
        snapshot = serialize(entry)
    expire_time = datetime.now() + parse_timedelta(amount)
    backlog_entry = (
        session.query(BacklogEntry)
        .filter(BacklogEntry.title == entry['title'])
        .filter(BacklogEntry.task == task.name)
        .first()
    )
    if backlog_entry:
        # If there is already a backlog entry for this, update the expiry time if necessary.
        if backlog_entry.expire < expire_time:
            logger.debug('Updating expiry time for {}', entry['title'])
            backlog_entry.expire = expire_time
    else:
        logger.debug('Saving {}', entry['title'])
        backlog_entry = BacklogEntry()
        backlog_entry.title = entry['title']
        backlog_entry.entry = snapshot
        backlog_entry.task = task.name
        backlog_entry.expire = expire_time
        session.add(backlog_entry)