How the FinOps Health Score is calculated

Five weighted categories — Compute, Storage, Database, Network, and Reserved Coverage. Each one is scored independently, then combined into the overall score using its weight.

How it works

Four cost domains plus a coverage ratio roll up into one score.

01
Cost, read not computed

Monthly cost per resource is pre-computed in the background for each resource — this view never does pricing lookups.

02
Opportunities per category

Active savings recommendations are grouped by resource type into Compute / Storage / Database / Network, each one counting as one issue per affected resource.

03
Reserved Coverage is different

Instead of counting issues, this category scores the actual ratio of Reserved Instance / Savings Plan coverage over running compute — a heuristic based on resource counts.

Formula

category_score  = 100 − (resources with recommendation × penalty per issue)   [Compute / Storage / Database / Network]
reserved_score  = min(100, reserved instances / running instances × 100)

overall_score   = Σ (category_score × category weight)

Categories with zero resources of their type default to a score of 100 (nothing to penalize). Unlike Operational Compliance, this score is not normalized by the total number of resources — each affected resource costs a fixed number of points regardless of inventory size.

Categories

Overall-score weight, per-issue penalty, and which resource types count toward each category.

Category Overall weight Penalty / issue Resource types
Compute 30% -10 pts
EC2 Instances Lambda Functions Workers Droplets Cloud Servers Instances Nodes VMs & Containers
Storage 25% -10 pts
CloudWatch Log Groups EBS Snapshots EBS Volumes EFS File Systems S3 Buckets Volumes Volumes Volumes Datastores Volumes
Database 25% -10 pts
DynamoDB Tables OpenSearch Domains Aurora Clusters RDS Instances
Network 10% -15 pts
Elastic IPs NAT Gateways VPC Endpoints Classic Load Balancers ALB / NLB Route 53 Hosted Zones Zones Load Balancers Firewalls Load Balancers Primary IPs
Reserved Coverage 10% n/a — coverage ratio

Severity by recommendation type40 types

Each opportunity's displayed severity comes from its recommendation type — this drives the badge color in the opportunities table, not the score itself (severity isn't weighted in this score, unlike Operational Compliance).

Recommendation type Severity Resource types
Delete High
NAT Gateways EFS File Systems ALB / NLB Classic Load Balancers
Delete stopped High
RDS Instances
High datastore usage High
Datastores
Idle load balancer High
Load Balancers Load Balancers
Orphan volume High
Volumes
Orphaned snapshot High
EBS Snapshots
Release High
Elastic IPs
Review ns mismatch High
Route 53 Hosted Zones
Set retention High
CloudWatch Log Groups
Snapshot and delete High
EBS Volumes
Snapshot and delete stopped High
EBS Volumes
Stopped droplet High
Droplets
Stopped instance High
Instances
Stopped server High
Cloud Servers
Terminate High
EC2 Instances
Unattached volume High
Volumes Volumes Volumes
Cpu low Medium
EC2 Instances RDS Instances Aurora Clusters
Delete Medium
VPC Endpoints Lambda Functions
Delete empty Medium
DynamoDB Tables
Delete empty zone Medium
Route 53 Hosted Zones
Enable lifecycle Medium
EFS File Systems
Lifecycle policy Medium
S3 Buckets
Low utilization droplet Medium
Droplets
Low utilization vm Medium
VMs & Containers
Over retained snapshot Medium
EBS Snapshots
Paid plan inactive zone Medium
Zones
Paid plan no traffic zone Medium
Zones
Right size Medium
EC2 Instances RDS Instances Aurora Clusters
Stopped vm Medium
VMs & Containers
Switch to on demand Medium
DynamoDB Tables
Unassigned primary ip Medium
Primary IPs
Unused worker Medium
Workers
Upgrade Medium
EBS Volumes
Delete Low
S3 Buckets
Intelligent tiering Low
S3 Buckets
Low datastore usage Low
Datastores
Stale worker Low
Workers
Unallocated node capacity Low
Nodes
Unused firewall Low
Firewalls
Reservation Info
EC2 Instances OpenSearch Domains RDS Instances Aurora Clusters
Any recommendation type not listed here defaults to medium severity.