2. It is a hack because get_fail_delay is really get_previous_fail_delay, and is meant to return the delay that lead to the previous invocatoin of the task, if this was the second or later failure in a row. It is not get_suggested_fail_delay_for_this_task.
Hence the need to return have the number you want, because the system is going to double it, or use 60 if null is returned.