Skip to main content
Back to Blog
Cloud

Cloud FinOps: 5 AWS Cost Mistakes SMBs Make in 2026

The five most expensive AWS cost mistakes small and mid-size businesses make in 2026—and the exact steps to fix them before they compound further.

PlatOps Team
Author
Published: March 10, 2026
10 min read

Most AWS cost problems at small and mid-size businesses share a common origin: the account was set up by engineers focused on shipping features, not managing cloud spend. That's exactly how it should start. The problem is that spending discipline rarely catches up once the infrastructure scales.

The result is a predictable pattern. An SMB reaches $8,000–$25,000 per month in AWS spend, the finance team starts asking questions, and a cost review surfaces the same set of mistakes we see in nearly every audit we run. Not because SMB engineering teams are less capable—but because AWS pricing is deliberately complex, and cost visibility degrades quietly while the team's attention is elsewhere.

This post covers the five most expensive mistakes we find in SMB AWS environments, with realistic savings estimates and the exact remediation steps for each.


Mistake 1: Paying On-Demand Rates for Stable Workloads

Typical overspend: 30–60% of EC2 and compute costs

On-demand pricing is the right starting point. It's the wrong permanent state.

AWS offers two commitment-based discount mechanisms that are consistently underused by SMBs: Reserved Instances (RIs) and Compute Savings Plans. Both require a one-year or three-year commitment. Both deliver material discounts in exchange for that commitment.

A 1-year no-upfront Compute Savings Plan saves 30–37% versus on-demand rates on covered compute. A 3-year partial-upfront RI on a stable instance type saves 50–60%. For an SMB running $10,000/month in on-demand EC2 for predictable workloads—production APIs, databases, application servers—that's $3,000–$6,000 per month left on the table.

The reason SMBs miss this is understandable: commitment feels risky when you're not sure where your infrastructure will be in 12 months. The answer is to start with Compute Savings Plans rather than RIs, and to commit conservatively. Savings Plans are more flexible than RIs—they apply across instance families, regions, and even services (EC2, Fargate, Lambda)—and a 1-year no-upfront plan requires zero upfront payment.

How to find the opportunity: AWS Cost Explorer → Savings Plans → Recommendations. Filter for services with on-demand coverage above 80% and consistent monthly spend. Any workload that has been running for six months without significant variation is a candidate.

The fix: Purchase a Compute Savings Plan to cover 70–80% of your steady-state compute. Leave 20–30% uncovered to handle variable workloads on on-demand. Revisit coverage quarterly as your infrastructure evolves.

An SMB running $15,000/month in compute that applies a 1-year Compute Savings Plan to 75% of that spend saves approximately $3,900–$5,600/month—$47,000–$67,000 per year—from a one-hour commitment purchase.


Mistake 2: NAT Gateway Charges Nobody Is Watching

Typical overspend: $500–$8,000/month

NAT gateways are one of the most consistently underestimated cost sources in AWS environments. The architecture looks reasonable: private subnets use a NAT gateway to access the internet. What SMBs miss is that NAT gateways charge $0.045 per GB of data processed—in addition to the $0.045/hour per-AZ base charge.

When your application makes frequent calls to external APIs, ships logs to a third-party service, pulls container images, or syncs data to S3—and all of that traffic routes through a NAT gateway—the data processing fees accumulate fast. We regularly audit environments where NAT gateway processing fees exceed the cost of the application's EC2 instances.

The fix is to move AWS service traffic to VPC endpoints, which bypass the NAT gateway entirely. S3 and DynamoDB gateway endpoints are free. Interface endpoints for ECR, Secrets Manager, SSM, and CloudWatch cost $0.01/hour per AZ—almost always cheaper than the NAT gateway processing fees those services would otherwise generate.

How to find the opportunity: AWS Cost Explorer → filter by VPC service → look for NatGateway charges. If NAT gateway data processing exceeds $200/month, a routing audit is warranted. VPC Flow Logs analyzed in Athena can identify the specific services and traffic volumes driving the charges.

The fix—in order of impact:

  1. Create S3 and DynamoDB gateway endpoints (free, immediate savings)
  2. Create interface endpoints for ECR, Secrets Manager, and SSM
  3. Audit routing tables for same-VPC traffic that is incorrectly hairpinning through the NAT gateway
  4. For cross-region data replication, evaluate whether S3 Transfer Acceleration or direct VPC peering is cheaper than NAT gateway egress

An environment with $3,000/month in NAT gateway charges can often cut that to $400–$600/month with VPC endpoint coverage for the primary AWS services involved.


Mistake 3: S3 Storage That Has Never Seen a Lifecycle Policy

Typical overspend: $300–$5,000/month

S3 Standard storage costs $0.023/GB/month. Most SMBs pay Standard pricing on data that has not been accessed in months. The reason is simple: when teams create S3 buckets, lifecycle policies are rarely the first concern. Over time, buckets accumulate data that silently compounds the bill.

The most common offenders in SMB environments:

  • Application logs — written daily, rarely accessed after 14 days, almost never accessed after 30
  • CloudTrail logs — required for compliance but rarely accessed; most compliance frameworks allow archival after 90 days
  • Database backups — RDS automated backups are covered by AWS, but custom pg_dump or mysqldump outputs uploaded to S3 are not. Old backup sets pile up indefinitely.
  • Deployment artifacts — old container images, build outputs, and Terraform state backups from CI/CD pipelines
  • Infrequently accessed data lakes — raw data uploads to Standard that should have moved to Standard-IA within 30 days

The storage class pricing makes the case for lifecycle policies clear:

Storage ClassCost per GB/monthBest For
S3 Standard$0.023Active, frequently accessed
S3 Standard-IA$0.0125Infrequent access, retrieval in milliseconds
S3 Glacier Instant Retrieval$0.004Archive, retrieval in milliseconds
S3 Glacier Deep Archive$0.00099Long-term archive, retrieval in hours

A 5TB log archive on Standard ($115/month) drops to under $5/month on Deep Archive. An SMB with 20TB of mixed data on Standard paying $460/month can often reach $50–$80/month with appropriate lifecycle policies across bucket types.

The fix: S3 console → select each bucket → Management → Lifecycle rules. A standard starting policy:

  • Transition to Standard-IA after 30 days
  • Transition to Glacier Instant Retrieval after 90 days
  • Transition to Deep Archive after 365 days
  • Expire/delete after your retention window (7 years for most regulated data; 30–90 days for application logs)

Run this across every bucket with objects older than 30 days and no existing lifecycle policy. S3 Storage Lens shows which buckets have no lifecycle rules and their total storage size—start with the largest.


Mistake 4: Dev and Staging Environments Running Around the Clock

Typical overspend: $1,000–$6,000/month

Production environments need to run 24/7. Dev and staging environments do not.

A typical SMB maintains a staging environment that mirrors production (for pre-deployment testing) and one or more dev environments (for active feature development). Those environments are used during business hours—roughly 9am to 7pm on weekdays. They are idle for the remaining 73% of the week, accruing EC2, RDS, and ECS charges the entire time.

The math is straightforward. An EC2 m5.xlarge running continuously costs approximately $139/month. The same instance running only during business hours (10 hours/day, 5 days/week) costs $38/month. An RDS db.m5.large running 24/7 costs about $138/month; with off-hours shutdown, it costs $55/month.

An SMB with two non-production environments—each running 4 EC2 instances, 2 RDS databases, and an ECS cluster—is likely spending $3,000–$5,000/month on compute that is idle for 70% of the time.

The fix: AWS Instance Scheduler automates start/stop schedules for EC2 and RDS instances. Deploy it via CloudFormation (AWS provides the template) and tag your non-production instances with the schedule. Configuration takes two to four hours. Savings begin the next billing cycle.

For ECS Fargate-based environments, define a scheduled scale-to-zero task via EventBridge rules. For Kubernetes (EKS), the kubernetes-cost-optimization-guide covers HPA and KEDA configuration that can scale workloads to zero during off-hours.

RDS note: Aurora Serverless v2 can scale to near-zero during idle periods automatically, making it worth evaluating as a replacement for RDS instances in non-production environments. The cost model aligns better with intermittent usage patterns.

One caveat: Ensure your CI/CD pipeline's scheduled jobs do not run during the shutdown window. If your pipeline triggers nightly integration tests at 2am, either run those first and shut down after, or exclude the CI/CD runner infrastructure from the schedule.


Mistake 5: No Tagging, No Cost Attribution, No Accountability

Typical impact: prevents optimization of 40–60% of total spend

This is not technically a line-item cost mistake—there is no "missing tags" charge on your AWS bill. But it is the reason many SMBs cannot act on the savings opportunities above: they cannot see which resources belong to which application, team, or environment, so every optimization decision requires manual investigation.

Without tagging, AWS Cost Explorer shows you what services you are spending on. It cannot tell you whether that $4,000/month in EC2 belongs to your production API, your data pipeline, your staging environment, or a forgotten proof-of-concept from 2024. That ambiguity turns every optimization attempt into an archaeological dig.

The problem compounds as teams grow. When engineering, product, and infrastructure teams all have AWS access and no tagging policy, cost accountability falls through the cracks. Nobody owns the spend. Nobody has an incentive to reduce it.

The fix—a minimum viable tagging policy:

Every resource should carry four tags at minimum:

Environment: production | staging | dev | sandbox
Team: engineering | data | security | platform
Application: api-service | data-pipeline | auth | billing
CostCenter: eng-prod | eng-nonprod | data | security

Enforce this at the IaC layer. If your infrastructure is managed with Terraform or CloudFormation, add required tags to every resource module. For existing untagged resources, AWS Tag Editor allows bulk tag application across resource types.

Once tags are in place, enable AWS Cost Explorer tag-based grouping to see spend by environment and application. This surfaces exactly which workloads are driving the largest bills—and which are the highest-priority candidates for the savings levers in mistakes 1 through 4.

For SMBs that have let tagging slip, a one-time tag audit typically takes four to eight hours. The ongoing maintenance cost is near-zero when tagging is enforced at the IaC layer. The aws-cost-savings-audit-findings post walks through the broader set of items a structured cost audit surfaces, including several that tagging makes visible for the first time.


What These Five Mistakes Cost Combined

Running the numbers on a representative SMB environment—$18,000/month in AWS spend, two engineers managing infrastructure part-time, three environments, two years of accumulated technical debt:

MistakeMonthly OverspendFix Complexity
On-demand compute, no Savings Plans$3,800Low (1-hour commitment)
NAT gateway data processing$1,400Medium (2–4 days)
S3 without lifecycle policies$900Low (2–4 hours)
Non-prod environments running 24/7$2,200Low (2–4 hours)
No tagging / no attributionUnlocks visibility into aboveMedium (1–2 days)
Total recoverable$8,300/month~1 week of work

$8,300/month is a $99,600/year finding. On an $18,000/month AWS bill, that represents 46% recoverable waste—which is consistent with what we find in practice.

The time investment to address all five is roughly one week of focused engineering work, assuming the infrastructure is managed with IaC and someone on the team has AWS cost tooling familiarity. For teams that have never run a cost audit, the FinOps Management service includes the analysis, remediation plan, and implementation support as a packaged engagement.


Where to Start

If you are approaching this for the first time:

  1. Open Cost Explorer and identify your top five spending services. This takes 20 minutes and tells you where the largest bills are concentrated.
  2. Check Savings Plans Recommendations — if you are paying on-demand for workloads that have been running for more than six months, the recommendation will show you the immediate savings opportunity.
  3. Audit NAT gateway charges — filter Cost Explorer by VPC and look for NatGateway line items above $200/month.
  4. List S3 buckets without lifecycle policies using S3 Storage Lens. Start with the largest buckets.
  5. Tag everything from this point forward — even if existing resources are untagged, starting the discipline now prevents the problem from growing.

Running this review on your own account is achievable. The harder part is knowing which recommendations are safe to act on, which require architecture changes, and how to prioritize by dollar impact against implementation effort.


If you want a structured view of your AWS cost profile before making changes, our Cloud Cost Audit surfaces the specific line-item savings in your account—with dollar impact estimates and a prioritized remediation plan.

For ongoing cost governance, FinOps Management provides continuous monitoring, monthly reporting, and implementation support as infrastructure scales.

Ready to see where your AWS spend is going? Start with our FinOps Sprint—a two-week engagement that audits your current environment and delivers an actionable savings roadmap.


Running a specific cost pattern you want analyzed—unusual data transfer charges, RDS spend that doesn't match your instance count, S3 costs that don't match your expected data volume? Contact us and we will take a look.

Put this into practice

Get a free assessment of your current security and infrastructure posture, or check your email security in 30 seconds.

Tags:awscloud-costaws-cost-optimizationfinopscloud-cost-mistakesaws-cost-savings-smbinfrastructure

Get articles like this in your inbox

Practical security, infrastructure, and DevOps insights for teams in regulated industries. Published weekly.

Weekly digestUnsubscribe anytimeNo spam, ever

By subscribing, you agree to our Privacy Policy. Unsubscribe anytime.

Want to Discuss This Topic?

Schedule a call with our team to discuss how these concepts apply to your organization.

30 Minutes

Quick, focused conversation

Video or Phone

Your preferred format

No Sales Pitch

Honest, practical advice

Schedule Strategy Call
Get Free Assessment