Not verified hands-on. This article was written from primary documentation rather than reproduced in an org, so it carries no tested-release badge. If you run it and something differs, say so in the comments and it gets tested and corrected.

The short answer: an approval process is entry criteria, an ordered list of steps, an approver for each step, and three sets of actions that fire on submission, approval and rejection. Almost everything that goes wrong comes from four places: the record lock, a step criterion that sends the record down the wrong branch, an approver resolved from a blank field, and the fact that an active process is nearly uneditable.

Entry criteria are evaluated once

Entry criteria decide whether a record may be submitted. They are checked at submission and never again. A record that qualified when it entered stays in the process even if the amount drops or the owner changes.

So “Amount greater than 50,000” is not a condition the record is held to. It is a gate it passed through once. If a record fails entry criteria the submitter gets a generic error, so write criteria that match something visible on the page layout.

Steps, and the branch nobody tests

Each step has its own criteria and a setting for what happens when a record does not meet them: skip to the next step, or reject the record outright. That second option is the default people forget to check.

Classic failure. Step one is “Amount &gt. 100,000”, step two is the VP. A 40,000 deal fails step one, and if the step rejects rather than skips, it dies without a human seeing it. Test every step with a record that fails it. Steps cannot be reordered once the process is active either, so decide the order first.

Choosing approvers

  • Let the submitter choose. Easy to configure, impossible to audit. Wrong for anything financial.
  • Automatically assign using a user field, usually Manager. The standard choice and the standard failure: a blank Manager makes submission fail outright. Report on users with no Manager before go-live.
  • Assign to a named user or queue. A queue beats a named user, who goes on holiday.
  • A related user field on the record, which lets you route by account owner or a lookup.

A step can hold several approvers, unanimous or first-response. Unanimous is right for risk approvals and wrong where speed matters, because one silent approver holds the record indefinitely. Delegated approvers work only if the step allows delegates. The Delegated Approver field on the user record does nothing by itself.

The record lock

A submitted record is locked by default. The process definition decides who can still edit it: administrators only, or administrators plus the currently assigned approver. Everyone else, owner included, sees a read-only page.

The lock applies to automation. A record-triggered flow, trigger or integration that updates a locked record fails, and the error reaches whoever triggered it rather than whoever configured the approval. Apex can lift it:

Approval.unlock(recordIds, false);
Approval.lock(recordIds, false);

The second argument controls partial success. Field updates configured as approval actions behave like workflow field updates: they bypass validation rules and do not re-fire other automation unless you tick the re-evaluation option.

Recall

Recall exists only if you enabled it on the process, and it is off by default. Without it, a submitter who spots a mistake has to find an approver willing to reject.

Recall actions are their own action set. If submission set a status to “In Approval”, add a recall action to put it back, or recalled records sit in a status that means nothing.

Editing a live process

You cannot change steps, criteria or approver configuration while a process is active. Deactivate, edit, reactivate. Deactivating with records in flight leaves them locked mid-process, and they do not resume cleanly.

Clone the process, change the clone, clear the pending queue, then swap during a quiet window.

Reporting

Approval data lives in ProcessInstance, ProcessInstanceStep and ProcessInstanceWorkitem, and a standard report type covers approval history. The related list answers questions about one record. The report answers “what is sitting with whom”, the number worth watching weekly.

Frequently asked

Can a flow submit a record for approval? Yes, there is a Submit for Approval action in Flow, and Apex has Approval.process(). Both still honour the entry criteria.

Why does my integration user hit “record is locked” errors? The record is in an approval process and that user is neither an administrator nor the assigned approver. Grant Modify All on the object, or call Approval.unlock() first.

Can I skip a step conditionally? Yes, set step criteria and choose to approve or move to the next step for records that fail them. Read that setting carefully, because the alternative rejects the record.

Do approval emails work from a phone? Yes, and with email approval response enabled an approver can reply with APPROVE or REJECT on the first line. The sending address has to match their Salesforce email.