The Switch job scheduler has the following (sometimes conflicting) objectives, in order of importance:
Maximize overall throughput, that is, process as many jobs as possible in a given amount of time.
Allow users to specify individual job priorities: a task for a job with a higher priority should be executed first. This can be used to "rush" a particular job through a flow, or to define a high-priority flow (by assigning a priority to all jobs in the flow).
Process jobs in order of arrival, that is, jobs should arrive at the end of a flow in the order they were placed in the flow to begin with (FIFO = first-in/first-out).
These objectives are not absolute: enforcing some particular order of execution to the letter would sacrifice throughput and/or overly complicate the implementation.