What determines the next run time when a user defers?

I’ve looked through the forums and found a couple things that I should of implemented like the 60012 Return Code, but I don’t really understand fully how the defer works.

If a user hits defer, what determines the next run time?

From the admin guide version 3.7: " Important Note regarding deferrals
The SCCM 2012 Application Model does not have the flexibility to schedule Mandatory Assignments on a recurring schedule like SCCM 2007 or SCCM 2012 packages do. Instead, this is determined by the frequency of Software Deployment evaluation cycle in the SCCM Agent Custom Settings. You can modify this to reduce the time from the default of once a day, however this may increase the load on your SCCM servers and clients, and is not configurable on a per application basis" .
So you can change SCCM to run faster but thats not the preferred method and may cause you errors if you do this. I suggest you consider the below package/application duplication.

When I need to use deferrals on a required push I build it as an Application and work out all the details of the install, then copy the directory and create a separate package that has the deferal code in it. I will then deploy the Application version as Software Center Available and any Required push will get the Package version pushed to them with the defer code. The key then is the required Package push get a custom repeat like every 2 hours and the install has the setting of only rerun is previously failed. This allows for defer which is fail will rerun every 2 hours until success or number of defers is 0 and install is forced. Since Applications cannot do repeat every 2 hours or whatever custom you choose it just doesn’t work right. Packages have that option for custom repeast and if you also have the Application ready and in available your detection can pick up the application model benefits post package deployment.

Thanks for the reply @Matt58. I actually saw in the documentation as well that packages was the way to go before you replied, but I didn’t update the post saying I figured out the solution