← All writing

GTME Problem of the week - the nuances of scoring your TAM

June 11, 2026 · By Garrett Wolfe · Originally published on Substack

You built a scoring model. You assigned weights. You ran it across your TAM. And then 91% of your accounts landed in the same 10% band. What happened?

Omni-man standing over the beaten body of Invincible and lecturing him.
think mark think!

This is the most common failure mode in TAM scoring. Well, it’s the most common problem that i’ve run into, and I haven’t spoken to many people about the problem. The model looks right. The weights feel right. But the output is useless because the distribution is flat.


What do I score on?

When I first start building the model, I try to identify a few things

  1. What are the firmographic datapoints → These are criteria like employees, industry (we’ll get to this complex one) revenue, country of the HQ, among others

  2. What are any key technographic datapoints → These are things like tech stack (which is overpriced AF in credits), whether someone has a javascript snippet on their website (s/o RB2B or Unify), or even what items they mention using in their job postings

  3. What are some researchable datapoints that we can investigate, classify, or surface using AI, data vendors, or some combo of them → For me this typically looks like trying to identify how many of a certain profile of person work at a company, such as: sales reps, revenue cycle management professionals, IP professionals. It may be classifying the company as one of multiple potential industries rather than using a generic industry classification, or even distilling various levels of involvement in certain types of initiatives based on website contents.

A criterion I don’t score on - is intent - notably because we want to know which companies are a good fit in general, and then the ones that are in market today, we will devote special attention and detail to. We don’t want our scoring model today to permanently favor companies that had a new hire last month.

dummy scorecard I made

This tees up the actual scorecard, and then we set the values for each one.


What’s next? The part folks skip

This is how most exercises go → build the scorecard, assign some roughly justifiable values, and then sync the results to CRM. In that, most scoring conversations focus on what to score: firmographics, technographics, fit criteria. That’s table stakes. The part that actually determines whether your GTM team can act on the model is the shape of the output.

the shape of a bell curve, modern and futuristic

What I’ve landed up doing most of the time, is building a scoring model that clusters 60% of accounts within a 5-point range. This helps no one, and certainly not the GTM operator running the system.

It’s a shame, you can build a scorecard in a way that feels right but because you don’t know the actual shape or output of every datapoint from a 35K foot view, you won’t build a nice smooth distribution.


Well that distribution ain’t so pretty

a real distribution from a client of mine

The setup: ~45K companies pulled for a vertical SaaS product. We’d built what looked like a serious scoring model: 9 weighted criteria - industry, rep count, PE backing, sales motion, tech stack, catalog complexity, growth, revenue-per-rep, fragmentation - summing to a 100-point max, with fit and complexity multipliers on top. It looked rigorous. It was useless.

What actually happened:

idea vs reality on scoring TAM

What happened?

HOMELANDER Has NO POWERS Scene | The Boys Season 5 Episode 8 THE FINALE -  YouTube
  1. Dead axes inflating the denominator.

    1. Two criteria barely fired. Growth scored zero for 100% of accounts - it never worked at all. PE scored zero for 93% (average: 0.33 out of 15 possible). That’s 20 of 100 points that essentially never paid out. Add tech (53% zero) and rep count (60% zero), and most of the weight budget was unreachable for most accounts. The denominator said 100; the realistic ceiling was ~72. Every account’s percentage got divided by a number it could never hit, so the whole distribution compressed toward the floor.

  2. Missing data scored as zero.

    1. The model couldn’t distinguish “bad fit” from “no data.” An account we hadn’t enriched looked identical to an account that was genuinely wrong. That’s what builds the floor pile - absent data punished exactly like a mismatch.

  3. Mixed populations in one model.

    1. Half the list was off-vertical, DTC, or wrong-segment - companies that by definition score zero on the criteria that matter. They weren’t low-fit accounts. They weren’t in the TAM at all. And they dragged every summary statistic down with them.

  4. Multipliers manufacturing noise.

    1. Multiplying the additive score by fit and complexity factors buckets accounts onto a handful of discrete products. That’s what created the jagged, multimodal shape - and the fake cluster of “perfect” scores at the top.


The fix is kinda boring but it works

I Can Fix Him / I Can Fix Her | Know Your Meme

The fix isn’t a fancier model. It’s a few mundane things:

  1. Weight by variance, not importance.

    1. The instinct is to weight axes by how important they feel. “Industry fit is critical - give it 22%.” But if most of your survivors are already in-industry, that 22% adds a constant, not separation.

    2. Weight proportional to what an axis actually spreads: roughly coverage × distinct values. We dropped country from a real weight to 2 points (everyone scored the same on it) and moved that budget to revenue, employee count, and catalog depth - high-coverage axes with many bands.

    3. The one exception: a high-value, low-coverage signal. PE backing fires for under 8% of accounts, so pure variance-weighting would delete it - but it’s the whole thesis. So it stays in, as a tie-breaker, not a spread driver. Don’t let the rule kill your best signal.

  2. Disqualify aggressively, before scoring.

    1. Accounts that score zero on every axis aren’t low-fit - they’re not in your TAM yet. They’re noise that compresses everything else. We set aside 58% of the raw list before scoring.

    2. Harsh, but it left a population where every survivor had something to differentiate on. (Set aside, not deleted - a company that gets PE-acquired or crosses the headcount floor next quarter comes right back in.)

  3. Go pure-additive.

    1. Kill the multipliers. Multiplicative scoring feels precise and produces garbage - discrete buckets, dead zones, fake perfect scores. Straight weighted addition spreads cleaner every time.

  4. Normalize into a bell curve.

    1. Raw scores bunch in the middle no matter what. Rank every account, run it through an inverse-normal CDF, and the output spreads across 0–1 with a natural bell shape. Same ranking, better separation - a rep can finally see the difference between a 0.72 and a 0.58. And yes - rank-normalizing imposes the bell shape rather than discovering it, but that’s the point: the normal curve isn’t a claim about the “true” distribution of fit, it’s a coordinate system built for action. The ranking is the truth; the bell is just the most legible way to space it out so a rep can tell a 0.72 from a 0.58.

  5. The model is never checked against your actual customers.

    1. You tuned weights until the output looked right and the top 15 were “names you’d recognize.” That’s memorization, not validation.

    2. The real question: do your closed-won deals and best current customers land in the top tier? If your Performance Food Group / Revance-type accounts score at the median, the rubric is wrong no matter how pretty the histogram. Distribution hygiene and ranking accuracy are two different failures, and the draft only treats the first.

  6. Correlated axes silently re-weight the model toward one hidden factor - usually “size.”

    1. You think you have 9 independent signals. You actually have ~4. Headcount, revenue, PE backing, rep count, and growth all co-move with bigness.

    2. A large company scores high on five axes that are all proxies for the same thing, so “9 weighted criteria” quietly becomes “size, counted five times.” This is invisible on a histogram - the distribution can look great while the ranking is dominated by a factor you never meant to over-weight.

  7. Use Claude Code / Codex to AB test better distributions

    1. To get here the first few times I literally fed the Clay table to Claude along with context and point values / criterias and it will share how to improve

The order matters: fix the weights, disqualify, go additive - then normalize. The bell curve is the last step, not the first. Run it on a broken rubric and all you get is a good-looking wrong answer.

The deeper lesson: two of those fixes aren’t about scoring at all. They’re about not letting missing data and out-of-scope account dominate your statistics. Score quality was never bottlenecked by rubric cleverness. It was bottlenecked by data coverage and population hygiene.


How things improved

After we made these changes, life was looking quite a bit better :)


Why this matters for TAM Score distribution

A compressed score distribution breaks everything downstream:

A good distribution is the precondition for everything your GTM team wants to do with the model.


For the future

generate a futuristic bell curve graphic

Before you ship your next scoring model, check these:

  1. What’s the stdev of the output? (Target: ≥0.12 on a 0-1 scale)

  2. What % of weight goes to saturated axes? (Target: <15%)

  3. What % of your TAM scores 0 on >half the criteria? (Those aren’t low-fit - they’re not in your TAM)

  4. Do your buckets have gaps? Plot the histogram.

  5. Is the output bell-shaped or cliff-shaped?

If the distribution is wrong, the model is wrong - no matter how good the criteria look on paper.

Garrett

Subscribe to my Substack