Knowing where you stand
The first time a score is obviously wrong decides whether anybody ever uses it.
A good account turns red. The customer-success manager who knows that account looks for the reason, finds a weighting slider and a proprietary model, and concludes the column is decoration.
After that, no amount of accuracy recovers it.
Authoring
A formula, over signals you define, with a deliberately small vocabulary.
Not a slider over a model somebody else built. An expression your team writes, using the signals you configured, with a handful of functions and nothing else — so it stays readable by the person who has to defend it.
Five checks run when you save, and again when you activate, because a write that came in another way should not reach a live definition. A syntax error reports where. An unknown name says which one. A disallowed function is refused outright. And a dry run with every signal at the midpoint must land in range, while runs at the extremes warn rather than block — because legitimate clamping is fine.
- Simulate against your own accounts first —
A sample scored with every signal's value shown, before you activate anything.
- One active definition, guaranteed —
Activating a new version retires the previous one in the same act.
- Every score keeps the formula it was computed with —
So a score from six months ago stays explainable after the formula changed. Without that, history becomes unreadable the first time you tune it.
- Bands are yours, and all three are required —
The refusal names which one is missing rather than failing generically.
The honest part
A missing signal is neutral, and the reason is kept.
A source that cannot answer returns nothing with a machine-readable reason — never surveyed, no tickets, no usage in the window — and the score substitutes the midpoint rather than a zero.
Which means an account that has simply never been asked a question is not quietly marked down for it, and the explanation reads never surveyed rather than showing a number that was never measured.
Two cases deliberately go the other way: never having been contacted at all returns a deliberately large number, so an inverted signal pulls the score down. That is a judgement, and it is written down as one.
- Eight sources, across four modules —
Usage, how recently anybody spoke, past-due invoices, the three survey types, executive engagement in the last review, and open tickets with their severity.
- Normalisation is per signal —
Straight, inverted, or a step at a threshold — so a signal where less is better does not need the formula to know that.
- Recomputed on a cadence you choose, and on real events —
With a sweep that catches anything a quiet producer missed.
›Can an account owner see why their account dropped?
Yes — each signal with its raw value, what it normalised to, and its contribution. A neutral substitution shows as neutral with its reason.
›Does it include delivery or project health?
No. There are several health scorers in the product and none feeds this one — project health is its own thing, on the delivery side.
›Does a manager only see their own accounts?
There is a filter for it, and it is a filter rather than an enforced boundary — omit it and the screens return everything you are permitted to read. Worth knowing when granting access.