The quarter we could see everything and act on nothing

I'll start with the embarrassing part, because it's the useful part.

We'd instrumented our own funnel about as well as a team can. De-anonymized website traffic. Enrichment on the accounts that mattered. Product events streaming out of the app. An intent feed. A Slack channel where all of it landed in something close to real time. By any measure of detection, our stack was good. We could see intent that most teams never catch.

Pipeline didn't move in proportion to any of that. For a while I blamed the data: noisy, false positives, the scoring was off. Then I sat down and watched what actually happened to one good signal, start to finish, and stopped blaming the data.

Watch one signal travel

The signal fires at 10:02. A real one. An account we'd been courting opens the pricing page, comes back twice inside an hour, and a second person from the same company shows up behind them. The intent feed catches it. The Slack channel lights up. So far the system is working exactly as designed.

Then it waits. Someone notices the alert around 11:40, if they happen to be watching the channel. It gets an emoji. It comes up in the next morning's standup. Someone agrees to "own" it. By the time a credible, relevant message actually reaches that account, it's Thursday. The moment that produced the signal is three days gone. The person who looked at our pricing three times on Tuesday has moved on, gone quiet, or already talked to someone who answered first.

One signal over three days A wall-clock timeline. A buying signal fires Tuesday at 10:02 with full value, is seen at 11:41, becomes a Wednesday standup topic, and gets a first human reply Thursday at 14:30, about three days later. A freshness ribbon drains from teal to coral across the wait, so by the time anyone acts most of the value is gone. Select an event to read its timestamp, freshness, and outcome. ONE SIGNAL, THREE DAYS Tuesday 10:02 to Thursday afternoon. The value drains while it waits. signal value nearly gone fired Tue 10:02 seen Tue 11:41 (+1h 39m) triaged Wed 09:15 (+23h) first reply sent Thu 14:30 (+3 days) Illustrative. By the time a human replied, most of the value was already gone. One signal over three days A vertical timeline. A buying signal fires Tuesday at 10:02 with full value, is seen at 11:41, becomes a Wednesday standup topic, and gets a first human reply Thursday at 14:30, about three days later. Freshness drains from teal to coral down the column. Select an event to read its timestamp, freshness, and outcome. ONE SIGNAL, THREE DAYS The value drains while it waits. fired Tue 10:02 seen Tue 11:41 (+1h 39m) triaged Wed 09:15 (+23h) first reply sent Thu 14:30 (+3 days) Illustrative. Most of the value was gone before anyone acted.

Tuesday 10:02. Freshness about 100%. The signal is worth the most it will ever be worth.

Nobody in that chain did anything wrong. Each person was busy with work that was also real. The failure was structural, not personal. We'd built a system that was excellent at producing signals and quietly terrible at conducting them.

Intent is perishable. We've known that for fifteen years.

Here's what makes this worse than a normal operational miss: none of it is news.

Intent is perishable A curve showing the likelihood a buying signal turns into a real conversation, falling sharply as response time grows from five minutes on the left to days on the right. The curve is stroked teal at the fresh end, through purple, to coral at the cold end. Drag the response-time control below to move a marker along the curve and read what each response time means. likelihood of a real reply

Answer in 5 minutes, not 30: about 21x more likely to qualify the lead.

MIT, 2007

The average company takes 42 hours to reply. Nearly 1 in 4 never reply at all.

HBR audit of 2,000+ companies, 2011

You respond in 5 minutes About 21x more likely to qualify than waiting 30 minutes (MIT, 2007).

Curve is illustrative. The two figures are from the cited studies.

The MIT Lead Response Management study found that contacting a web lead within five minutes instead of thirty makes you about twenty-one times more likely to qualify it. Harvard Business Review's audit of more than two thousand companies found that responding within an hour made a firm roughly seven times more likely to qualify a lead than waiting just one hour longer, that the average company took forty-two hours to respond at all, and that almost a quarter never responded. Those studies are from 2007 and 2011.

So we've had fifteen years to absorb a simple fact: a buying signal isn't a durable statement about a company, it's a perishable statement about a moment. And most of us, myself included, went and built stacks that treat intent like a report to be reviewed on a cadence. The signal doesn't care about your standup schedule. It decays whether or not anyone is looking.

The one number we never measured

So we measured the thing the dashboards had never shown us.

Not how many signals we captured. Everyone can tell you that number, and it's the wrong one to be proud of. We measured the gap: the median time between a high-intent signal and a credible, relevant response, and the share of high-intent signals that got no response at all.

It's a cheap thing to instrument, and almost nobody runs it. Pick the definition of a high-intent signal your team already trusts. Log the timestamp when it fires. Log the timestamp when a real human action goes out the door because of it, an email a person would recognize as a response to them, not an automated drip that would've fired anyway. The median of that difference is your real time to action. The percentage of signals with no second timestamp at all is your leak.

Time to actionMeasure the gap, not the count
TypeScript
// the number almost nobody measuresconst timeToAction = action.sentAt - signal.firedAt; // your real latencyconst health = report(highIntentSignals, {  median:         median(signals.map(timeToAction)),   // not "how many"  noResponseRate: signals.filter(s => !s.action).length / signals.length,});// a "response" is a human action a person would recognize,// not a drip that was going to send anyway.
Log when the signal fires and when a real response goes out. The median is your latency. The signals with no second timestamp are your leak.

We ran it on ourselves and the number was worse than anyone on the team had guessed. It usually is. And the act of measuring it changed our behavior faster than any new data source ever had, because you can't argue with your own median. If you do one thing after reading this, measure that gap before you buy anything else. It'll tell you more about the health of your go-to-market than another intent feed ever will.

You can't buy your way out of a handoff

Here's where I spent real money being wrong.

My instinct, and I think the industry's instinct, was that a gap this size had to mean we were missing a tool. So we bought tools. Each one was good at its job. Each one added another way to see.

But seeing was never our problem. The gap lived in the spaces between the tools. Detection in one system, scoring in a second, the actual outreach in a third, and a person stitching the three together by hand while the moment expired. Buying another detection product doesn't close that gap. It adds one more place to look and one more handoff to drop. We'd bought ourselves better eyes, over and over, and wondered why nothing moved faster. Eyes weren't the constraint. Hands were.

HandoffsThe latency lives between the tools
text
TRACE  signal:acme.pricing_view_x310:02:11  detected   intent_feed                  +0s10:02:13  scored     enrichment                   +2s11:41:00  seen       #signals (if a human looks)   +1h 39mwed 0915  triaged    standup: "who owns this?"     +23hthu 1430  sent       sequencer                     +3dx  handoff enrichment to human: no owner, no retry, no SLA
Detection, scoring, and action each sit in a different system, stitched together by hand. Every hop adds delay, and one of them is where the signal quietly dies.

At some point the arithmetic gets hard to ignore. You can keep buying better eyes, or you can build something with hands.

So we built one

So we built one. Not another dashboard, and not another feed. Something that watches the product, the site, and the systems of record together, scores intent against our own definition of a good account, and carries the moment into action inside a workflow that records every step, with a person setting the rules and keeping the final say where it matters. At Civic we build agents, so we built an agent for the job we couldn't buy our way out of.

We built it for ourselves first. We were the first team it ran for, which is the only honest way I know to ship something you intend to put in front of other people. It pulled our own time to action down from days to minutes, and it kept the receipts while it did it, so we could always answer why a given account got contacted on a given day. That last part turned out to matter as much as the speed.

It's no longer only for us, and it's close.

What comes next

I'm being deliberately light on it here, because next week I want to make the harder argument, the one I'm actually looking forward to writing: that the next dollar a growth team spends shouldn't buy another way to see. The category has spent years, and most of its budget, getting very good at watching. The edge has quietly moved to the teams that can act in the minute it still matters, and can stand behind what they did when someone asks later.

Everyone has signals now. The real question for the rest of this year is whether you can do anything with one before it goes cold. More on that, and more on what we've been building, next week.


If you're working on the gap between intent and action on your own team, I'd be glad to compare notes. You can reach us through civic.com.


Sources and further reading