prd-v08-marketing-ops-handoff
$
npx mdskill add mattgierhart/PRD-driven-context-engineering/prd-v08-marketing-ops-handoffPosition in workflow: v0.8 Monitoring Setup → **v0.8 Marketing-Ops Handoff** → v0.9 Launch Channels (ORB), v0.9 Cold Outreach
SKILL.md
.github/skills/prd-v08-marketing-ops-handoffView on GitHub ↗
---
name: prd-v08-marketing-ops-handoff
description: >
Define lifecycle stages and marketing → sales / CSM handoff rules for leads captured by GTM
channels during PRD v0.8 Deployment & Ops. Triggers on requests to set up lead lifecycle,
define MQL/SQL criteria, build handoff process, or when user asks "what's an MQL?",
"marketing to sales handoff", "lead lifecycle", "lead routing", "RevOps", "MOPS", "marketing
operations". Outputs BR-MOPS-* lifecycle rules and GTM-MOPS-* handoff flow entries.
context: fork
allowed-tools:
- Read
- Write
- Edit
- Glob
- Grep
execution_modes:
default: standard
supports: [quick, standard, deep]
---
# Marketing-Ops Handoff (Lead Lifecycle + Sales Routing)
Position in workflow: v0.8 Monitoring Setup → **v0.8 Marketing-Ops Handoff** → v0.9 Launch Channels (ORB), v0.9 Cold Outreach
## Execution Mode
Default is **standard**. See [`.claude/rules/08-skill-execution-modes.md`](../../rules/08-skill-execution-modes.md) for selection logic.
| Mode | What this skill produces |
|------|--------------------------|
| **quick** | 3-stage lifecycle (Anonymous → Lead → Customer); single handoff rule; SLA per stage |
| **standard** | Full 5-stage lifecycle (Anonymous → MQL → SQL → Opportunity → Customer); entry/exit criteria; handoff payload spec; SLAs |
| **deep** | Full lifecycle + per-segment routing (by ICP / region / size); scoring model; rejection-loop rules; SLA monitoring + escalation |
## What This Does
Defines the **lifecycle stages** a lead passes through from first touch to customer (or churn), plus the **handoff rules** at each transition. Without this, marketing-captured leads get dropped, double-worked, or never followed up. With this, you have an auditable definition of who owns what at each moment.
This skill applies primarily to B2B and prosumer products with a human-touch sales motion (founder-led sales, BDR/SDR teams, customer-success-led expansion). Pure self-serve products use a simpler version: lifecycle = Anonymous → Trial → Paid, with no human handoff.
## How It Works
1. **Pick the lifecycle shape** — Match the product:
- **Self-serve**: Anonymous → Signup → Activated → Paid → Expanded
- **Sales-assisted**: Anonymous → MQL → SQL → Opportunity → Customer
- **Hybrid (PLG + Sales)**: Anonymous → Signup → Activated → Paid → SQL → Opportunity → Expansion
2. **Define entry criteria per stage** — What event/behavior moves a lead into this stage? Examples:
- MQL: filled out a high-intent form, downloaded gated content, hit usage threshold
- SQL: explicit "talk to sales" or scoring threshold reached
- Opportunity: discovery call held, budget + authority confirmed
3. **Define exit criteria per stage** — Two paths out: progress (to next stage) and disqualify (back to nurture or out). Disqualification rules matter as much as progression.
4. **Map ownership** — Who owns the lead at each stage:
- Anonymous: marketing automation
- MQL: BDR/SDR
- SQL: AE / founder
- Opportunity: AE / founder
- Customer: CS / founder
5. **Define handoff payload** — When a lead moves between owners, what context goes with them? At minimum:
- Source (which GTM-* channel produced this lead)
- Touchpoint history (what they've engaged with)
- Best-fit signals (firmographic match, behavioral fit)
- Disqualifiers (anything that ruled out an earlier stage)
- Open questions (what the next owner should clarify)
6. **Set SLAs per stage** — How fast must the new owner respond after handoff? MQL → BDR typically <1 business hour for high-signal, <1 business day for low-signal. SQL → AE typically <30 minutes.
7. **Plan rejection routing** — When SQL → AE handoff is rejected ("not a fit"), where does the lead go? Back to nurture, disqualified, requeued? Without this rule, leads die in limbo.
## Example
B2B SaaS, $200/month entry price, sales-assisted motion.
| Stage | Entry criteria | Exit criteria | Owner | SLA |
|-------|----------------|---------------|-------|-----|
| Anonymous | Any first touch | Filled form OR signed up | Marketing | n/a |
| MQL | Filled high-intent form (demo request, pricing page) | BDR qualifies in OR disqualifies | BDR | 1 business hour |
| SQL | BDR confirms fit + intent | AE accepts OR rejects | BDR → AE | 30 min |
| Opportunity | AE held discovery, budget + authority confirmed | Closed-won OR closed-lost | AE | 24 hr per touch |
| Customer | Closed-won contract signed | Churn OR expand | CS | Onboarding kickoff <1 business day |
Handoff payload at MQL → SQL (BDR → AE):
- Source: GTM-002 (Product Hunt) + retargeting
- Touchpoints: 3 blog posts, demo video, pricing page (3×)
- Best-fit signals: 50-person SaaS (matches PER-001), VP Eng signed up
- Disqualifiers: none
- Open questions: confirm budget owner; confirm timeline
Rejection routing at SQL → AE rejection ("too small"): lead returns to MQL queue with "small-team" tag; BDR can re-engage in 90 days if size signal changes.
## What You Get Back
- **BR-MOPS-\* lifecycle rule entries** — One per stage with entry/exit/owner/SLA
- **GTM-MOPS-\* handoff flow entries** — One per transition (MQL→SQL, SQL→OPP, etc.) with payload spec
- **Rejection-routing rules** — Disqualifier-aware routing back to nurture
- **SLA monitoring plan** — Hooks into MON-DRIFT-* for SLA drift watching
## When to Use It
| Trigger | Mode |
|---------|------|
| B2B / sales-assisted product, pre-launch | standard |
| Hybrid PLG + Sales motion | deep |
| Pure self-serve consumer product | **skip** — overkill |
| Adding human sales to existing self-serve | standard |
| Sales velocity issues (leads dying in queue) | deep (rebuild with SLAs) |
| Pre-Series A audit (investor wants to see process) | deep |
## Consumes
- **PER-\* best-fit characteristics** (sharpened by v0.9 Positioning when available) — Defines what fit-signal scoring looks like
- **GTM-\* channel mix** (from v0.9 Launch Channels ORB, when available) — Lead sources feed into Anonymous stage
- **GTM-\* offer card** (from v0.9 Offer Construction) — Determines what "qualified" means (price tier sets bar)
- **BR-PRICING-\*** (from v0.3 + v0.9) — Sets stage thresholds (above $X/year → SQL; below → self-serve)
- **KPI-\* baseline targets** — Stage conversion targets feed into KPI- entries
> When this skill runs before v0.9, channel and offer references use placeholders that get reconciled when v0.9 finalizes.
## Produces
- **BR-MOPS-\* entries** (lifecycle stage rules) in `SoT/SoT.BUSINESS_RULES.md`
- **GTM-MOPS-\* entries** (handoff flow specs) — One per stage transition
- **CFD-\* gaps surfaced** — When stage criteria can't be cleanly defined, log as research gap
## Output Template
```
BR-MOPS-XXX: Lifecycle Stage — [Stage name]
Type: Lifecycle-Stage
Order: [#]
Status: Active
Stage: [Anonymous | Signup | Activated | MQL | SQL | Opportunity | Customer | Expansion]
Entry criteria:
- [Criterion 1 — e.g., "Filled out demo request form"]
- [Criterion 2 — e.g., "Reached usage threshold X"]
Exit criteria (progression):
- To [next stage]: [Criterion]
Exit criteria (disqualification):
- [Criterion that routes back to earlier stage or out]
Owner: [Marketing automation | BDR/SDR | AE | CS | Founder]
SLA:
Response time after entering this stage: [duration]
Escalation: [What happens if SLA missed]
Linked IDs: PER-XXX (fit signals), GTM-YYY (source channels), BR-PRICING-ZZZ (tier threshold), KPI-AAA (conversion rate)
```
```
GTM-MOPS-XXX: Handoff — [Stage A] → [Stage B]
Type: Handoff
Status: Active
From: [Stage A] (owner: ...)
To: [Stage B] (owner: ...)
Trigger: [Specific event — e.g., "BDR marks lead as Qualified in CRM"]
Payload (what context transfers):
- Source: [GTM-* channel]
- Touchpoint history: [What they engaged with]
- Best-fit signals: [Firmographic + behavioral match]
- Disqualifiers: [Anything that ruled out earlier stages]
- Open questions: [What new owner should clarify]
Rejection rule:
Condition: [When does the new owner reject this handoff?]
Routing: [Where does the rejected lead go? Nurture / disqualified / requeue]
Re-engagement: [Conditions under which this lead can return]
SLA: [Response time required from new owner]
Linked IDs: BR-MOPS-AAA (Stage A rule), BR-MOPS-BBB (Stage B rule)
```
## Anti-Patterns
| Pattern | Signal | Fix |
|---------|--------|-----|
| **MQL = "anyone who filled a form"** | High-volume MQLs with 1% SQL conversion | Tighten MQL entry criteria; add fit-signal scoring |
| **No rejection routing** | Leads die when SQL → AE rejects | Define where rejected leads go (nurture, disqualified, requeue) |
| **SLA without escalation** | "Respond in 1 hour" with no consequence if missed | SLA must have an escalation path |
| **Handoff without payload** | New owner asks "who is this?" | Mandatory payload fields at every handoff |
| **Stages without owners** | "We'll figure out who handles SQLs later" | One owner per stage; named role minimum |
| **Lifecycle for self-serve** | $20/month consumer product with MQL/SQL/OPP | Use Signup → Activated → Paid; no human handoff |
| **No SLA monitoring** | SLAs exist on paper, missed in practice | Drift-monitor SLA via MON-DRIFT- |
## Quality Gates
Before activating handoff:
- [ ] Lifecycle shape matches product motion (self-serve / sales-assisted / hybrid)
- [ ] Every stage has entry, exit-progression, and exit-disqualification criteria
- [ ] Every stage has a named owner (role minimum)
- [ ] Every stage has an SLA with escalation path
- [ ] Every transition has a handoff payload spec
- [ ] Rejection routing defined for every owner-changing handoff
- [ ] SLA drift monitoring set up via MON-DRIFT-
## Downstream Connections
| Consumer | What it uses | Example |
|----------|--------------|---------|
| **Launch Channels (ORB)** | Each channel's leads enter the lifecycle at Anonymous | GTM-002 (Product Hunt) → Anonymous → MQL routing |
| **Cold Outreach (Tiered)** | Tier 1/2/3 sequences map to lifecycle stages | Tier 1 = SQL-tier ABM; Tier 3 = MQL nurture |
| **Launch Metrics** | Stage conversion rates become KPI- entries | KPI-MQL-to-SQL-conversion |
| **Feedback Loop Setup** | Rejected leads' "why we passed" reasons feed CFD- | Pattern: "too small" rejections → CFD- pricing signal |
| **Drift Monitoring** | SLA drift catches process decay | MON-DRIFT-MQL-response-SLA |
## Detailed References
- alirezarezvani's `marketing-ops` and `revenue-operations` skills (claude-skills)
- *Predictable Revenue* (Aaron Ross) — sales handoff structure
- *From Impossible to Inevitable* (Aaron Ross + Jason Lemkin) — stage discipline
- SiriusDecisions lead-lifecycle framework (the canonical B2B reference)
- (No bundled `references/` — lifecycle shapes vary; this skill encodes the discipline, not a specific shape)
More from mattgierhart/PRD-driven-context-engineering
- ghm-gate-check>
- ghm-harvest>
- ghm-id-register>
- ghm-sot-builder>
- ghm-status-sync>
- ghm-template-sync>
- prd-v01-problem-framing>
- prd-v01-user-value-articulation>
- prd-v02-competitive-landscape-mapping>
- prd-v02-product-type-classificationClassify product approach into one of six types (Clone, Unbundle, Undercut, Slice, Wrapper, Innovation) based on competitive landscape. Triggers on PRD v0.2 work after competitive analysis, or when user asks "what type of product should we build?", "should we clone or innovate?", "is this a fast-follow opportunity?", "how should we position against competitors?", "clone vs undercut", "unbundle vs slice", or requests help choosing product strategy. Outputs BR- entries for product type classification and inherited GTM constraints.