What you can do
- Route by attributes. Build ordered logic using user, app, permission, risk, location, and custom fields.
- Create multi‑stage chains. Add as many sequential stages as you need.
- Use “Manager” anywhere. Insert Manager approval at any stage.
- See why a branch matched. Workflow records show the evaluation order, the branch that ran, and the match reason for audit.
Common recipes (copy and adapt)
- Department‑based scrutiny
Ifuser.department = Finance→ add CFO/Finance Controller after Manager.
Else → Manager → App Owner. - Role/level rigor
Ifuser.role = Contractor→ Manager + Security.
Ifuser.role = Full‑Time Employee→ Manager only. - High‑risk apps
Ifapp.risk = High→ Manager → App Owner → Compliance Officer.
Else → stop after App Owner. - Cost center owners
Ifapp.cost_center = Marketing→ Marketing Finance Partner.
Ifapp.cost_center = Engineering→ VP Engineering. - Regional compliance
Ifuser.location = EU→ Data Protection Officer.
Else → Manager → App Owner. - Team ownership
Ifuser.team = Engineeringand requesting GitHub → add DevOps Lead after Manager.
Ifuser.team = Customer Support→ skip DevOps, go to App Owner. - Sensitive job families
Ifuser.job_family IN [Finance, Legal, HR]→ Security/Audit stage.
Else → normal flow. - New hires / transfers
Ifuser.tenure < 90 days→ Manager + HR.
Else → Manager only. - Role elevation checks
Ifuser.current_role = AnalystAND requesting Admin entitlement → Director approval.
Else → standard flow.
How branching works
- Rules are evaluated top → bottom.
- The first matching branch runs.
- If nothing matches, a required fallback chain runs so every request has a path.
- Put your most specific rules first.
- Always include a comprehensive fallback.
Supported conditions and operators
- Standard if / else‑if / else routing with ordered evaluation.
- Expressions over: user, app, permission/entitlement, risk, location, title/level, and custom attributes.
- AND / OR, equality, set membership, comparisons (e.g., tenure
< 90), and nested conditions.
department = Finance AND risk = High→ add Security stage.location = EU→ add Data Protection stage.title >= Director→ skip Manager stage.
Build it: from zero to working in 5 steps
- Define attributes. Confirm the fields you’ll route on (e.g.,
user.department,app.risk,user.location, custom fields). - Order branches. Add branches from most specific to least specific.
- Add stages per branch. For each matched branch, add the sequential approver stages (e.g., Manager → App Owner → Security).
- Place Manager exactly where needed. Manager can appear at any stage.
- Add fallback + validate. Include a final fallback chain, run validation, and fix any flagged errors.
Visibility and auditability
Use Workflow records to see:- Which branches were evaluated and in what order
- Which branch matched and ran
- The explicit match reason
Performance guidance
- Flexible Approvals supports complex rules and long chains. Extremely large configurations can increase evaluation latency and time‑to‑approval.
-
Recommendations:
- Keep to ≤ 10 branches (chains) per approval workflow when possible.
- Keep to ≤ 50 condition rules per workflow when possible.
FAQs
Are parallel approvals supported?Approvals run sequentially across stages. For “parallel‑ish” behavior, put multiple approvers in the same stage; those approvers are evaluated with OR logic. What happens if an approver becomes unavailable mid‑stage?
Product policies apply to auto‑removal or reassignment. If not auto‑handled, the request is blocked with an actionable error until resolved. Will my existing approvals migrate?
Yes. Migration is designed to be transparent with safeguards to prevent disruption. What prevents broken configurations?
Validation blocks malformed chains until fixed.
Troubleshooting
- A request skipped the branch I expected. Check branch order; more specific rules must appear above broader ones. View the match reason in Workflow records.
- Manager stage didn’t trigger. Ensure Manager is explicitly placed at the intended stage of the matching branch.
- Latency feels high. Reduce total branches/conditions; prefer simpler predicates where possible.
- Compliance stage didn’t run. Confirm the risk/region attributes on the request match your condition logic (e.g.,
app.risk = High,user.location = EU).
Example: full configuration
Branches (evaluated top → bottom):-
If
requester.department = "Finance" AND request.risk = "High"- Manager
- Finance Ops
- Security
-
Else if
requester.location = "EU"- Manager
- Data Protection Officer
-
Else (fallback)
- Manager
Glossary
- Branch - A conditional path (if / else‑if / else) that may run.
- Stage - A sequential step within a branch with one or more approvers.
- Fallback - The final, always‑present chain that runs when no other branch matches.
- Match reason - Recorded explanation of why a branch ran (for audit/debugging).