From the [Apex documentation][1]: "Each future method is queued and executes when system resources become available." As such, if the system resources are available, the `@future` method could execute immediately. I would conclude there are no guarantees the timing will look like the first timing order you asked about below: -start sync---call future---end sync---execute future-> This is exactly why, as you've astutely noted, the documentation states: > The reason why sObjects can’t be passed as arguments to future > methods is because the sObject might change between the time you call > the method and the time it executes. In this case, the future method > will get the old sObject values and might overwrite them. [1]: http://www.salesforce.com/us/developer/docs/apexcode/Content/apex_invoking_future_methods.htm#kanchor525