Cloud Cost Optimization Checklist

Chapter 1 of 9 · 6 checks · 3 min

Visibility, tagging and allocation

Whether engineers can see what their services cost, and every line of the bill traces back to an owner.

Show
  1. Engineers can see the daily cost of the services they ownMust

    Why it matters and how to check

    The FinOps principles say cost data should be accessible, timely and accurate, and that everyone takes ownership for their technology usage. Nobody can own spend they only see once a month in a finance spreadsheet. The Azure cost checklist likewise asks that cost data is collected daily and reviewed against budgets.

    To verify: ask an engineer on each team to open the cost tool (AWS Cost Explorer, Google Cloud Billing reports, Azure Cost Management), filter to their service and read yesterday's cost and the trend for the last 30 days. If they lack access or the filter does not exist, this check fails.

  2. Detailed billing data is exported to a place you can queryShould

    Why it matters and how to check

    The consoles are good for a glance, but questions such as "what did this feature cost last quarter" need line-item data. All three providers can export detailed billing data on a schedule: AWS Data Exports (including the Cost and Usage Report), Google Cloud Billing export to BigQuery and Azure Cost Management exports to a storage account. The FinOps Open Cost and Usage Specification (FOCUS) gives a common column format across providers.

    To verify: find the export, confirm it is still being written daily, and run one query against it, such as cost by service and tag for last month. Check who can read it, since billing data reveals a lot about your architecture.

  3. A short list of required tags or labels is defined and appliedMust

    Why it matters and how to check

    Allocation in the FinOps framework depends on a tagging and metadata strategy that maps resources to teams, products and environments. Keep the required list short so people actually apply it: typically owner or team, service, environment and cost center. On AWS, user-defined cost allocation tags must also be activated in the billing console before they appear in cost reports. Never put sensitive information in tags.

    To verify: group last month's cost by each required tag and read the share of cost with no value. That untagged share is your allocation gap; track it month over month. Spot-check a few resources created in the last week.

    Example

    HCL
    owner        = "payments-team"
    service      = "checkout-api"
    environment  = "prod"          # prod | staging | dev | sandbox
    cost-center  = "cc-1042"
  4. Missing required tags are blocked or flagged when resources are createdShould

    Why it matters and how to check

    Tagging by hand decays. The FinOps framework describes mature allocation as ownership fields enforced at provisioning, with requests missing required fields blocked. Use what your platform offers: AWS Organizations tag policies and service control policies, Azure Policy with a deny or modify effect, and policy checks in your infrastructure as code pipeline for Google Cloud labels and everything else.

    To verify: try to create a resource without the required tags in a non-production account through the normal path (console and pipeline). It should be rejected, or the tags should be filled in automatically. Check the IaC modules set the tags by default.

  5. Accounts, projects or subscriptions separate teams and environmentsShould

    Why it matters and how to check

    Tags cannot cover everything: some charges, such as support, some data transfer and certain shared services, are hard or impossible to tag. Separate AWS accounts, Google Cloud projects or Azure subscriptions per team and environment give you allocation for free at the top level and make production cost easy to tell apart from development.

    To verify: list your accounts or projects and confirm each one maps to one owner and one environment. Look for a "misc" or legacy account holding a large share of spend; it usually hides unowned resources.

  6. Shared costs have an agreed method for splitting themNice to have

    Why it matters and how to check

    Platform clusters, central networking and support plans serve many teams. The FinOps allocation guidance describes splitting shared costs with fixed, proportional or even-split models, and notes many early practices simply budget shared costs centrally instead of allocating them. Either is fine; the problem is having no decision, so every review argues about it again.

    To verify: find the written rule for each large shared cost and check the monthly report applies it. Teams should be able to see their share and the method behind it.