# Lifecycle And Routing

> Use when the user says "lifecycle stages", "MQL definition", "lead routing", "round robin", "speed to lead", "leads are sitting untouched", "sales says the leads are bad", "SLA", "handoff", "who owns this lead". Defines stages as exit criteria, sets routing rules and SLAs with real measurement, and fixes the handoff that generates the recurring lead-quality argument. Writes workspace/reports/lifecycle.md.

- Skill: `guerrilla2799/lifecycle-and-routing` (Agent Skill)
- Install (CLI): `npx skillmds@latest add guerrilla2799/lifecycle-and-routing`
- Raw SKILL.md: https://api.skillmd.com/api/skills/guerrilla2799/lifecycle-and-routing/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: guerrilla2799 (https://skillmd.com/u/guerrilla2799)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/guerrilla2799/lifecycle-and-routing

---


# Lifecycle and Routing

Define stages as exits, route deterministically, and measure the SLA rather than publishing it. Most lead-quality arguments are handoff-definition arguments in disguise.

## When to use
- Sales says the leads are bad and marketing says the leads are fine
- Inbound sits untouched
- No written stage definitions, or written ones nobody follows
- Territory or ownership changes

## Inputs
- Reads: `workspace/data/scoring-model.md`, `workspace/data/object-model.md`
- Needs from user: current stage list, how a lead reaches a rep today, the ownership rules, and one recent example of a lead both sides disagreed about

That last example is the most useful input in the whole skill. Work the specific case rather than the abstraction.

## Workflow

### 1. Define every stage as an exit, not an entry

The single change that fixes most lifecycle problems.

An entry definition ("an MQL is a lead that downloaded something") tells you nothing about what happens next. An exit definition names what must be true to leave, who decides, and where it goes.

```
STAGE: <name>
  Enters when:      <condition>
  Exits when:       <specific, checkable condition>
  Who decides:      <role>
  Exits to:         <next stage, or disqualified with a reason>
  Max time in stage: <n days, then it is escalated or aged out>
```

**The max-time field prevents the silent graveyard.** Without it, records accumulate in a middle stage forever and the stage becomes a place things go rather than a place things pass through.

### 2. Kill the undefined MQL

An MQL that only means "hit a score threshold" produces the recurring argument, because it encodes no fit judgment.

Replace it with the two-axis output from `icp-scoring-engine`:

```
High fit + high intent   → route to a rep now, SLA applies
High fit + low intent    → nurture, marketing keeps ownership
Low fit + high intent    → inspect. Often a competitor, student, or job seeker
Low fit + low intent     → suppress. No rep ever sees it
```

The fourth quadrant is what earns sales trust. A team that stops sending bad-fit leads gets believed about the good ones.

### 3. Write the routing rules to be deterministic

Every record has exactly one owner, decided by a rule, not by a scramble.

```
Route on:      <territory | segment | round robin | named account owner>
Precedence:    named account owner > territory > segment > round robin
Fallback:      <named person, for anything unmatched>
Reassignment:  <who can, under what condition>
```

**A named fallback owner is required.** Unmatched records with no fallback go nowhere, and nobody notices because nobody owns noticing.

Precedence order matters. Named account ownership beating round robin is what stops two reps calling the same company in one week.

### 4. Set the SLA, then measure it

An SLA that is published but not measured is a preference.

| Segment | First-touch SLA | Why |
|---|---|---|
| High fit, high intent inbound | 15 minutes | Conversion falls off sharply beyond this |
| High fit, medium intent | Same business day | |
| Everything else routed to a rep | 48 hours | |

```
Measure:  median and 90th percentile minutes from routed to first touch
Report:   weekly, by rep, visible to the team
Escalate: breaches over <n>, automatically, to the manager
```

Report the 90th percentile alongside the median. A good median with a terrible tail means a subset of leads is being ignored entirely, and the median hides it.

### 5. Instrument the handoff both ways

The handoff needs a return path, or lead quality is discussed only in meetings.

```
Marketing → Sales:  the record plus why it qualified, in a field
Sales → Marketing:  accept or reject with a reason code, required
```

Reason codes need to be short and mandatory. Four to six options. Rejection reasons aggregated monthly are the most honest lead-quality data available, and they end the argument by replacing it with a distribution.

### 6. Check stage integrity

```
Stage integrity = records in a stage that meet its exit criteria ÷ records in that stage
```

Under 75% and the definitions are being ignored, which means every funnel metric built on them is wrong. Fix the definition or fix the enforcement, and pick which before publishing another conversion rate.

## Output
- Writes: `workspace/reports/lifecycle.md`
- Uses: `templates/lifecycle-stage-definitions.md`
- Prints: the stage table with exits and max times, the four-quadrant routing, the routing precedence with fallback, the SLA table, the reason-code set, and the stage integrity figure

## Rules & quality bar
- **Every stage defined as an exit, with a decider and a max time**
- **No undefined MQL.** Fit and intent, separately
- **Bad-fit records never reach a rep.** This is how trust gets built
- **One owner per record, by rule, with a named fallback**
- **Named account ownership outranks round robin**
- **SLAs are measured and reported by rep,** median and 90th percentile
- **Rejection reason codes are mandatory and aggregated monthly**
- **Stage integrity under 75% invalidates the funnel metrics.** Say so before reporting them

## Related skills
- Requires: `icp-scoring-engine` for the two axes
- Pairs with: `signal-pipeline` for trigger-driven routing
- Feeds: `reporting-architecture`
- See also: `docs/metrics.md`

