Right now, the scheduling just says "what is the time elapsed since the last successful run?" But this means that if a job fails, it will try to run again with every scheduling interval. Is this what is desired?
Should there also be a "failure schedule" defined? This would be a separate column in the app_tasks table. It would, I think, think take values like "TRY_HOURLY", "TRY_HOURS_2, or "TRY_MINUTES_15".