Handoffs & SLAs
Revenue leaks at every seam where a record, owner, stage, or responsibility changes hands. Here is how I instrument the four that matter, with the routing, the reason codes, and the Sales-to-CS transfer that decides the renewal.
I traced a dead lead once because marketing swore they had sent 40 qualified leads that month and sales swore every one was junk. There was no data to settle it. Nobody had built the accept-reject step, so leads routed into a queue, sat, and died in silence, and both teams were right inside their own version of the story. That fight has no winner because the evidence was never captured. Revenue leaks anywhere a record, owner, stage, or responsibility changes hands, and every one of those seams is a place accountability blurs until someone attaches a number to it.
That someone is ops. A handoff is a contract between two teams, and an uninstrumented contract is a handshake nobody wrote down. My job is to write it down: define what crosses the seam, put a clock on it, force an accept-or-reject, and report the leak by source until the argument turns into a fix.
Map the seams before you fix any of them
A lead-to-renewal path has four seams where value crosses a boundary, and each one leaks in its own way. Draw the chain first, because you cannot instrument a handoff you have not located. The picture below is the one I put on the wall in the first week of any engagement.
The four seams are not equally leaky, and they do not fail for the same reason. Routing leaks to latency. Acceptance leaks to silence. The stage line leaks to definitions that mean different things on each side. The Sales-to-CS transfer leaks context. I fix them in that order because the earliest seam feeds every one downstream: a lead lost to a slow route never reaches the acceptance step at all.
Speed-to-lead is the seam with the most leverage
65% of buyers expect a response in under 1 hour, and the odds of qualifying a lead fall off a cliff long before that ceiling (HubSpot and LeanData, 2024-25). This is the best-documented number in the domain and it is almost entirely an operations problem, not a rep-effort problem. A lead that routes in seconds and gets a call in minutes qualifies at a far higher rate than the same lead worked three hours later, and the difference is the routing architecture, not the salesperson.
So I never queue leads for a human to pick up. Routing fires off the CRM the instant the record lands: round-robin by territory, capacity-aware, with the SLA clock starting on arrival rather than on assignment. Routing is a latency problem before it is a fairness problem, which is the argument I make in full in routing is latency and lead routing as a distributed system. The short version: measure the seconds, not the org chart.
The clock is only useful if it can trip. A breach that surfaces in a weekly report is an autopsy. I wire the SLA to fire in real time, so the record raises a flag the moment it ages past the threshold instead of at Friday’s review.
// Fires on Lead insert/update; stamps the SLA deadline and flags a breach
trigger LeadSlaClock on Lead (before insert, before update) {
for (Lead l : Trigger.new) {
if (l.OwnerId != null && l.SLA_Start__c == null) {
l.SLA_Start__c = System.now();
l.SLA_Deadline__c = System.now().addMinutes(60);
}
if (l.SLA_Deadline__c != null
&& System.now() > l.SLA_Deadline__c
&& l.First_Response_At__c == null) {
l.SLA_Breached__c = true; // downstream Flow posts the Slack alert
}
}
}
The field pattern matters more than the language. A start timestamp, a deadline, a first-response timestamp, and a breach flag give you the four columns every SLA report needs. Once those exist, breach rate by source and by rep becomes a query instead of a debate.
The accept-reject loop nobody sets up
The stage everyone skips is acceptance. Marketing hands a lead over, and unless sales has to explicitly accept it or reject it with a reason, you never learn whether the lead was any good. That gap is the exact hole that killed my 40 leads: they were neither accepted nor rejected, so they were unmeasurable. Build the closed loop and the argument ends. Rejections carry a reason code, acceptance rate and downstream conversion get reported by source, and “marketing sends junk” becomes a claim I can prove or kill with one query.
-- Rejection reasons by source over 90 days: turns a standing fight into a ranked list
SELECT Lead_Source__c, Reject_Reason__c, COUNT(Id) rejects
FROM Lead
WHERE Status = 'Rejected'
AND Reject_Date__c = LAST_N_DAYS:90
GROUP BY Lead_Source__c, Reject_Reason__c
ORDER BY COUNT(Id) DESC
Run that once and the pattern jumps out. If 70% of rejections from one source carry reason “no budget authority,” the fix is a scoring-model change, not a lecture about lead quality. If they carry “duplicate of existing account,” the fix is a dedup rule at capture. The reason code routes the fix to the right owner, which is the entire point.
The deeper problem under most handoff failures is that MQL, SQL, and “opportunity” mean different things to the teams passing them. That mismatch is the weakest link in the chain, because a definition gap corrupts every metric built on top of it. Marketing’s MQL bar and sales’ idea of a real opportunity have to be written down and signed off by both sides, or every handoff turns into a re-negotiation at the seam. This is the same failure I describe for numbers in CRM and data governance: when two teams debate which value is right, ownership is missing.
The funnel below is that same math you can toggle. Flip between the loose-seam funnel and the tight-seam funnel and watch where the survivors appear.
View as table
| Stage | Value |
|---|---|
| MQL | 1,000 |
| SAL (accepted) | 400 |
| SQL | 200 |
| Opportunity | 160 |
| Won | 40 |
Conversion at each seam is not a marketing vanity metric. It is throughput, and throughput has a dollar value per day. The playground below lets you feel how a handoff fix moves the whole engine: lift the win rate two points or shorten the cycle by compressing the accept step, and the daily pipeline number moves with it.
of pipeline throughput per day
The one metric that captures the whole engine. Move any lever and watch the daily number. Shortening the cycle and lifting win rate compound; adding raw opps is the slowest lever of the four.
of pipeline throughput per day: $29k
The Sales-to-CS transfer decides the renewal
The closed-won handoff gets treated as a formality, and then the account churns at renewal because CS inherited a logo with no story. A deal that reaches CS with nothing but a company name is a renewal already at risk. The transfer has to carry the context that lived in the rep’s head: the meeting notes, the actual use case they bought for, the success criteria the champion cares about, and a 90-day onboarding plan with a named owner. Without that, CS spends the first quarter reverse-engineering why the customer bought, which is the same quarter that decides whether they stay. That first-90-days context transfer is the hinge of net revenue retention, the mechanic I walk through in the right side of the bowtie.
Multi-threading is the underrated half of this seam. Deals over $50K that were multi-threaded won at a rate 130% higher than single-threaded ones, yet 78% of deals still reach close single-threaded (Ebsta and Pavilion, 2025). A single-threaded deal handed to CS is a renewal riding on one relationship, and when that champion leaves, the account goes dark. The handoff record should carry the buying group, not one name.
I enforce the transfer with a required-fields gate on the stage change to Closed Won, so the context cannot be skipped:
Validation rule on Opportunity (fires when moving to Closed Won):
AND(
ISPICKVAL(StageName, "Closed Won"),
OR(
ISBLANK(Primary_Use_Case__c),
ISBLANK(Success_Criteria__c),
ISBLANK(Onboarding_Plan__c),
Buying_Group_Contacts__c < 2
)
)
→ "Add use case, success criteria, onboarding plan, and at least
two buying-group contacts before closing."
Keep the gate to the four fields that decide the renewal. A validation rule that demands twenty fields at close teaches reps to fake data or close in a spreadsheet, which is the failure I flag in the required-fields tax. Gate the critical few, keep the close fast.
The two handoff regimes, side by side
| Handoff that leaks | Handoff that holds | |
|---|---|---|
| Lead routing | Queued for a human to assign later | Auto-routed in seconds, SLA clock starts on arrival |
| Acceptance | Silent; nobody accepts or rejects | Explicit accept or reject with a reason code |
| Stage definitions | MQL and SQL mean different things per team | Written, signed off by both sides, recalibrated quarterly |
| Threading | Single contact carries the deal | Buying group of two or more travels with the record |
| Sales to CS | Company name and a closed-won stamp | Notes, use case, success criteria, 90-day plan |
| Breach visibility | Discovered in Friday's report | Slack alert the moment the SLA trips |
Benchmarks I calibrate the seams against
Set the SLA targets against numbers, not opinion. These are the ones I start from and then adjust for the reader’s motion, because a self-serve funnel and an enterprise consensus sale do not share a seam profile.
| Seam metric | Benchmark | Source |
|---|---|---|
| First-response expectation | 65% expect a reply in under 1 hour | HubSpot / LeanData 2024-25 |
| SAL to SQL conversion | 52.7% | gradient.works 2025 |
| MQL to SQL (aligned teams) | 30% or higher vs 13-21% typical | gradient.works 2025 |
| SQL to Opportunity | 30-59% | gradient.works 2025 |
| Multi-thread win lift (deals over $50K) | +130% | Ebsta / Pavilion 2025 |
| Deals still single-threaded | 78% | Ebsta / Pavilion 2025 |
The gap between “typical” and “aligned” on the MQL-to-SQL row is the whole business case. Teams with a shared, signed-off definition roughly double that conversion, and no amount of extra spend closes a definition gap.
Here’s how I’d build it: the handoff instrumentation ladder
This is the order I stand up a handoff system. Each rung closes one leak and makes the next rung measurable, so build them in sequence rather than in parallel.
- 1
1. Write the definitions together
MQL, SAL, SQL, and the closed-won transfer, signed off by both teams in one document. This is the weakest link, so it goes first: every metric downstream inherits these definitions.
- 2
2. Route instantly, off the CRM
Round-robin by territory, capacity-aware, SLA clock stamped on arrival. Never queue a lead for manual assignment. This is the highest-leverage seam, so automate it before anything else moves.
- 3
3. Force accept-or-reject with a reason
No lead sits in limbo. Sales accepts it or rejects it with a coded reason, so lead quality becomes a number per source instead of a standing fight.
- 4
4. Alert on breach in real time
A Slack ping the moment a lead ages past SLA, wired off the deadline field. Discovery at the seam, not in the weekly report.
- 5
5. Gate the Sales-to-CS transfer
A validation rule on Closed Won requires use case, success criteria, onboarding plan, and at least two buying-group contacts. The renewal starts with context, not a cold read.
- 6
6. Recalibrate quarterly
Review rejection reasons and re-tune the MQL bar against actual downstream conversion. Buyer behavior shifts; a definition set once and frozen drifts out of alignment inside two quarters.
Pick the seam that is bleeding worst, instrument it end to end this week, and let the conversion lift after one cycle pay for the next rung. The leak map does not fix itself, but it does tell you exactly where to put the first clock.
Keep reading
All guides →Pipeline & forecasting
How I build a forecast leadership trusts: five inputs beyond coverage, a maturity ladder from weighted-score to ML, and a daily snapshot diff that catches drift on Tuesday instead of week 11.
RunTerritory & quota design
Audit the territory before you blame the rep: balance on opportunity, ramp-adjust capacity down to the number reps can actually produce, and set quota against real potential so the target is earnable.
RunCompensation design
Comp is the most expensive behavior tool a company owns. Pay mix by role, the quota-to-OTE red line at 6x, and the accelerator that quietly taught my best rep to sandbag.