GTM Operations
Stop Rolling Up Gut Calls. Build the Forecast From 5 Observable Inputs.
The forecast I inherited called $6.2M and landed at $4.9M because it rolled up rep gut calls. A defensible number is built from five observable inputs: stage-transition probability, velocity, engagement, qualification, and calibrated conviction.
· 13 min read
The last forecast I inherited called $6.2M in commit and landed at $4.9M. Nobody lied. The number was a roll-up of rep gut calls, each one a private judgment about whether a deal “feels like it will close,” and the roll-up averaged twelve different definitions of confidence into one fiction. By the time the $1.3M gap surfaced it was week eleven and there was nothing left to do about it.
For as long as there have been forecasts, the method has been the same: ask each rep how they feel about their deals, sum the commits, present the total. That method breaks because a gut call is not observable. Two reps say “commit” and mean opposite things, and you cannot inspect the difference until the quarter closes and one of them was wrong. The market makes the cost concrete. Win rates fell to 19% in 2025, down from about 29% the year before (Ebsta and Pavilion, 2025 B2B benchmarks), and 76% of reps missed quota in the first half of that year (Ebsta and Pavilion). When win rates are that thin, a forecast built on feeling is a forecast built on the widest possible error bar.
A number a CFO will trust is not rolled up from conviction. It is built from five observable inputs, each one a fact a stranger could check. Here is the stack I stand up on every forecast I own, bottom to top. Scroll it, then I will show you the exit criteria, the coverage math, and the Tuesday diff under every rung.
- L5Calibrated conviction2 quarters
Only at the top does rep judgment enter, and only against a track record. A rep whose commits landed within a few points for two quarters earns conviction weight. Everyone else carries the model number until they do.
- L4Qualificationyes/no
Each stage carries a binary, observable exit criterion. Economic buyer confirmed funding. Mutual close plan in writing. A deal cannot claim a stage weight it has not earned by clearing the gate below it.
- L3Engagement~30% stale
Strip deals with no activity in 21 days before you weight them. Roughly 30% of open pipeline sits stalled (Clari). A stalled deal in Negotiation is not in Negotiation anymore, it is in limbo wearing the label.
- L2Velocity6.5 mo
A deal has to move fast enough to close in the quarter you are forecasting. B2B cycles now average 6.5 months (Ebsta, 2024). Any deal whose remaining cycle runs past quarter-end is best case, not commit, no matter how it feels.
- L1Stage-transition probability365 days
Start from your own closed-won history: what fraction of dollars that entered each stage eventually won. This per-stage close rate is the weight everything above it multiplies against, computed from the last 365 days, never a vendor slide.
Locate yourself on that ladder. Most forecasts live at L5 and skip L1 through L4 entirely: they are pure conviction with no observable floor under it. Every rung below the top replaces a feeling with a fact, so that by the time conviction enters, it is adjusting a defensible number rather than inventing one.
L1: Stage-transition probability carries the whole thing
Most bad forecasts trace to one root cause. The rep who calls a deal Stage 3 after a good call and the rep who calls it Stage 3 only after a verbal commit are both “in Stage 3,” and the roll-up averages two different realities into a number that describes neither.
The fix starts underneath the stages, with the transition probability itself: for every stage, what fraction of dollars that entered it eventually closed won. That is a report, not a guess. Take the last four closed quarters and compute entered-to-won conversion per stage.
-- L1: entered-to-won conversion per stage, from your own history
SELECT StageName, IsWon, COUNT(Id) cnt, SUM(Amount) amt
FROM Opportunity
WHERE IsClosed = true
AND CloseDate = LAST_N_DAYS:365
GROUP BY StageName, IsWon
Store the result once as custom metadata or a small object so every report reads the same weights. If ten dashboards each hardcode their own stage probability, you have ten forecasts and no source of truth. These probabilities are the close-rate column in the exit-criteria grid below, and they are the multiplier every rung above L1 leans on.
L4: Qualification is the exit criterion, not the feeling
The stage weights from L1 only mean something if a stage means the same thing to every rep, which is the qualification rung. Each stage carries an exit criterion that is observable and binary. Not a feeling, a fact you can point at in the record:
- The economic buyer confirmed the problem is worth funding this quarter.
- A mutual close plan exists in writing, with dates.
- Procurement has been engaged, not “will be.”
If I cannot answer yes or no from the record, the stage is not defined tightly enough and the deal gets pushed back until it is. Reps hate this for about two weeks. Then the forecast stops swinging and they stop getting grilled on deals they never should have called, and the objection dies. Here is the exit-criteria grid I hand reps, so a stranger could stage any deal the same way.
| Stage | Binary exit criterion (must be yes to advance) | Historical close |
|---|---|---|
| 1 Discovery | Pain confirmed with the economic buyer, not a champion | 10% |
| 2 Qualified | Budget exists this fiscal year and is confirmed | 20% |
| 3 Proposal | Written proposal delivered, buyer acknowledged scope | 40% |
| 4 Negotiation | Mutual close plan in writing with dates, procurement engaged | 65% |
| 5 Commit | Verbal yes, paper in legal, signature owner named | 85% |
The close-rate column is the L1 weight you apply later, and it comes from your own closed-won history, never a vendor slide.
Keep the categories from bleeding together
The forecast is not one number. It is three, and they have to stay separate, because blending them is how conviction leaks back in and quietly inflates the total.
Commit is the deals I will stake my name on. Best case is the upside if a few things break right. Pipeline is everything earlier, the raw pool. The first time a commit deal slips because someone folded a hopeful deal into the commit line, the whole number loses credibility, and you do not get that trust back by re-forecasting harder. You get it back by never blending them in the first place.
L2 and L3: Let coverage, velocity, and engagement shrink the number
Coverage tells you whether the target is even reachable: open pipeline divided by quota. The lazy rule is 3x to 4x. The honest version is 1 divided by your win rate (Clari, 2026 coverage framework), because a team that closes 19% of qualified pipeline needs 5.3x, and walking into a quarter on 3x means you are already short and do not know it yet.
coverage
Below ~3x you are almost certainly going to miss unless win rates are unusually high. Above ~5x the number is either sandbagged pipeline or wishful staging. The healthy band is 3 to 4x.
coverage: 3.6x
Then apply the L1 conversion by stage. If Stage 3 historically closes 40% of the time, $1M sitting there is worth about $400K to the forecast, not $1M. Do this across the board and the number usually drops. That discomfort is the point.
Velocity is the L2 rung, and it is the engine number that tells you whether the pipeline is even moving fast enough to close in the quarter you are forecasting. B2B cycles now average 6.5 months (Ebsta, 2024), so a deal that entered Qualified last week cannot honestly sit in this quarter’s commit.
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
Move any lever and watch the daily throughput. Shortening the cycle and lifting win rate compound. Adding raw opportunities is the slowest lever of the four, which is why “we need more pipeline” is usually the wrong first answer to a forecast gap.
Engagement is the L3 rung, and it is the cheapest correction on the stack. Roughly 30% of open pipeline has had no activity in 21 or more days (Clari), and those deals sit in a stage without moving. Strip them before you weight anything, filtering on last activity, never last edit, because a field change or owner reassignment refreshes the modified date and makes a dead deal look alive.
-- L3: strip deals with no real customer activity in 21 days
SELECT Id, Name, StageName, Amount, LastActivityDate
FROM Opportunity
WHERE IsClosed = false
AND (LastActivityDate = null OR LastActivityDate < LAST_N_DAYS:21)
ORDER BY Amount DESC
A worked example that reconciles to the stack
Take a rep with a $1M quarter and $3M of open pipeline. Raw coverage: 3x, and everyone relaxes. Now run that same $3M up the stack. Split it by stage, strip the stalled dollars at L3, then apply the L1 close rates.
| Stage | Open pipeline | Live after L3 strip | L1 close | Weighted value |
|---|---|---|---|---|
| Discovery | $1.2M | $840K | 10% | $84K |
| Qualified | $900K | $630K | 20% | $126K |
| Proposal | $600K | $420K | 40% | $168K |
| Negotiation | $300K | $210K | 65% | $137K |
| Total | $3.0M (3x) | $2.1M | $515K (0.52x) |
The rep reported 3x coverage. After L3 strips the 30% that has gone quiet and L1 weights what is left by how each stage closes in history, the defensible number is $515K against a $1M quota, or 0.52x. Reconcile it against the stat tiles: the inherited forecast’s $1.3M gap was this same arithmetic run too late. At a 19% blended win rate this rep needs the full 5.3x coverage, and they are carrying an effective half of one x. The $1.2M Discovery pile that looked like a third of the number is worth $84K once velocity, engagement, and stage probability each take their cut. That is the difference between a gut-call roll-up and a built number: the built number told you in week one what the roll-up hid until week eleven.
Run the cadence that catches drift
The forecast is a weekly rhythm, not a month-end scramble. Reps update deals against the exit criteria. Managers inspect the top ten, not the whole list. Operations diffs this week against last week and names what moved and why.
The value lives in the diff. When the number drops $300K, I want to know on Tuesday, with the deal name and the reason, not in a post-mortem after we miss.
View as table
| Point | Value |
|---|---|
| Wk 1 | 6.2M |
| Wk 3 | 6M |
| Wk 5 | 5.6M |
| Wk 7 | 5.4M |
| Wk 9 | 5.2M |
| Wk 11 | 5.1M |
The blind line is the forecast I inherited: flat and confident until the wall. The diffed line is the same erosion, surfaced week by week, where a manager could still act on each drop.
The diff only works if it names causes, not only deltas. “Commit dropped $300K” is a fact that starts an argument. “The Acme renewal slipped from this quarter to next because their budget freeze extended through Q3, and the Globex expansion moved from best case to commit after the buyer confirmed funding” is a fact that ends one. Every movement gets a deal name and a one-line reason, sourced from the exit criteria. That discipline turns the weekly review from a status meeting into a working session: the room already understands why the number moved and spends its time deciding what to do about it.
L5: Calibrated conviction, earned over two quarters
Only at the top does rep judgment re-enter, and only against a track record. A rep whose commits landed within a few points for two straight quarters has earned conviction weight, a documented right to adjust the model number up or down on a specific deal. A rep without that record carries the model number until they build one. This is what separates a defensible forecast from a democratic one: conviction is a privilege the data grants, not a default everyone gets.
| The forecast finance rebuilds | The forecast finance trusts | |
|---|---|---|
| Stage meaning | Rep feel, varies by person | Binary exit criterion in the record |
| The number | Commit, best case, pipeline blended | Three separated categories |
| Coverage rule | Flat 3x for everyone | 1 ÷ win rate, then stage-weighted |
| Stalled deals | Counted at full stage weight | Stripped at 21 days no activity |
| When drift shows | Quarter close, too late | Tuesday, still fixable |
| CFO behavior | Rebuilds it in a side spreadsheet | Argues about the gap, not the number |
The two-quarter proof is the part people skip, and it is the part that buys the trust. A forecast that lands close once is luck. A forecast that lands close twice running, with the miss explained by the same diff that flagged it in week four, is a system. Finance stops rebuilding your number in a side spreadsheet the moment it concludes your system is more reliable than its own guesswork, and that takes about two quarters of clean execution to form. You earn CFO trust by being boringly right, on the record, twice.
Get this right and the conversation with leadership changes shape. You stop arguing about whether the number is real and start arguing about what to do with the gap you both already agree exists. Write the binary exit criterion for your Stage 3 and Stage 4 tonight, then stand up the Tuesday diff before this week’s review. For the deeper version of the coverage math under L2, see why 3x coverage lies to you, and for the L3 dollars rotting under your number, see the zombie deal autopsy. Build the stack once, in order, and the forecast stops being a hope with a dollar sign in front of it.
Keep reading
One email. Every week.
One email a week: an operating problem I solved or botched, with the model, the numbers, and what I would change. No roundups, no theory, unsubscribe whenever it stops being useful.
The newsletter opens soon.
Connect a provider in src/config.ts