Skip to main content
Engineering8 min readNovember 28, 2025

Building the Momentum Scoring Algorithm for Routiine.io

How I designed Routiine.io's AI momentum scoring system — turning CRM activity signals into actionable deal health scores that sales teams actually trust.

James Ross Jr.

James Ross Jr.

Strategic Systems Architect & Enterprise Software Developer

The Problem With Traditional Lead Scoring

Most CRM systems offer lead scoring, and most lead scoring is useless. The typical approach assigns static points to demographic attributes — company size, industry, job title — and behavioral actions — opened an email, visited the pricing page, downloaded a whitepaper. These points accumulate into a score that theoretically indicates how likely a lead is to convert.

The problem is that these scores are snapshots. They tell you what a lead has done in total but not what is happening right now. A lead with a score of 85 who was highly engaged three months ago but has gone silent is not the same as a lead with a score of 85 who has been increasingly active over the past week. Traditional scoring treats them identically.

Routiine.io's momentum scoring was designed to solve this specific problem. Instead of measuring cumulative activity, it measures the rate of change in engagement — the momentum. A deal that is accelerating gets a different signal than one that is decelerating, even if their absolute engagement levels are similar.

Designing the Signal Framework

The momentum score is computed from a set of input signals that represent meaningful sales activity. Each signal has a type, a timestamp, a magnitude, and a decay rate.

The signal types fall into categories. Communication signals include emails sent and received, calls made and received, meetings scheduled and completed. Engagement signals include proposal views, document opens, pricing page visits, and demo requests. Progress signals include deal stage advancements, contract drafts sent, and stakeholder additions to the thread. Negative signals include meeting cancellations, delayed responses, and deal stage regressions.

Each signal type has a magnitude that reflects its relative importance. A completed meeting is worth more than an opened email. A signed contract is worth more than a pricing page visit. These magnitudes were initially set based on sales domain knowledge and then refined through analysis of historical deal data — which signals actually correlated with closed deals versus those that were noise.

The decay rate is what makes momentum scoring different from traditional scoring. Every signal loses value over time. An email opened today contributes fully to the score. The same email opened a week ago contributes less. A month ago, it contributes almost nothing. The decay function is exponential, which means recent activity dominates the score while historical activity fades naturally.

The Calculation Engine

The momentum score is calculated as a weighted, time-decayed sum of all signals associated with a deal, normalized to a 0-100 scale. The formula is conceptually straightforward, but the implementation required careful thought about performance and accuracy.

Signals are stored as timestamped events in the database. When a score is requested, the engine queries all signals for the deal within a configurable lookback window — typically 90 days. Each signal's contribution is calculated as its magnitude multiplied by the decay function of the time elapsed since the signal occurred. These contributions are summed and normalized against the maximum possible score for a deal with perfect engagement.

The normalization step prevents score inflation for deals with long histories. A deal that has been active for six months should not automatically score higher than a deal that started last week simply because it has more total signals. Normalization ensures the score reflects the intensity and recency of engagement rather than its duration.

We precompute scores on a scheduled basis rather than calculating them on every page load. A background job runs hourly, updating the momentum score for every active deal. This means scores can be up to an hour stale, but the trade-off is that dashboard queries remain fast — they read a precomputed value rather than running the calculation inline.

For the Routiine.io architecture, this was an important decision. Real-time calculation would have been more accurate but would have made the dashboard significantly slower as the number of deals grew. The hourly refresh strikes a balance between timeliness and performance that users have not complained about.

Making the Score Actionable

A number between 0 and 100 is meaningless unless it drives specific actions. The momentum score in Routiine.io is surfaced in three ways that connect the score to behavior.

First, the deal pipeline view color-codes deals based on their momentum trend — not just the current score, but whether the score is rising or falling. A deal with a score of 60 and rising shows as green. A deal with a score of 60 and falling shows as yellow. A deal with a score of 60 and rapidly falling shows as red. This gives salespeople an instant visual read on their pipeline health without examining individual deals.

Second, the system generates alerts for significant momentum changes. When a deal's score drops by more than 15 points in a 48-hour window, the assigned rep receives a notification suggesting they re-engage. When a score increases rapidly — indicating a previously cold deal is heating up — the rep receives a notification to capitalize on the momentum. These alerts are designed to be infrequent and high-signal rather than noisy.

Third, the score contributes to pipeline forecasting. Deals with high and rising momentum are weighted more heavily in revenue forecasts than deals with low or declining momentum. This makes the forecast more realistic than the traditional approach of multiplying deal value by stage probability, which ignores engagement entirely.

Calibration and Trust

The hardest part of building a scoring system is not the algorithm — it is calibration. If the scores do not match the sales team's intuition about deal health, they will ignore them. The system needs to be right often enough that users trust it, even when it occasionally disagrees with their gut.

We calibrated the initial magnitudes and decay rates using historical data from closed deals. Deals that closed successfully tended to have specific engagement patterns — increasing email frequency, multiple meetings in a short window, stakeholder additions. Deals that stalled or were lost had different patterns — decreasing response times, meeting cancellations, long gaps between interactions.

The calibration is not static. As Routiine.io accumulates more deal data, the magnitude weights and decay rates can be adjusted. The system tracks which score levels correlate with actual outcomes, and we periodically review whether the scoring parameters still reflect reality. This is a manual process today but could be automated with a feedback loop that adjusts parameters based on closed-deal analysis, which connects to the broader AI capabilities we are building into the platform.