Back to Blog
    Cost Optimization

    10 Proven Strategies to Reduce AWS Costs by 50%

    Kostiantyn DementievJuly 15, 20258 min read

    TL;DR: Ten techniques for cutting an AWS bill, ordered roughly by how quickly they pay off. Reserved capacity and right-sizing usually account for most of the saving. Nothing here requires a rewrite of your application.

    Most AWS accounts that have been running for more than a year carry a quiet layer of waste: instances sized for a load test that finished two years ago, volumes still billing after their instance was terminated, snapshots nobody remembers taking. None of it is dramatic on its own. Added up, it is usually a fifth to two fifths of the bill.

    This guide walks through the techniques we apply, in the order we apply them. Each one is something you can do yourself with the AWS console and a few hours.

    Use Reserved Instances Strategically

    Reserved Instances (RIs) are discounted up to 75% against On-Demand pricing, but many accounts either skip them entirely or buy the wrong shape of commitment.

    The right approach

    • Analyze historical usage: use AWS Cost Explorer to find workloads that have run consistently for a year or more
    • Start with Standard RIs: buy 1 year Standard RIs for 60 to 70% of your baseline capacity, not all of it
    • Convertible RIs for flexibility: pick Convertible when you expect the instance family to change
    • Regional RIs for AZ flexibility: buy Regional to avoid locking a discount to one availability zone

    Pro tip

    Treat the AWS RI recommendations as a starting point, then check them against your own usage. They tend to assume 100% coverage, which is too aggressive for anything with a variable load.

    Use Spot Instances for Interruptible Work

    Spot capacity is discounted up to 90% against On-Demand. The work is in deciding which workloads can absorb a two minute termination notice, and building the fault tolerance to prove it.

    Where Spot fits

    Good fit for Spot

    • Batch processing jobs
    • Big data analytics
    • CI/CD build agents
    • Development and test environments
    • Stateless web tiers behind auto-scaling

    Avoid Spot for

    • Databases without clustering
    • Real-time processing systems
    • Anything that is a single point of failure
    • Workloads tied to instance storage
    • Production systems with no retry path

    Implementation

    # Example: Auto Scaling Group with Spot Instances
    aws autoscaling create-launch-template \
      --launch-template-name spot-template \
      --launch-template-data '{
        "ImageId": "ami-12345678",
        "InstanceType": "m5.large",
        "InstanceMarketOptions": {
          "MarketType": "spot",
          "SpotOptions": {
            "SpotInstanceType": "one-time",
            "MaxPrice": "0.10"
          }
        }
      }'

    Right-Size Your Instances

    Oversized instances are the single most common finding in an audit. Right-sizing means matching instance type and size to what the workload actually uses, rather than what somebody guessed at launch.

    Step by step right-sizing

    Step 1: analyze current performance

    Use CloudWatch to watch CPU, memory, and network over 30 days or more. Flag anything sitting consistently below 40% CPU.

    Step 2: run AWS Compute Optimizer

    Enable Compute Optimizer for recommendations derived from your own utilization history rather than a generic sizing table.

    Step 3: test before production

    Apply the recommendation in staging first. A recommendation based on CPU alone can miss a memory ceiling.

    Step 4: roll out gradually

    Resize inside a maintenance window and watch the first 48 hours closely before moving on to the next batch.

    Tune Auto Scaling

    Auto Scaling is supposed to mean you pay for capacity only while you need it. In practice most groups are configured with a floor high enough that they never scale down, or a cooldown so long that they never scale up in time.

    Predictive scaling configuration

    {
      "AutoScalingGroupName": "web-servers-asg",
      "PolicyName": "predictive-scaling-policy",
      "PolicyType": "PredictiveScaling",
      "PredictiveScalingConfiguration": {
        "MetricSpecifications": [
          {
            "TargetValue": 70.0,
            "PredefinedMetricSpecification": {
              "PredefinedMetricType": "ASGAverageCPUUtilization"
            }
          }
        ],
        "Mode": "ForecastAndScale",
        "SchedulingBufferTime": 300,
        "MaxCapacityBreachBehavior": "IncreaseMaxCapacity"
      }
    }

    Optimize Storage Costs

    Storage creeps. EBS volumes outlive their instances, snapshot schedules run without a retention policy, and S3 buckets keep cold objects in Standard because nobody set a lifecycle rule.

    Where to look first

    EBS

    • Move gp2 volumes to gp3
    • Enable EBS optimization
    • Delete unattached volumes
    • Put a lifecycle policy on snapshots

    S3

    • Turn on Intelligent Tiering
    • Add lifecycle rules for cold objects
    • Use Transfer Acceleration selectively
    • Compress before upload

    Strategies 6 to 10: quick wins

    6. Use AWS Savings Plans

    Commit to a consistent hourly compute spend for 1 to 3 years and save up to 72% against On-Demand, with more flexibility than an RI.

    7. Cut data transfer costs

    CloudFront, VPC endpoints, and keeping chatty services in the same AZ all reduce transfer charges that never show up as a line item anyone owns.

    8. Tag everything

    Consistent tagging is what turns a single bill into per-team numbers, and it is how you find resources nobody claims.

    9. Schedule non-production

    Stop dev and test instances outside working hours with Lambda and EventBridge. A 12 hour weekday schedule removes roughly two thirds of the runtime.

    10. Alert on cost

    AWS Budgets with anomaly alerts catch the runaway job in a day instead of at the end of the month.

    What this looks like in practice

    Two engagements where this list was most of the work:

    46%
    Monthly AWS bill reduction at a data governance SaaS (NDA)
    45%
    Monthly AWS bill reduction at a martech SaaS (NDA)
    20 to 40%
    What an audit typically surfaces before any code changes

    Getting started

    You do not have to do all ten. Start with the two that need no code changes: buy reserved capacity for the workloads you know are permanent, and resize the instances that are obviously too big. Spot and predictive scaling can wait until the easy money is banked.

    If you would rather have someone find these savings in your account, our AWS cost audit does exactly that, at a fixed price.

    One caveat: cost optimization is not a one-time project. Accounts drift. Set a monthly review, even a short one, or you will be reading this guide again next year.

    Want a second pair of eyes?

    The audit is free: a certified senior engineer goes through your account with read-only access and writes up what is worth fixing, ranked by impact. You get the report either way. Book the free audit.