← Blog
An illustrated green calculator beside a curled receipt on a pale peach background.
Published on
2026-10-29

Cloud cost optimization: a monthly review for running workloads

Cloud cost optimization is the ongoing work of reducing avoidable spending while keeping a workload’s required performance, reliability, and security. For a service already in production, it starts with understanding what changed on the bill and whether the work delivered changed with it.

A monthly review gives engineering and finance a shared decision point. It should end with a few assigned changes and a way to measure their results. This guide covers that operating review. For an initial estimate or a comparison of provider quotes, start with our compute pricing guide.

What should a cloud cost optimization review measure?

Track total cloud spend, cost per useful unit of work, and the service requirements that must remain satisfied. A smaller invoice alone does not prove that a system became more efficient. You may have served fewer customers, processed fewer files, or delayed work until next month.

Cloud cost management also includes budgets, forecasts, and assigning costs to teams. Optimization uses that information to decide what to change. AWS’s cost optimization guidance treats this as continuing work across resource selection, demand, and expenditure awareness.

For the monthly meeting, bring the billing export, workload metrics, the last action list, and the next few months’ expected changes. Include someone who understands the bill and someone who can explain the service’s behavior.

1. Make cloud costs comparable before explaining them

Write down the accounts, subscriptions, projects, regions, and services included in the review. Keep that scope consistent between periods. If a database moves to a different account, its cost should not disappear from the workload’s comparison.

Then agree on the cost basis. An invoice shows what is charged in a billing period. An operational view may spread an upfront commitment across its term. AWS documents this difference between billing data and amortized costs in Cost Explorer. Keep both views available when they answer different questions, and label which one you are using.

  • Use the same currency and state how exchange-rate changes are handled.
  • Identify credits, refunds, taxes, support, and one-time charges separately.
  • Show the number of days in each period alongside total spend.
  • Flag incomplete billing data instead of treating a partial month as a completed one.
  • Record changes in discounts or contract terms that affect the comparison.

A useful variance note is specific: “Storage capacity grew, while the unit rate stayed the same.” “Cloud costs increased” gives the next person little to investigate. Separate quantity changes, rate changes, and changes in the mix of services where the data allows.

2. Assign an owner to cloud resources and shared costs

Each material cost needs someone who can explain its purpose. Use account structure, project names, tags, or labels to connect cloud resources to a service and environment. The FinOps Foundation’s cost allocation guidance also recognizes that shared costs need an explicit allocation approach.

Keep an “unallocated” amount visible. Hiding it inside another team’s total makes the report look complete without making the resource understood. A missing tag should create an ownership question, not an automatic deletion request.

For a shared database or logging platform, document how costs are divided and who maintains that rule. If the allocation changes, explain its effect on team totals. Moving a charge from one team to another does not reduce the organization’s bill.

3. Compare spending with completed work

Choose a unit that means something for the service: an accepted processing job, a completed transaction, or a customer account served. Keep the definition stable. The FinOps Foundation’s unit economics guidance connects technology costs with the value or work they support.

Cost per completed job = workload cost for the period ÷ accepted jobs completed in that period.

Consider this hypothetical example, using the same cost scope and job acceptance criteria:

  • Before: $2,400 for 1,200 accepted jobs, or $2.00 per job.
  • After: $2,200 for 1,000 accepted jobs, or $2.20 per job.
  • The bill fell by about 8.3%, but cost per accepted job rose by 10%.

This does not establish why efficiency changed. It tells you to investigate workload size, failures, idle time, or other differences before claiming savings. Include the cost of failed attempts in the workload total; counting only successful jobs in the denominator should not erase the resources spent on failures.

For a CPU-hosted API, compare the same request mix, concurrency, and latency target. For a background worker, hold input size and acceptance criteria steady. If the work changes, separate those groups before comparing cost per request or job.

For GPU workloads, compare the same model, dataset, precision, and quality target. A cheaper hourly rate can be offset by longer execution or more retries. Use cost per accepted result alongside completion time and quality.

4. Review idle capacity and rightsizing with workload evidence

Start with resources that appear unused, then check with their owners. A quiet instance may support a monthly batch, a standby service, or a recovery requirement. For each candidate, record its purpose, dependencies, observation period, and what happens if it is stopped.

Stopping compute does not necessarily remove every associated charge. In Amazon EC2, for example, stopped instances can still incur charges for EBS volumes and Elastic IP addresses. Review the related resources and commitments before recording the expected saving.

Rightsizing means testing whether a different resource configuration can meet the same requirements at lower cost. CPU averages are insufficient evidence. Review memory, storage I/O, network activity, peaks, and application latency. The AWS Compute Optimizer documentation explains the metrics used for recommendations, including how to add memory utilization data.

Test one change against a representative workload. Set limits for latency, errors, queue length, or completion time, and define when to revert it. If you use autoscaling, review minimum capacity and scaling behavior as well as maximum capacity. A policy that scales out but rarely scales back can leave avoidable spending in place.

The FinOps usage optimization guidance emphasizes matching resources to needs while considering operational tradeoffs. Treat cloud cost optimization tools as evidence for an engineering decision.

Test whether a CPU instance fits the workload

APIs, background workers, and preprocessing steps that do not benefit from GPU acceleration are candidates for CPU instances. Our guide to vCPU virtual machines explains when a CPU VM fits the job. Check memory and I/O needs alongside vCPU count. Before comparing configurations, check how vCPUs relate to physical cores and whether the provider documents shared or dedicated CPU access.

For an existing CPU workload, test a smaller configuration or a different provider against the baseline above. If you split CPU work out of a GPU pipeline, measure the complete pipeline: transfer time, startup delays, retries, and any GPU time spent waiting. Keep the existing setup available until the candidate meets the same performance and recovery requirements.

Compare the recurring full bill and operating effort, then show migration and parallel-running costs separately. A lower instance rate does not establish a saving if the move leaves an unused commitment behind or adds maintenance work. Use the compute pricing guide linked above to keep both options on the same cost basis. If the change involves moving a workload, use our cloud migration checklist to plan dependencies, data validation, cutover, and rollback.

On Hivenet, an idle instance still incurs compute charges while its state is Running. The Compute billing documentation explains when charging starts and stops. Confirm the current configuration, availability, and effective price before a test.

To assess a candidate workload, talk through your CPU requirements with Hivenet. Bring its current cost, resource measurements, location requirements, and performance target so the comparison starts from the work you need to run.

5. Examine storage growth and data transfer

Separate active data from versions, snapshots, backups, logs, and temporary outputs. Ask what caused growth and which retention rule applies. The owner should confirm that a proposed deletion or shorter retention period still meets the service’s recovery and business requirements.

Storage tiers also need a usage-based comparison. A lower capacity rate can come with different access costs or retention conditions. Our Azure Blob Storage guide explains why tier choice needs more context than the price of stored gigabytes.

Before changing backup retention or storage placement, check the restore process and required recovery time. Our guide to recoverability testing covers how to verify that a backup can support recovery.

For network costs, map the actual route: source, destination, region, zone, and any gateway or processing service between them. Look for repeated transfers, duplicate exports, or a compute job reading the same remote dataset repeatedly. Price a proposed change using the provider’s rules for that route. Moving data closer to processing may help, but the migration, replication, and ongoing access costs belong in the calculation.

6. Review Savings Plans and other commitments after usage changes

A commitment should reflect the demand you expect to retain. Review planned migrations, project closures, and rightsizing work before using historical usage to choose a new commitment. AWS explicitly says its Savings Plans recommendations use historical data and do not forecast future usage.

For existing Savings Plans, distinguish two measures:

  • Utilization shows how much of the purchased commitment is being used.
  • Coverage shows how much eligible usage is covered by Savings Plans, measured using its On-Demand equivalent.

High coverage can still include wasteful usage. Low utilization can indicate that a commitment no longer matches demand. Record the term, applicable services, payment obligations, and expected baseline before deciding whether another purchase makes sense.

For flexible batch jobs, interruptible capacity may be worth testing separately. EC2 Spot Instances can be interrupted, so include checkpointing, retries, lost work, and deadline risk in the comparison. A lower capacity rate is only one part of the decision.

7. Turn the monthly review into a short action list

Choose a few changes that the team can complete and verify. Rank them by expected recurring savings, engineering effort, service risk, and confidence in the estimate. A complex redesign with an uncertain benefit should not automatically outrank a small, well-understood change.

For each action, record:

  • The resource or workload, its owner, and the proposed change.
  • The current baseline and expected cost effect, with assumptions.
  • The performance and recovery requirements to preserve.
  • The implementation date, rollback conditions, and validation date.
  • The observed result, including unexpected costs or regressions.

Do not add overlapping estimates together. Rightsizing and a new discount can both affect the same compute hours. Recalculate the combined outcome instead of presenting two independent savings claims.

Compare results after enough representative work has run and billing data has arrived. Record whether the change reduced actual spending, avoided expected growth, or improved cost per unit. Those are different outcomes, and each can be useful.

Keep alerts running between monthly reviews

The monthly review handles decisions that need context. Unexpected spending still needs attention between meetings. Route budget and anomaly notifications to someone who can investigate, with a backup owner and an escalation path.

A budget alert is not automatically a spending cap. Microsoft’s Azure budget documentation states that budgets do not stop consumption or affect resources. Billing data and evaluation also take time, so an alert should not be treated as a real-time limit.

If you configure automation to stop resources, test it separately and define exceptions for critical services. Check whether the response can interrupt customer work, affect recovery, or leave other billable resources running.

A monthly cloud cost optimization checklist

  1. Close the reporting period and confirm the cost basis.
  2. Explain the largest changes in quantity, rate, and service mix.
  3. Resolve ownership questions and expose unallocated costs.
  4. Compare cloud spend with useful work and service quality.
  5. Review idle resources, CPU workload fit, sizing, storage, transfers, and commitments.
  6. Assign a few changes with owners and validation dates.
  7. Measure previous actions and update the forecast.

Cloud cost optimization works best when the next review can answer a concrete question: what changed, what did it cost, and did the workload still deliver what people needed?

‍

Your next workload belongs on Hivenet.

Pick one AI, compute, or storage workload and see the difference for yourself. Spin it up in minutes, or let our team map your fastest path to production.