Core Concept: Place vs. Moment
Because queues and assignment rules are always taught together, people often assume they perform the same function. They do not. The dividing line between them comes down to Place versus Moment.
- A Queue is a place that lasts. A record sits in a queue, owned by nobody individually, until a team member accepts it and takes personal ownership. A record can sit in a queue for days.
- An Assignment Rule is a single decision. It is a moment in time. It fires once when the record is created (or edited to meet criteria), picks a destination, and then its job is done. It holds nothing.
Here is the definitive proof that they are entirely separate tools: you can use either one completely on its own.
- Assignment rules work strictly on the
LeadandCaseobjects. They do not work on custom objects or Accounts. - Queues, however, work on
Lead,Case,Task,Order,Service Contract,Knowledge Article, and custom objects. - This means a custom object can have a queue but no assignment rule (relying on Salesforce Flow for routing instead). Conversely, a rule can send a lead straight to a specific user, bypassing queues entirely.
Why do we need both?
- The Queue solves the problem of: "Nobody owns this yet, but the team still needs to see it." Without queues, every record would require a named owner. If that one person goes on vacation, they become a bottleneck.
- The Assignment Rule solves the problem of: "A human shouldn't have to manually read every new record to decide who gets it."
The standard lifecycle of a routed record looks like this: The rule fires → the record lands in the queue → it waits → a team member accepts it → ownership changes to that user → the queue's job is over.
Two final technical details to remember: Assignment rules do not do round-robin routing; they match on criteria, and the first match wins. They also run relatively late in the Order of Execution, specifically after Apex triggers.
Note: Only one assignment rule can be active per object at a time. Teams frequently build a complex new rule, forget to check the "Active" box, and waste hours debugging why the old rule is still firing.
- Rule: The queue is a permanent place. The rule is a one-time moment. The public group is an audience that owns nothing.
- Gain: Queues provide a shared inbox that all members can view and work from until someone formally takes ownership.
- Price: A record owned by a queue has no individual owner. Therefore, anything reliant on the owner field—such as role hierarchy access, rep-based reports, or ownership-based sharing rules—will not apply while it sits in the queue.
- Limits: Assignment rules execute top-down, and the first matching criteria wins. Only one rule can be active per object. Because they run after Apex triggers in the save order, a trigger that sets an owner will get overwritten by an active assignment rule.
- Mirror (Public Groups): Public groups own nothing. They simply act as an audience list used for sharing rules, list views, and folder access.
- Modern Alternative (Omni-Channel): In Service Cloud, Omni-Channel is the modern replacement for the traditional "queue-pull" model. Instead of agents pulling work from a queue, Omni-Channel actively pushes work to agents based on their real-time capacity and skills.
Core Q&A
Q: How would you design lead routing so that web leads go to a nurture queue, but enterprise leads (>1000 employees) route to named Account Executives based on region?
A: You set up a Lead Assignment Rule, keeping in mind that the system evaluates entries top-down and stops at the first match:
- Entry 1:
Employees > 1000ANDRegion = 'EMEA'. Route this to the EMEA AE (or preferably, an EMEA-AE queue for better load balancing). - Subsequent Entries: Repeat the above logic for each specific region.
- Final Entry (Catch-all):
Lead Source = 'Web'routes to the Nurture Queue.
Always place your highly specific rules at the top and generic catch-alls at the bottom. Also, note that native assignment rules match criteria but do not round-robin assign. If you need true round-robin distribution among your AEs, you will need a custom flow, Apex, or a third-party app.
Scenario-Based Follow-ups
Q1: When a record is assigned to a queue, who can see it? And what exactly happens when a user clicks 'Accept'?
A1: While the queue owns the record, every member of that queue can see it. Users above them in the role hierarchy can also see it (if hierarchy access applies). Any queue member can open and work on the record.
Clicking 'Accept' transfers the standard OwnerId field from the Queue to that specific User. From that moment forward, standard user-based sharing, role hierarchy, and reporting rules take over. This is the classic "pull" model of Salesforce routing.
Design Tip: Your Org-Wide Defaults (OWD) and sharing rules must allow members to see queue-owned records. Additionally, if management wants a report on "unassigned work," you build that by filtering for records where the Owner is the Queue.
Q2: An Assignment Rule and a Record-Triggered Flow both attempt to set the owner of a Case. They conflict. Which one wins and how do you resolve it?
A2: This comes down to the Order of Execution. The sequence looks like this: Before-save flows → Before triggers → After triggers → Assignment rules → After-save flows.
- An Assignment Rule will overwrite any owner set by a before-save flow or an Apex trigger.
- An after-save flow runs late enough to overwrite the Assignment Rule.
To resolve this, you must choose one authority for ownership routing per object. If Assignment Rules own routing, do not attempt to set the owner in a Flow. If your routing requirements are too complex for native rule criteria, completely disable the Assignment Rule and handle all routing logic centrally in your Flows or Apex.
๐ 2-Minute Self-Check
Q1. You must update a field on a record right as it is being saved. Which automation tool should you use?
A1. A before-save record-triggered flow. It is highly performant because it triggers before the database save, meaning it requires no extra DML statements and avoids a second save cycle.
Q2. A flow works perfectly during testing but fails when a user imports 5,000 rows of data. What is the likely cause?
A2. You likely placed a query (Get Records) or a DML element (Update/Create Records) inside a loop. You must always collect variables into a record collection inside the loop, and perform the DML action once, outside the loop, to respect Salesforce limits.
Q3. The sales manager wants round-robin lead assignment. Can you build this using native Lead Assignment Rules?
A3. No. Assignment rules strictly match on criteria (first match wins). They do not have memory or rotational logic. True round-robin routing requires a Flow, custom Apex, or a dedicated AppExchange package.