Verified by Garnet Grid

How to Implement FinOps: Cloud Financial Management

Take control of cloud spending with FinOps. Covers tagging strategy, cost allocation, budget alerts, rightsizing, reserved capacity, and organizational alignment.

The average organization wastes 32% of its cloud spend. That’s not a technology problem — it’s a visibility and accountability problem. Teams spin up resources without understanding the cost, dev environments run 24/7 when they’re used 8 hours a day, and nobody knows which team or application is responsible for the $47,000 line item on last month’s bill.

FinOps is the practice of bringing financial accountability to cloud infrastructure. It’s not about spending less — it’s about understanding what you’re spending, eliminating obvious waste, and making informed trade-offs between cost and performance.


The FinOps Lifecycle

FinOps is a continuous cycle, not a one-time project. You’re always informing, optimizing, and operating.

   INFORM ──────────▶ OPTIMIZE ──────────▶ OPERATE
   (See what you      (Reduce waste,       (Governance,
    spend and where)   rightsize, commit)    budgets, culture)
        ▲                                       │
        └───────────────────────────────────────┘
        (Repeat monthly — costs change as infrastructure changes)

Step 1: INFORM — Get Visibility

You can’t optimize what you can’t see. The first step is building complete cost visibility with tagging, cost allocation, and dashboards.

Tagging Strategy (Non-Negotiable)

Tagging is the foundation of all FinOps. Without tags, you cannot allocate costs to teams, applications, or environments. Every resource must be tagged — no exceptions.

# Required tags for EVERY cloud resource
aws ec2 create-tags --resources i-1234567890 --tags \
  Key=Environment,Value=production \
  Key=Team,Value=platform \
  Key=CostCenter,Value=CC-1234 \
  Key=Application,Value=order-api \
  Key=Owner,Value=john.doe@company.com
TagRequiredExample ValuesPurpose
Environmentdev, staging, productionFilter costs by environment (dev is often 40% of spend)
Teamplatform, data, frontendCost allocation to responsible team
CostCenterCC-1234Map to finance department cost centers
Applicationorder-api, data-pipelineService-level cost tracking
Ownerjohn.doe@company.comAccountability — who to ask about this resource
Managed-ByRecommendedterraform, manual, helmIdentify IaC-managed vs manually-created resources

Enforce Tagging Automatically

Manual tagging policies fail. Use automation to block or flag untagged resources.

{
    "ConfigRuleName": "required-tags",
    "Source": {
        "Owner": "AWS",
        "SourceIdentifier": "REQUIRED_TAGS"
    },
    "InputParameters": {
        "tag1Key": "Environment",
        "tag2Key": "Team",
        "tag3Key": "CostCenter",
        "tag4Key": "Application",
        "tag5Key": "Owner"
    },
    "Scope": {
        "ComplianceResourceTypes": [
            "AWS::EC2::Instance",
            "AWS::RDS::DBInstance",
            "AWS::S3::Bucket",
            "AWS::Lambda::Function",
            "AWS::ECS::Service"
        ]
    }
}

Cost Dashboard

Build a central cost dashboard that answers: “Who is spending how much on what?”

-- AWS Cost and Usage Report query (Athena)
SELECT
    line_item_product_code AS service,
    resource_tags_user_team AS team,
    resource_tags_user_environment AS environment,
    resource_tags_user_application AS application,
    SUM(line_item_blended_cost) AS cost,
    SUM(line_item_usage_amount) AS usage
FROM cost_and_usage_report
WHERE month = '2025-01'
  AND line_item_blended_cost > 0
GROUP BY 1, 2, 3, 4
ORDER BY cost DESC
LIMIT 20;

-- Find untagged spend (the "unknown" category)
SELECT
    line_item_product_code AS service,
    SUM(line_item_blended_cost) AS untagged_cost
FROM cost_and_usage_report
WHERE month = '2025-01'
  AND (resource_tags_user_team IS NULL OR resource_tags_user_team = '')
GROUP BY 1
ORDER BY untagged_cost DESC;

Step 2: OPTIMIZE — Take Action

Once you have visibility, attack the highest-impact optimizations first.

Rightsizing (Biggest Single Savings)

Most instances are over-provisioned. A t3.xlarge running at 8% average CPU should be a t3.small.

# AWS Compute Optimizer — find over-provisioned instances
aws compute-optimizer get-ec2-instance-recommendations \
  --query "instanceRecommendations[?finding=='OVER_PROVISIONED']" \
  --output table

# Quick check: instances with < 10% average CPU utilization
aws cloudwatch get-metric-statistics \
  --namespace AWS/EC2 \
  --metric-name CPUUtilization \
  --dimensions Name=InstanceId,Value=i-1234567890 \
  --start-time $(date -v-30d +%Y-%m-%dT00:00:00Z) \
  --end-time $(date +%Y-%m-%dT00:00:00Z) \
  --period 86400 \
  --statistics Average

Reserved Instances / Savings Plans

For workloads that run 24/7, commitments provide significant discounts. Match commitment level to workload predictability.

CommitmentDiscountRiskBest ForFlexibility
On-Demand (no commitment)0%NoneVariable, unpredictable workloadsFull
1-Year Savings Plan20-30%LowStable baseline computeAny instance family
3-Year Savings Plan40-50%MediumCommitted, well-understood workloadsAny instance family
1-Year Reserved Instance30-40%MediumSpecific instance types you won’t changeSpecific instance type
Spot Instances60-90%High (2-min interruption notice)Batch jobs, CI/CD, stateless workersNone (can be terminated)

Strategy: Cover your baseline with 1-year Savings Plans (low risk, good discount). Add Spot for batch workloads. Reserve 3-year only for workloads you’d bet on (databases, core infrastructure).

Quick Wins

ActionTypical SavingsEffortHow to Find
Delete unused EBS volumes5-10%LowFilter on state=available
Stop dev/staging nights + weekends15-25% of dev/staging costLowLambda scheduler or Instance Scheduler
Rightsize over-provisioned instances10-20%MediumAWS Compute Optimizer
Move infrequent S3 data to Glacier5-15% of storage costLowS3 Lifecycle policies
Purchase Savings Plans for baseline20-40% of committed computeMediumAWS Cost Explorer recommendations
Delete unused Elastic IPs1-3%LowUnattached EIP audit
Reduce CloudWatch log retention2-5% of monitoring costLowSet retention to 30/90 days (not infinite)
Terminate zombie resources5-15%MediumResources with $0 traffic but $X cost
Resize RDS instances5-15% of database costMediumCheck CPU/memory utilization

Step 3: OPERATE — Govern Continuously

Budget Alerts

Set budget alerts at 50%, 80%, and 100%. Alert the team, not just finance.

# AWS Budget with auto-notification
aws budgets create-budget \
  --account-id 123456789012 \
  --budget '{
    "BudgetName": "Monthly-Cloud-Budget",
    "BudgetLimit": {"Amount": "50000", "Unit": "USD"},
    "TimeUnit": "MONTHLY",
    "BudgetType": "COST"
  }' \
  --notifications-with-subscribers '[
    {
      "Notification": {
        "NotificationType": "ACTUAL",
        "ComparisonOperator": "GREATER_THAN",
        "Threshold": 50
      },
      "Subscribers": [
        {"SubscriptionType": "EMAIL", "Address": "finops@company.com"}
      ]
    },
    {
      "Notification": {
        "NotificationType": "ACTUAL",
        "ComparisonOperator": "GREATER_THAN",
        "Threshold": 80
      },
      "Subscribers": [
        {"SubscriptionType": "EMAIL", "Address": "finops@company.com"},
        {"SubscriptionType": "EMAIL", "Address": "engineering-leads@company.com"}
      ]
    }
  ]'

Anomaly Detection

AWS Cost Anomaly Detection or third-party tools (Kubecost, CloudHealth, Infracost) can alert on unexpected spikes before they become $10K problems.

FinOps Team Structure

RoleResponsibilityReports To
FinOps LeadStrategy, vendor negotiations, executive reportingCTO / CFO
Cloud AnalystCost reporting, anomaly investigation, dashboard maintenanceFinOps Lead
Engineering LiaisonTechnical optimization, rightsizing, architecture cost reviewsFinOps Lead
Finance PartnerBudget management, forecasting, chargeback modelsCFO

FinOps Maturity Model

LevelCharacteristicsTypical WasteTime to Reach
CrawlBasic cost visibility, some tagging, reactive optimization30-40%Starting point
WalkFull tagging, team-level cost allocation, monthly rightsizing, Savings Plans15-25%3-6 months
RunAutomated optimization, real-time anomaly detection, engineering cost culture, unit economics5-15%12+ months

Unit Economics (The Ultimate FinOps Metric)

Move beyond total spend to unit cost — cost per transaction, cost per customer, cost per API call. This connects cloud spend to business value.

Cost per order: $0.003 (cloud infrastructure per order processed)
Cost per customer/month: $1.42 (infrastructure to serve one customer)
Cost per API call: $0.000004

If cost per order increases 50% → investigate BEFORE the bill arrives

FinOps Maturity Stages

StageCharacteristicsKey Activities
CrawlBasic cost visibility, manual taggingTag enforcement, cost allocation by team
WalkForecasting, RI/SP purchasing, showbackBudget alerts, anomaly detection, rightsizing
RunUnit economics, automated optimizationCost per customer, automated scaling policies

Cloud Cost Optimization Quick Wins

These actions typically save 20-40 percent with minimal risk:

  1. Delete unused resources — Unattached EBS volumes, old snapshots, idle load balancers (saves 5-10 percent)
  2. Rightsize overprovisioned instances — Most instances run at under 20 percent CPU utilization (saves 10-20 percent)
  3. Reserved Instances for stable workloads — 1-year RI saves around 40 percent, 3-year saves around 60 percent vs on-demand
  4. Storage lifecycle policies — Move infrequently accessed data to cheaper tiers (S3 IA, Glacier) automatically
  5. Spot instances for fault-tolerant workloads — CI/CD, batch processing, dev environments (saves 60-90 percent)
  6. Turn off dev/test after hours — Schedule non-production environments to stop at 7PM and start at 7AM (saves around 65 percent)

FinOps Checklist

  • Tagging policy defined and enforced (target: 100% tag compliance)
  • Cost allocation configured by team, application, and environment
  • Monthly cloud cost review meeting (FinOps team + engineering leads)
  • Budget alerts set at 50%, 80%, and 100% thresholds
  • Rightsizing recommendations reviewed monthly (Compute Optimizer or equivalent)
  • Savings Plans purchased for stable baseline workloads
  • Dev/staging environments auto-stop on nights and weekends
  • Unused resources cleaned up quarterly (EBS, EIP, snapshots, old AMIs)
  • Anomaly detection alerts configured for unexpected spend spikes
  • Unit economics tracked (cost per transaction, per customer, per API call)
  • Cost review included in architecture design reviews for new services
  • Team-level cost dashboards accessible to engineering leads

:::note[Source] This guide is derived from operational intelligence at Garnet Grid Consulting. For FinOps consulting, visit garnetgrid.com. :::

Jakub Dimitri Rezayev
Jakub Dimitri Rezayev
Founder & Chief Architect • Garnet Grid Consulting

Jakub holds an M.S. in Customer Intelligence & Analytics and a B.S. in Finance & Computer Science from Pace University. With deep expertise spanning D365 F&O, Azure, Power BI, and AI/ML systems, he architects enterprise solutions that bridge legacy systems and modern technology — and has led multi-million dollar ERP implementations for Fortune 500 supply chains.

View Full Profile →