When Hayes Davis founded Gradient Works in the summer of 2020, the problem he kept hearing from revenue leaders wasn't "we need better routing software." It was something more fundamental: assignment is broken, and we don't have a good way to think about it, let alone fix it.
The early conversations were illuminating. At companies of every size — tiny startups to multi-billion dollar public companies — the same pattern kept showing up. Lead routing was automated at the top of the funnel. Everything else was spreadsheets. The technical term for this approach, Hayes observed at the time, is "automation in the front, spreadsheets in the back."
The obvious solution was to automate more. But that wasn't quite right either. The real problem was conceptual: revenue teams were organizing their work around the wrong thing.
The insight that started everything
In December 2020, Hayes published what became the founding thesis of Gradient Works: reps should own accounts, not leads. That may sound quaint now, but even 6 years ago lots and lots of B2B SaaS companies weren't yet account-based.
The argument was straightforward but had far-reaching implications. Businesses are your customers, not individuals. A lead is just a signal. It tells you one thing: there is interest in your solution at a particular account. The individual signaling that interest matters, but less than most teams assume. What actually matters is working the account.
This sounds obvious in retrospect. But at the time, most sales teams were organizing their processes around Salesforce Leads (a construct that Hayes described, generously, as "a truly odd behavior in the world's biggest CRM"). The result was reps owning a mix of leads, contacts, accounts, and opportunities, with no unified view of anything. He called it the "lead leak," and plugging it meant shifting your unit of ownership to the account.
The corollary was immediate: if accounts are what reps own, then you need to be able to match every inbound lead to an account before you do anything else. That's what kicked off our work on lead-to-account matching and eventually the full routing module.
Building the matching foundation
By January 2021, we were in private beta and the core idea had sharpened into a product. Smart lead-to-account matching, flexible routing workflows, and dynamic assignment that went beyond simple round robin, all integrated with Salesforce.
The matching problem turned out to be where most of the complexity lived. Getting it right meant handling domain-based matching (connecting a lead's email address to an account's website), normalizing inconsistent URL formats, accounting for subsidiaries and domain aliases, and building deduplication logic that could identify existing accounts Salesforce's native matching would have missed.
We wrote about the mechanics at the time: start with the domain as your universal account identifier, keep your CRM data clean, normalize everything, handle edge cases like subsidiaries and regional domains. Done right, domain-based matching would cover the overwhelming majority of cases and keep routing logic simple and auditable.
But matching was just the foundation.
The 80/20 problem
As we built out routing for more customers, a pattern emerged that Jenn captured well in 2023: there's so much more to lead routing than just routing leads.
About 80% of any lead assignment process looks roughly the same across companies. Inbound lead comes in, gets assigned to the next SDR in line, moves to an AE when it's ready. Standard round robin. Relatively simple.
But that other 20% — the part that's unique to your GTM motion, your sales team, your buyers — is where all the real complexity lives. What happens when a rep is out? What if they're at capacity? Do you use pods or pools? How do you handle SDR-to-AE handoffs? How do you keep books balanced over time as reps join, leave, and change roles? What are your SLAs, and how do you enforce them?
Every company's 20% is different. And building a routing system that could actually handle it meant building something genuinely flexible, not a set of rigid assignment rules, but a toolkit that revenue teams could assemble into their own logic without writing code.
What we actually built
The Gradient Works Routing module that exists today is the answer to that challenge. It runs on native Salesforce Flow, which means workflows live inside your CRM and are maintainable by people who know your business, not just engineers. The building blocks are:
Matching: Lead-to-account, lead-to-contact, lead-to-lead, and account-to-account matching actions, each with configurable match criteria (domain, exact, fuzzy), filters, and rankings to surface the best match when multiple candidates exist.
Queues: Round-robin pools of users with built-in support for weighted distribution, availability status (so a rep on PTO doesn't get assignments), working hours (so a rep covering a specific shift doesn't get pinged at midnight), and temporary skipping.
Capacity meters: Configurable calculations that track how much each rep is carrying, updated hourly, daily, or manually, so queue assignments can respect the difference between a rep who just got five accounts this week and one who's been quiet.
Adaptive assignment Our recommended assignment policy, which combines round robin with availability and capacity awareness. The right rep at the right time, not just the next rep in line.
Automation All of it surfaced through Salesforce Flow, with more than 30 custom actions, templates for common patterns, and full logging so you can trace exactly what happened and why.
And a full audit trail. Every assignment, whether queue-based or direct, logged in Assignment Histories. Because routing accountability — being able to answer "who got what lead and why" — turns out to be almost as important as getting the assignment right in the first place.
The gap we kept seeing
Here's the thing about routing systems: building them is hard, but operating them is where the real pain lives.
You build the logic carefully. You test it. You launch it. And then something routes wrong, and figuring out why means opening the app, finding the record, tracing the logic, checking the target book, reviewing the queue configuration, looking at assignment history. If you're lucky you get an answer in 20 minutes. More often it takes longer, and you're still not totally sure you found the root cause.
Multiply that by every routing question your team fields in a week. A rep flagging an unexpected assignment. An ops manager auditing territory coverage. Someone trying to understand how the logic works.
The tools had gotten better. But the operating of those tools had stayed slow, opaque, and manual.
Where we are now
This year we launched the Gradient Works MCP — a server that connects Gradient Works to any AI agent like Claude, ChatGPT, Cursor, OpenAI Codex. Once connected, you can ask your agent plain-language questions about your routing and get instant answers.
Why did this lead route to rep A instead of rep B? What's the current state of my routing queues? How is my target book configured for enterprise accounts?
The old way: manual investigation, tracing logic by hand, maybe a support ticket if you were really stuck. The new way: ask your agent. The Gradient Works MCP pulls the relevant routing logic, assignment history, target book configuration, and queue state, hands it to your agent, and your agent gives you a plain-language answer in seconds.
We use it ourselves. When a customer asks why a lead went somewhere unexpected, our CS team connects to the customer's org via MCP and asks Claude the same question. The answer comes back in seconds instead of an hour.
That's not a small improvement. It's a different way of operating a routing system.
The same principle applies beyond debugging. Territory planning workflows that previously required CSV exports and manual spreadsheet analysis can now be done through a single agent request. Rep metrics that required navigating through multiple app views can be queried conversationally. Building a new target book no longer has to mean a drag-and-drop session — it can start with a conversation.
Five years of the same problem, solved differently
Looking back from 2020 to now, what's changed is less the problem than the tools available to solve it.
The original insight — that accounts should be the unit of ownership, that matching is foundational, that assignment needs to be automated all the way through the funnel and not just at the top — that's all still true. The complexity of the 80/20 problem hasn't gone away. The need for audit trails, for availability management, for capacity-aware assignment — all of that is still real.
What's changed is that routing systems no longer have to be black boxes. The logic can be interrogated. Questions that used to require manual investigation can be answered by your AI agent in seconds. And that makes the whole thing faster to operate, easier to trust, and more accessible to everyone on the team, not just the RevOps engineer who built it.
The Gradient Works MCP is now available in alpha. If you want to give it a try, sign up for our free plan. If you're an existing customer, reach out to your CSM.


