The scheduler uses time based queues in which there are separate queues for each time bucket. With the way the scheduler is designed, jobs can only be scheduled into the future. You cannot schedule a job to execute now for example. The scheduler checks for jobs to run every minutes. This means that the soonest a job can be executed is the next minute. If I create a job at 14:15 which is supposed to execute every 30 minutes, then the job should first execute at 14:30. The Trigger classes should included the necessary logic for this. Right now you have to explicitly add a delay for the trigger. This is error prone as can easily throw off or even miss executions.