Flow Architecture & Asynchronous Processing
A Flow scheduled path is not a job queue
Future execution is not queue architecture
A team needs to send reminders, call an external service and update related records after a contract enters renewal. A scheduled path seems to solve everything: place the work hours or days after the record change, let Salesforce hold it, and draw the remaining actions in Flow. Soon the same mechanism carries customer notifications, billing calls, entitlement changes and data repair. It looks like a queue, but the design has none of the contracts that make a queue dependable.
Salesforce scheduled paths are a strong declarative capability for record-triggered flows. They can run relative to the triggering event or a date field, and Salesforce's architecture guidance notes that the platform automatically cancels or reschedules them when relevant record data changes. The JSBC Labs position is that this strength defines their boundary: use a scheduled path when future work belongs to the lifecycle of one record. Do not treat it as a general-purpose job transport.
Start with the business clock
A good scheduled path expresses a rule such as 'three days before renewal date, prepare the account review' or 'two hours after a case enters pending customer, send a reminder'. The time source is business data, and a record change should naturally alter or cancel the future action. That alignment is more important than the convenience of avoiding Apex.
Write the scheduling contract before opening Flow Builder: the qualifying state, time source, offset, cancellation conditions and outcome expected at execution. Decide what happens when the date moves into the past, becomes blank or changes repeatedly. Entry conditions matter because Salesforce schedules and cancels paths according to how the record transitions through those conditions. Test those transitions as state changes, not merely as isolated field values.
Treat the wake-up time as an earliest expectation
A scheduled time is not a real-time service-level guarantee. Salesforce's asynchronous processing guidance states that background work has no SLA and wait times can be unpredictable. A path due at 09:00 should therefore support a business promise such as 'process after 09:00' rather than 'complete at exactly 09:00:00'. If seconds matter, the requirement needs a different architecture and an end-to-end latency design.
Store the business due time separately from the fact that execution occurred. At run time, compare the current time and current record state with that due time. Decide whether late work is still valid, must be escalated or should be skipped. Measuring scheduled time, start time, completion time and outcome turns timing from an assumption into an observable service level.
Revalidate before creating side effects
Automatic cancellation and rescheduling are valuable, but they do not remove the need for a guard at execution. The customer may have opted out, the case may be closed, a related record may have changed, or another process may already have completed the work. Begin the scheduled path by retrieving the authoritative state needed for the decision and exiting safely when the intended action is no longer valid.
Make external and irreversible actions idempotent. Give each business action a stable key, such as record ID plus action type plus lifecycle version, and persist the outcome. A repeated attempt should detect the completed key rather than send a second message or create a duplicate downstream order. This is JSBC Labs design guidance, not a guarantee supplied by Flow: scheduling tells the platform when to resume work; it does not define your business deduplication contract.
Design explicitly for identity and privilege
Salesforce documents that scheduled paths run in system context, while the running user associated with the actions is the user who originally changed the record. If that user is inactive, the Default Workflow User is used, so Salesforce requires that setting to be configured. These details affect audit attribution, email behaviour, downstream identity and what administrators see during diagnosis.
System context is not permission to ignore authorization. Salesforce's secure coding guidance warns that record-triggered flows commonly run in system mode and recommends enforcing authorization when changing unrelated records. Use a stable, appropriately licensed Default Workflow User; review every cross-record update; and ensure invocable actions and integrations use least-privilege identities. Test with real personas, deactivated triggering users and restricted related records.
Engineer for batches, not diagrams
When many paths share a due time, Salesforce groups records into batches. The Scheduled Paths documentation allows a batch size from 1 to 200 and explicitly suggests using it to avoid Apex governor-limit pressure. That means every element and invocable action must be bulk-safe even if the canvas appears to show one interview following one record.
Estimate due-volume concentration, not only daily volume. Month-end dates, imported renewals and mass field updates can produce a sharp workload peak. Test representative batches with realistic record relationships, formulas, sharing and callouts. Lowering batch size can reduce per-transaction pressure, but it does not create unlimited throughput; it trades transaction density for more batches and potentially longer completion time.
Build the operations model before activation
Salesforce exposes pending scheduled work in the Time-Based Automations page. Make that view part of release and incident procedures: operators should know the expected queue shape, how to find work for a record, which flow version owns it and what evidence is safe to remove. Monitor failed interviews, unusual pending volume, oldest due time, completion latency and business outcome counts rather than relying on error emails alone.
Version changes require special care because already-scheduled work can outlive the release that created it. Before changing entry criteria, time sources or downstream actions, inventory pending paths and decide whether they should finish, be cancelled or be replaced. Use additive rollout where consequences are material, and rehearse rollback with queued work present. Flow activation is only the code change; the pending population is production state.
Choose a real queue when the work demands one
Move beyond a scheduled path when the unit of work is not naturally tied to one record lifecycle, when producers and consumers must be independently versioned, or when you require explicit retry policy, dead-letter handling, ordering, backpressure, replay or cross-system acknowledgement. Platform events, Queueable or Batch Apex, scheduled flows, middleware and external queues each solve different parts of that problem. Salesforce's asynchronous processing decision guide is a better starting point than choosing whichever canvas element is closest.
The practical rule is simple: use a scheduled path for a future, record-specific decision whose schedule should follow that record. Revalidate state, make side effects idempotent, model running identity, load-test batches and operate the pending work as production state. When the requirement is durable workload transport, design an actual queue contract. A clock on a Flow path can delay execution; it cannot supply delivery semantics that the architecture never defined.
Official references
- Salesforce Help: Scheduled Paths
- Salesforce Help: How Entry Conditions Work in Record-Triggered Flows
- Salesforce Help: Process Automation Settings
- Salesforce Help: Manage Your Time-Based Automations
- Salesforce Architects: Record-Triggered Automation Decision Guide
- Salesforce Architects: Asynchronous Processing on the Lightning Platform
- Salesforce Architects: Asynchronous Processing Decision Guide
- Salesforce Developers: Security Considerations for Flow Design