The Flow With No Fault Path (Enjoy Your Cryptic Error)
“Deployed a screen flow with no fault handling. Users got 'An unhandled fault has occurred' and I got 50 support tickets.”
What Happened
Built a beautiful screen flow for the Mobilization Funding team to submit construction funding requests. Tested it with good data. Deployed it. Forgot fault paths entirely. First user entered a duplicate value on a unique field and got the raw Salesforce error page. No custom message, no graceful recovery. The ops team thought the whole system was broken and called me in a panic.
The Wrong Way
// Screen Flow: Construction Funding Request // Screen 1 → Create Records (Funding_Request__c) → Confirmation Screen // // No fault connector on Create Records. // If the DML fails (duplicate, validation rule, // required field missing), the user sees: // "An unhandled fault has occurred in this flow" // with a raw exception ID. Useless.
The Right Way
// Screen Flow: Construction Funding Request
// Screen 1 → Create Records (Funding_Request__c)
// ├── Success → Confirmation Screen
// └── Fault → Error Screen
// Display: "We couldn't submit your request.
// Error: {!$Flow.FaultMessage}
// Please check your entries and try again."
//
// EVERY element that does DML or callouts
// needs a fault path. No exceptions.The Lesson
Add fault paths to every single DML and callout element in your flows. Your users are not Salesforce developers. They cannot debug 'An unhandled fault has occurred.'
Enjoyed this? Get more like it.
Glen's Musings — AI, investing, and building things. Occasional. Free.
More Flows Mistakes
The Infinite Flow Loop That Ate Production
Record-triggered flow updates the same object. Flow fires again. And again. And again.
Read morePainfulGet Records Inside a Loop: The Governor Limit Speedrun
Put a Get Records element inside a loop. Hit 100 SOQL queries on the 101st record.
Read morePainfulHardcoded Record IDs in Flows: The Sandbox Surprise
Hardcoded a Record Type ID in a flow. Deployed to production. Different ID. Everything broke.
Read more