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.

GTM Operations guide

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.

65%
Of buyers expect a first response in under 1 hour (HubSpot / LeanData)
52.7%
SAL to SQL conversion, the seam most teams never measure (gradient.works)
$5.4M/yr
What one tightened seam is worth in the worked example below

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 leak map Four seams, four different failures
MarketingMQL createdRoutingSLA clock startsSales acceptSAL / reject reasonOpp / closeSQL to WonCSonboardingslow routeno acceptstage driftno contextevery dashed line is a place a deal dies quietly
Revenue crosses a boundary four times on the way from lead to renewal. Each seam leaks for a different reason, so each needs a different control.

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.

Same 1,000 MQLs, two handoff regimes
Toggle loose vs tight seams. The tight funnel adds 10 won deals a month without a dollar of extra spend, entirely from a sharper MQL bar and an enforced SLA.
View as table
StageValue
MQL1,000
SAL (accepted)400
SQL200
Opportunity160
Won40

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.

What a tighter handoff does to daily throughput

of pipeline throughput per day

Try

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
Every row on the left is a place a deal dies quietly. Every row on the right is an artifact you can ship.

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 metricBenchmarkSource
First-response expectation65% expect a reply in under 1 hourHubSpot / LeanData 2024-25
SAL to SQL conversion52.7%gradient.works 2025
MQL to SQL (aligned teams)30% or higher vs 13-21% typicalgradient.works 2025
SQL to Opportunity30-59%gradient.works 2025
Multi-thread win lift (deals over $50K)+130%Ebsta / Pavilion 2025
Deals still single-threaded78%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.

The handoff instrumentation ladder
  1. 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

    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

    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

    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

    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

    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.