# Flow Structural Conventions - Scheduled

<span class="fabric-editor-annotation" data-id="be7a8409-1ba7-4163-bb94-90bdcb9488e4" data-mark-annotation-type="inlineComment" data-mark-type="annotation">As detailed in the General Notes section, these conventions are heavily opinionated towards maintenance and scaling in large organizations. The conventions contain:</span>

- <span class="fabric-editor-annotation" data-id="be7a8409-1ba7-4163-bb94-90bdcb9488e4" data-mark-annotation-type="inlineComment" data-mark-type="annotation">a "[common core](https://wiki.sfxd.org/books/best-practices/page/flow-structural-conventions-common-core)" set of structural conventions that apply everywhere</span>
- <span class="fabric-editor-annotation" data-id="be7a8409-1ba7-4163-bb94-90bdcb9488e4" data-mark-annotation-type="inlineComment" data-mark-type="annotation">conventions for [Record Triggered Flows ](https://wiki.sfxd.org/books/best-practices/page/flow-structural-conventions-record-triggered)specifically   
    </span>
- <span class="fabric-editor-annotation" data-id="be7a8409-1ba7-4163-bb94-90bdcb9488e4" data-mark-annotation-type="inlineComment" data-mark-type="annotation">conventions for Scheduled Flows specifically (this page!)  
    </span>


## Scheduled Flow Design

As detailed in the Common Core conventions, despite it not being evident in the Salesforce Builder, there is a VERY big difference between the criteria in the Schedule Flow execution start, and an initial GET element in a Scheduled Flow that has no Object defined.

\- Putting criteria in the Start Element has less conditions available, but effectively limits the scope of the Flow to only these records, which is great in **big environments**. It also fires **One Flow Interview per Record**, and then bulkifies operations at the end.

![A screenshot of the Start element Entry Criteria.](https://wiki.sfxd.org/uploads/images/gallery/2023-08/scaled-1680-/image-1691673651182.png)

<p class="callout danger">An often-done mistake is to do the above selection, say "Accounts where Active = TRUE" for example, and then doing a Get Records afterwards, querying the accounts again, because of habits tied to Record-Triggered Flows.  
If you do this, you are effectively querying the entire list of Accounts X times, where X is the number of Accounts in your original criteria. Which is bad.</p>

  
\- On the opposite, putting no criteria and relying on an initial Get does a single Flow Interview, and so will run less effectively on huge amounts of records, *but* does allow you to handle more complex selection criteria.

![A screenshot of a Get Records with a description, the description is opened in pop-up view.](https://wiki.sfxd.org/uploads/images/gallery/2023-08/scaled-1680-/image-1691673874134.png)

<p class="callout info">In the first case, you should consider that there is only one record selected by the Flow, which is populated in `$Record` - much like in Record-Triggered Flows.  
In the second screenshot, you can see that the Choose Object is empty, but the GET is done afterwards - `$Record` is as such empty, but the Get Active Accounts will generate a collection variable containing multiple accounts, which you will need to iterate over (via a `loop` element) to handle the different cases</p>