🗝 KeyzHub
19Keys · community archive
4761 bytes raw
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# Playbook: Pipeline Hygiene Cadence

**School:** Mark Roberge's engineering-system discipline from *The Sales Acceleration Formula* (2015) — treat the pipeline itself as something that decays without scheduled maintenance, exactly like a codebase accumulates technical debt without review. Roberge scaled HubSpot sales 0→$100M by running sales with data and regression rather than gut, and that same discipline extends past scoring into ongoing pipeline audits.

**Deliverable type:** `pipeline-audit` — every number sourced, ending in a ranked, owner-assigned action list.

---

## When to use this

- There is an active pipeline of open deals/opportunities at all, and no one currently owns a scheduled sweep for staleness — this is maintenance, not a one-time build, and it decays the moment it's neglected.
- You want to catch the classic Goodhart tell early: MQL→SQO conversion dropping while MQL volume rises (a sign a stage definition got loosened to hit a number) — this cadence is the mechanism that surfaces that drift.
- You have named humans/agents (funnel-closer, outreach-operator, owner-action-chaser) who can be assigned specific flagged deals, rather than a vague "someone should look at this."

## When NOT to use this

- Pipeline volume is near zero (a handful of deals tracked informally) — a full weekly automated audit is overkill; a manual glance is sufficient until volume grows.
- No one is willing to actually act on the flagged list — an audit that produces a report nobody works is worse than not building it; it creates the illusion of governance without the substance. Don't ship this without an owner committed to closing the loop.

---

## Step-by-step build

1. **Define "stale."** State an explicit age threshold per stage (e.g., "SQO stage with no activity logged in 14 days = stale") — a threshold with no number is not auditable.
2. **Define "next-step-empty."** Any open deal with no populated next-step field is flagged — a deal with no next step is a deal nobody is actually working.
3. **Set the audit cadence.** Weekly, automated, not ad hoc — state the day/time it runs.
4. **Build the stage-conversion comparison.** Per-transition conversion rate this period vs. prior period (Inquiry→MQL, MQL→SAL, SAL→SQO, SQO→Won) — trend matters more than the absolute number.
5. **Compute the pipeline-coverage ratio.** Open pipeline value ÷ remaining quota/target, compared against a stated target ratio (commonly 3–4x, but state your own).
6. **Rank top-5 at-risk deals with reason codes.** Not just "these are old" — state why each is at risk (stale, next-step-empty, stage-age outlier, declining engagement) so the assigned owner knows what to actually do.
7. **Tag every number with its source.** SQL query or report name for each figure — an untagged number ("we have ~200 stale deals") is explicitly banned by the gate (MANUAL §8.1) as invented confidence.
8. **Assign every flagged item to a named owner or agent.** funnel-closer, outreach-operator, owner-action-chaser, or a human — never leave an action item unassigned.
9. **Feed the Goodhart check.** Watch for MQL→SQO dropping while MQL volume rises (classic gamed-definition tell, MANUAL §7.2) and flag it explicitly in the audit output when it appears.

## Worked mini-example

Weekly audit, runs Monday 6am. Stale-deal threshold: SQO-stage, no activity in 14 days (query: `SELECT * FROM deals WHERE stage='SQO' AND last_activity < now() - interval '14 days'`). This week's run: 12 stale deals (source: query above, run 2026-07-13), 4 next-step-empty deals (source: same query, `next_step IS NULL`), stage conversion SAL→SQO down from 34% to 21% month-over-month while SAL volume is flat — flagged as a possible Goodhart-style definition drift on SAL criteria, not a genuine pipeline health issue, pending a manual review of the last 10 SAL transitions. Pipeline coverage: $180K open ÷ $60K remaining quota = 3.0x, against a 3.5x target — flagged as slightly under coverage. Top-5 at-risk list: Deal #4821 (reason: stale 21 days, no next step) assigned to funnel-closer; Deal #4790 (reason: stage-age outlier, 45 days in SQO) assigned to owner-action-chaser for a check-in call.

## How the verify gate applies

The `pipeline-audit` linter requires every reported number to carry a source tag (SQL query or report name) — untagged numbers fail outright. It requires the stale-deal age threshold to be explicitly stated, the coverage ratio to be compared against a stated target, and the top-5 at-risk list to carry reason codes plus a named owner assignment per item (funnel-closer, outreach-operator, owner-action-chaser, or a human) — an unassigned action item fails the "ranked action list" requirement.