Cost Allocation Score

Allocation Score v1.0 — methodology

Everything the score does, in full. A metric whose definition is private cannot be cited, and one whose definition moves silently cannot be trusted — so this page is versioned and every change is listed at the bottom.

The foundation we build on

The backbone is the FinOps Foundation’s published KPI, Percentage of Costs Associated with Untagged CSP Cloud Resources: untagged cost divided by total cost. The Foundation documents a variant restricted to taggable resources, and states that 0% is unattainable because some resources cannot be tagged — so under 10% is the recommended initial goal. We use the taggable-denominator variant and anchor grade A to that 10% target.

FinOps Foundation material is used under CC BY 4.0. Finitizer is not affiliated with the FinOps Foundation.

The five components

Coverage

40 points

Share of taggable spend carrying at least one tag.

Why it is weighted this way: This is the FinOps Foundation KPI, inverted. It gets the largest weight because it is the question everything else serves: can this dollar be attributed to anyone at all?

Required-tag completeness

25 points

Share of taggable spend carrying every tag in your required set (default env, owner, cost-center, app).

Why it is weighted this way: One tag is enough to prove a resource was touched. Showback needs a specific set, and a resource tagged only with "app" cannot be charged to a cost centre.

Key hygiene

15 points

Penalises keys that exist in more than one spelling (CostCenter / costcenter / cost_center) and keys covering under 1% of spend.

Why it is weighted this way: Variant keys silently split a dimension in two, so every report built on them is wrong in a way that is very hard to see. Orphan keys are usually abandoned experiments adding noise to every group-by.

Value hygiene

10 points

Share of tagged spend whose value is a placeholder — tbd, test, none, xxx, and so on.

Why it is weighted this way: A tag with a placeholder value passes every coverage check and allocates nothing. It is worse than no tag, because it hides the gap.

Concentration

10 points

Share of unallocated spend held by the five largest service/region groups.

Why it is weighted this way: One $40k untagged node group and four thousand $10 resources can produce identical coverage, and they are not equally bad. The first is one tagging rule away from fixed; the second is a quarter of work. The score reflects that.

Grade bands

GradeScoreReads as
A90+Meeting the published target. Under 5% untagged earns an A+ note.
B75–89Working, with known gaps.
C60–74Showback is possible but contested.
D40–59Allocation exists on paper.
F0–39No usable allocation.

Taggability rules

Each charge is classified before scoring. Untaggable charges leave the denominator entirely; unknown charges are counted as taggable, which is the conservative choice, and reported so you can see how much rests on it.

MatchesVerdictWhy
^tax$untaggableTax is levied on the account, not on a resource.
supportuntaggableSupport is billed as a percentage of account spend.
\bmarketplace\buntaggableMarketplace charges carry the vendor's metadata, not yours.
data ?transfer|egress|bandwidthuntaggableData transfer is billed at the account or lane level, not per resource.
refund|credit|adjustmentuntaggableCredits and adjustments are account-level.
^aws (cost explorer|budgets|config|cloudtrail)$untaggableAccount-level management services.
savings ?plan|reserved instance|committed ?useuntaggableCommitment charges are account-level, not resource-level.
ec2|compute engine|virtual machines?taggableInstances support tags.
\bs3\b|cloud storage|blob storagetaggableBuckets support tags.
\brds\b|cloud sql|databasetaggableDatabase instances support tags.
lambda|cloud functions|cloud runtaggableFunctions and services support tags.
bigquery|redshift|snowflaketaggableDatasets and clusters support labels or tags.
kubernetes|eks|gke|akstaggableClusters and node groups support tags.

This table is incomplete by nature — cloud providers add services faster than anyone can classify them. If you find a charge we classify wrongly, we want to know.

What this score does not do

  • · No benchmark percentiles. We will publish a distribution when we have collected enough anonymised scores to have one. Inventing “the median organisation scores 58” today would be a fabrication, and this tool exists partly as a reaction against exactly that.
  • · No judgement of your tag values. We can see that a value is a placeholder; we cannot see whether “team-alpha” is a real team.
  • · No allocation of shared costs. Splitting a shared Kubernetes cluster across tenants is a genuinely hard problem and is not what this measures.

Changelog

v1.0
Initial published version. Five components at 40/25/15/10/10, grade A anchored to the FinOps Foundation’s under-10% target.

Scoring once tells you where you are. Scoring continuously tells you whether you are winning.

Finitizer recomputes allocation on every run and tracks whether NEW spend arrives tagged — the number that says whether your policy is actually working, rather than whether someone did a clean-up sprint last quarter.