Skip to main content
New tool CRON Expression Builder — preview next run times before you schedule Apex. Open the builder →
Process Builder to Flow Migration: A Real-World Case Study
Flow

Process Builder to Flow Migration: A Real-World Case Study

Migrating Process Builder to Record-Triggered Flow without breaking revenue-critical workflows: inventory, consolidation, Before-Save, volume testing, and a two-week parallel run.

How to Migrate Process Builder to Record-Triggered Flow Without Breaking Revenue-Critical Workflows

A Salesforce BA's field guide from pharmaceutical commercial operations

By Sri Charan Reddy Pennaka, Senior Business Analyst (Salesforce), Aurobindo Pharma USA · Salesforce Certified Administrator · Platform Developer I

Why this one is on the clock

If you're a Salesforce admin or business analyst, you've probably stared at a list of legacy Process Builders and Workflow Rules and wondered where to start. Salesforce has retired both, so the migration now has a deadline attached to it.

The part nobody warns you about is that every automation you touch is wired to revenue. Pipeline stage progression, pricing workflows, the dashboard your VP of Commercial Ops opens every Monday morning. One missed null check and forecasting breaks for the whole quarter.

I led this migration inside a pharmaceutical commercial operations team, where automation drives new product launch readiness, WAC/SWP pricing governance, and sales pipeline forecasting. The technical rebuild turned out to be the easy part.

The short version

A Process Builder to Flow migration is a governance project that looks like a technical one. Treat it as a rebuild and you'll ship the bug into a newer tool. Treat it as a refactor, with discovery, consolidation, testing, and a parallel run, and you'll come out with cleaner, faster automations than you started with.

Where the 1:1 port breaks

Most teams approach this migration the same way:

  1. Open Process Builder.
  2. Rebuild each process as a Record-Triggered Flow.
  3. Activate the new one, deactivate the old.
  4. Move to the next.

That works on simple processes. It fails on the ones that matter.

In a real commercial operations environment, a single Opportunity record is touched by pricing workflows, pipeline stage progression rules, forecast category mapping, validation rules, approval processes, and Apex triggers from upstream integrations. When five Process Builders fire on the same record in an undefined order, the behavior emerges from the timing. Rebuild each one as a separate Flow and you carry the bug across into a new tool. Flow also governs execution order differently, so logic that worked silently for years starts firing in the wrong sequence, and nobody catches it until forecast accuracy drops two weeks before quarter close.

The risks I see most often:

  • Order of execution drifts. With multiple Process Builders on the same object, Salesforce gives no guaranteed firing order, and the official documentation says you cannot control it. Record-Triggered Flows fix that with explicit trigger order numbers (1 to 2,000), falling back to alphabetical-by-API-name as a tiebreaker. Skip those numbers when you consolidate and you've traded one kind of unpredictability for another.
  • Null handling is stricter in Flow. Conditions that quietly passed in Process Builder will block records, sometimes silently.
  • Bulk context behaves differently. Record-Triggered Flow scales on its own terms, so data loads that ran fine before can hit governor limits after migration.
  • Audit trails get lost. Flows don't inherit Process Builder's description fields or criteria comments, so you have to re-document the logic by hand.

In pharma commercial ops, any one of those breaks something a regulator, an executive, or a finance team is watching.

The five-step pattern I use

I refined this across a 40-application migration earlier in my career at a Tier-1 telecom client, and it's the same pattern I apply daily at Aurobindo Pharma on revenue-critical Sales Cloud workflows.

Step 1: Inventory before you touch anything. Pull every active Process Builder and Workflow Rule per object. Map them to record types, trigger conditions, and downstream actions. Salesforce's Migrate to Flow tool gives you a starting list, but it won't show you order of execution or interdependencies. You chart those yourself in a spreadsheet: object, automation name, trigger condition, action, dependent fields, owner.

Step 2: Consolidate, don't translate. This is the biggest unlock in the whole migration. One Record-Triggered Flow per object, per trigger context (Before-Save vs. After-Save), with all logic consolidated into branching paths. Five Process Builders on Opportunity become one Flow. Order becomes explicit instead of emergent, and future debugging happens in one place instead of five.

Step 3: Use Before-Save aggressively. If you're only updating fields on the same record that triggered the Flow, use a Before-Save Record-Triggered Flow. It runs significantly faster than After-Save because it avoids an extra DML operation, and it sidesteps the trigger-order question entirely. In high-volume environments (think a launch cycle where Opportunity volume spikes three to five times normal) this alone keeps save times stable. Caveat: Before-Save Flows can't call subflows, send email notifications, or post to Chatter. For those you still need After-Save.

Step 4: Test with realistic data volumes. Don't test with one record. Bulk-load 200+ records via Data Loader and confirm the Flow doesn't hit SOQL or DML governor limits. Process Builder was never really forced to pass this test. Flow is.

Step 5: Run parallel before you cut over. This is the step everyone skips. Activate the new Flow with the old Process Builder still on, and log both outcomes to a custom object or a debug log. Filter your parallel-run logging to exclude records where both fired, or you'll log duplicates, and both automations will update the same fields twice. Use a Migration_Status__c checkbox to gate the new Flow so only flagged records run through it. Compare for two weeks, then deactivate Process Builder. Yes, it's slower. It also catches the one bug that would otherwise show up on the executive dashboard the morning of board reporting.

What it produced

On the team I support today, this approach migrated revenue-critical automations (pipeline stage progression, pricing workflows, forecast category mapping) with zero forecasting incidents during cutover. The consolidated Flow architecture has held up across launch cycles where Opportunity record volume spikes well above baseline.

Concretely: across the Sales Cloud objects in scope, roughly 40 active Process Builders became 15 to 20 Record-Triggered Flows. That is a lot less surface area to debug, document, and hand off.

The better evidence is what stops happening. Fewer "the dashboard is wrong" Slack messages on Monday morning. Fewer ad-hoc fixes the day before quarter close. Cleaner audit trails when finance asks why a pricing field changed, and when.

That last one matters more than it sounds. In a regulated industry, "we don't know why the field changed" is not an acceptable answer.

Where to start

Process Builder retirement is a chance to pay down the governance debt that accumulated while nobody owned the automation layer. Teams that treat the migration as a 1:1 port will spend the next two years debugging the same bugs in a new UI. Teams that treat it as a refactor come out with an automation surface they can audit, scale, and hand off.

Inventory first. Consolidate, don't translate. Use Before-Save where you can. Test with volume. Run parallel before you cut over.

If you're staring at the migration backlog right now, don't try to plan the whole thing. Pick the highest-risk object in your org, usually Opportunity or Account, and migrate one consolidated Flow end-to-end. What you learn on that first one will reshape every one after it.

Key learnings

  1. Process Builder migration is a governance refactor, not a 1:1 port. Teams that treat it as a port ship the same defects into a newer tool.
  2. Consolidate aggressively: one Record-Triggered Flow per object, per trigger context, with branching logic, rather than one Flow per legacy automation. In this program, roughly 40 active Process Builders consolidated into 15 to 20 Record-Triggered Flows.
  3. Set trigger order numbers explicitly. Process Builder's firing order was officially uncontrollable. Flow gives you control, so use it. The defaults will not save you.
  4. Use Before-Save where the use case allows. It's significantly faster than After-Save and sidesteps trigger ordering entirely. Just remember: no subflows, no email, no Chatter from Before-Save.
  5. Test with realistic data volume. Bulk-load 200+ records via Data Loader before cutover. Flow scales differently under load than Process Builder did.
  6. The parallel-run period is non-negotiable. Two weeks of side-by-side execution catches the bug that would otherwise surface on the executive dashboard. Use a migration-status checkbox to prevent double-updates during that window.
  7. Re-document everything. Process Builder description fields don't carry across to Flow, and the "why does this rule exist" knowledge is lost unless you write it down during the migration rather than after.
  8. The inventory is worth as much as the rebuild. Most orgs can't tell you how many active automations they run, and the act of inventorying surfaces governance debt that was invisible before.

Sri Charan Reddy Pennaka is a Senior Business Analyst (Salesforce) leading Sales Cloud automation governance in pharmaceutical commercial operations. He is a Salesforce Certified Administrator and Platform Developer I, and a DBA candidate.

Newsletter

One email every Tuesday

New guides, tool updates, and the release-note changes that break things.

No spam. Unsubscribe in one click.

Comments

Loading comments...

Leave a Comment