I’ve been building Salesforce automations for years, and I still discover Flow Builder capabilities that surprise me. Most admins learn the basics — Record-Triggered Flows, Get Records, Update Records — and stop there. But Flow Builder has matured into a genuinely powerful platform, and some of its best features are tucked away where you’d never think to look.
Here are 15 features I wish I had known from day one.
1. Debug Mode with Detailed Execution Logs
When a Flow misbehaves, most people add screen components to print variable values. There’s a better way. Click Debug from the Flow canvas, and you get a step-by-step execution trace showing every element that ran, every variable’s value at each step, and exactly where the flow exited or errored.
You can even inject test input values before running, which means you can simulate a record trigger without needing to actually create or modify a record. This alone has saved me hours of troubleshooting.
What the Debug Panel Shows
- Element name and type
- Variables before and after the element executes
- Loop iteration counts
- Fault path triggers with the full error message
2. Custom Error Messages on Record-Triggered Flows
Instead of showing Salesforce’s generic “An error occurred” message, you can surface a meaningful, user-friendly error. In any record-triggered flow, add a Custom Error element (under Interaction in the element palette). You can set the error at the page level or field level — field-level errors appear inline next to the specific field that caused the problem.
Custom Error elements are especially useful for validation logic that’s too complex for standard Validation Rules but doesn’t warrant a full Apex trigger. You get user-friendly inline messages without writing a single line of code.
The Problem
A Flow needs to notify only unsubscribed contacts from a large list. The original build uses a loop with a Decision element inside, creating dozens of elements and hitting CPU limits on large datasets.
The Solution
Replace the loop-decision-assignment pattern with a single Collection Filter element. Define the conditions (Do_Not_Contact__c = false AND Email != null) directly on the collection. The output is a clean filtered subset — no loop, no CPU risk.
3. Collection Filters (No More Loops to Subset Data)
Before Collection Filters existed, filtering a collection meant building a loop, an assignment, and a decision. Now you can do it in one element.
Collection Filter lets you define conditions — similar to a record filter — applied directly to a collection variable. The output is a new, filtered collection. You can combine up to 10 conditions with AND/OR logic.
Example: you query all Contacts on an Account, then use a Collection Filter to isolate only those with Email != null and Do_Not_Contact__c = false before sending notifications. Two elements instead of a loop-decision-assignment trio.
4. Collection Sort
Similarly, Collection Sort lets you order a collection by one or more fields without a custom formula or loop. Sort Contacts by LastName ascending, then by CreatedDate descending — done in a single element.
5. The Component Hierarchy in Flow
Understanding how Flow components relate to each other prevents a lot of architecture mistakes.
6. Subflows — Reusable Logic Modules
Subflows let you call one flow from inside another. I use this constantly to extract reusable logic — a “Send Notification Email” flow, a “Create Task for Owner” flow — and then call them from multiple parent flows.
- The called flow must be an Autolaunched Flow (no trigger) when called from a background context (Record-Triggered or Scheduled Flow). Screen Flows can call other Screen Flows as subflows.
- You can pass input and output variables between parent and child
- The child flow runs in the same transaction as the parent
This is the closest thing to a reusable function in the Flow world.
7. Action Calls vs. Apex Actions
Action elements can invoke:
- Quick Actions
- Email Alerts
- Flows (subflows, but also cross-object)
- Apex methods marked with
@InvocableMethod - External Services (OpenAPI-defined integrations)
For complex logic, I prefer writing a focused @InvocableMethod in Apex rather than a sprawling Flow. Keep the Flow as the orchestrator and push business logic into Apex where it’s easier to test and maintain.
8. Auto-Layout Mode
If you’re still using Freeform canvas, switch to Auto-Layout. Elements snap into a vertical flow, branches split cleanly, and the diagram stays readable as complexity grows. You can toggle between modes anytime without losing your logic.
Auto-Layout also makes it much easier to insert new elements between existing ones — just click the connector and choose an element type.
9. Conditional Visibility on Screen Flow Components
Every component on a Screen element has a Conditional Visibility section. Set conditions to show or hide fields based on other field values without navigating away from the screen.
Example: show a “Secondary Approver Email” field only when the user selects “Requires Two Approvers.” This keeps screens clean and reduces user confusion.
10. Custom Navigation Buttons in Screen Flows
By default you get Previous, Next, and Finish. But you can:
- Rename any button (change “Finish” to “Submit Request”)
- Hide the Previous button on a specific screen
- Conditionally show/hide buttons using formulas
In the Screen element properties, expand Configure Frame to find navigation settings.
11. Pause Elements for Long-Running Processes
Pause elements allow a flow to wait until a specific time or until a platform event fires. The flow suspends (freeing the transaction) and resumes automatically.
Pause Element Use Cases
- Wait 24 hours after an Opportunity closes, then send a survey
- Wait until an external system fires a platform event confirming an order was processed
- Paused flows appear in the Paused Flow Interviews list in Setup
12. Flow Trigger Explorer
Navigate to Setup > Flow Trigger Explorer, select an object, and see every Flow, Process Builder, and Workflow Rule that fires on that object — along with their execution order. This is invaluable for debugging unexpected behavior when multiple automations interact.
13. Reactive Screens (Reactive Components)
With Reactive Screens, components on the same Screen element can react to each other’s changes in real time — no server round-trip required. Change a picklist and a dependent field updates instantly.
Enable this in the Screen properties under Reactivity. Not all standard components support it yet, but coverage improves with each release.
14. Formula Resources vs. Get Records
Before adding a Get Records element, ask: can I derive this value from a formula? Formula resources execute in memory with zero SOQL queries. Getting the current date, doing arithmetic on existing variables, constructing a string — all achievable with formulas.
Every avoided Get Records element reduces your SOQL consumption and speeds up the flow.
Any Flow element that writes to the database — Create Records, Update Records, Delete Records, Apex Actions — can fail silently if its Fault connector is unwired. Make it a habit to attach a Fault connector on every such element. Route it to a Custom Error element in screen flows, or a Create Records element that logs to a custom error object in background flows. Five minutes of fault wiring prevents hours of mystery debugging.
15. Flow Fault Paths — Default Fault Handling
Every element that can fail (Get Records, Create Records, Apex Actions, etc.) has an optional Fault connector. If you don’t wire it up, any error terminates the flow and rolls back the transaction — sometimes silently.
Best practice: wire a Fault connector from every data-modifying element to a Custom Error element or a Create Records element that logs the failure to a custom object. In screen flows, always give the user a meaningful error screen instead of a blank page.
Putting It All Together
The flows I’m most proud of share a common structure:
- Collection filters and sorts instead of loops where possible
- Subflows for reusable logic
- Fault paths on every critical element
- Debug runs before deployment
- Custom error messages so users know what went wrong
Flow Builder is genuinely capable of handling complex business processes — but only if you know what it can do.
Which of these features surprised you the most, or which one are you going to implement first in your org? Drop your answer in the comments — I’m especially curious how many people are already using Reactive Screens in production.
Knowledge Check
How did this article make you feel?
Comments
Salesforce Tip