Let me share a number that should make every startup founder uncomfortable:
27% of cloud spend is wasted.
That's not my opinion. That's Flexera's 2025 State of the Cloud Report. And it's actually improved from previous years (it was 32% in 2022).
If your startup spends $10K/month on AWS, around $2,700 is probably going to resources you don't need.
The problem? Most FinOps advice assumes you have:
- A dedicated FinOps team
- Enterprise tools with $45K+ annual contracts
- Time to build dashboards and review reports
Startups have none of that. You have a Slack channel where someone occasionally posts "why is our AWS bill so high?" and everyone shrugs.
Let me show you how to do FinOps without the overhead.
What is FinOps (In Startup Terms)
FinOps is just "don't waste money on cloud." That's it.
The fancy definition involves "cloud financial management" and "cross-functional collaboration." But for a 10-person startup, it means:
- Know what you're spending
- Understand why
- Fix the obvious waste
- Don't let it creep back
No team required. No enterprise tools. Just discipline.
The 80/20 of Cloud Waste
After analyzing dozens of AWS accounts, I've found that 80% of waste comes from 5 sources:
1. Zombie Resources (30% of waste)
Resources that were created and forgotten:
- EC2 instances from that "quick test" 6 months ago
- Load balancers pointing to nothing
- EBS volumes from terminated instances
- Unattached Elastic IPs ($3.60/month each - sounds small until you have 20)
Quick fix:
# Find unattached EBS volumes
aws ec2 describe-volumes \
--filters Name=status,Values=available \
--query 'Volumes[*].[VolumeId,Size,CreateTime]' \
--output table
2. Oversized Instances (25% of waste)
That m5.xlarge "because we might need it" running at 8% CPU.
This is the most common waste in startups. Someone provisions a big instance "to be safe," and no one ever checks if it's actually needed.
Quick fix:
# Check CPU utilization (last 7 days)
aws cloudwatch get-metric-statistics \
--namespace AWS/EC2 \
--metric-name CPUUtilization \
--dimensions Name=InstanceId,Value=i-YOUR_INSTANCE_ID \
--start-time $(date -d '7 days ago' -u +%Y-%m-%dT%H:%M:%SZ) \
--end-time $(date -u +%Y-%m-%dT%H:%M:%SZ) \
--period 3600 \
--statistics Average
If average CPU is under 20%, you're probably oversized.
3. Logs Growing Forever (20% of waste)
CloudWatch Logs have no default retention. Your logs from 2022 are still there, and you're still paying for them.
I've heard of companies paying $40K+/month just for log storage.
Quick fix:
# Find log groups without retention
aws logs describe-log-groups \
--query 'logGroups[?retentionInDays==`null`].[logGroupName,storedBytes]' \
--output table
Set retention to 14 or 30 days for most logs. You probably don't need 3-year-old debug logs.
4. Wrong Storage Classes (15% of waste)
Data that's accessed once a year sitting in S3 Standard instead of Glacier.
Or worse: gp2 EBS volumes instead of gp3 (gp3 is 20% cheaper with better performance).
Quick fix:
# Find gp2 volumes (should be gp3)
aws ec2 describe-volumes \
--filters Name=volume-type,Values=gp2 \
--query 'Volumes[*].[VolumeId,Size,VolumeType]' \
--output table
5. Idle RDS Instances (10% of waste)
Development databases running 24/7 when they're only used during work hours.
Quick fix: Aurora Serverless v2 for dev/staging, or at minimum, stop instances outside work hours.
The 15-Minute Weekly Audit
You don't need a FinOps platform. You need 15 minutes every Monday.
Week 1: Check the Bill
Go to AWS Cost Explorer. Look at:
- Top 5 services by cost
- Any spikes vs last month
- Cost by tag (if you're tagging... you are tagging, right?)
Week 2: Hunt Zombies
Run the commands above. Delete what you don't need.
Week 3: Check Utilization
Look at your biggest EC2 instances and RDS databases. Are they actually busy?
Week 4: Review Reservations
Are you running anything consistently 24/7 for 6+ months? Consider Reserved Instances or Savings Plans.
Rotate through these. Takes 15 minutes if you're focused.
Automation That Actually Helps
Some things should be automated from day one:
1. Budget Alerts
aws budgets create-budget \
--account-id YOUR_ACCOUNT_ID \
--budget '{
"BudgetName": "Monthly-Limit",
"BudgetLimit": {"Amount": "1000", "Unit": "USD"},
"TimeUnit": "MONTHLY",
"BudgetType": "COST"
}' \
--notifications-with-subscribers '[{
"Notification": {
"NotificationType": "ACTUAL",
"ComparisonOperator": "GREATER_THAN",
"Threshold": 80
},
"Subscribers": [{
"SubscriptionType": "EMAIL",
"Address": "your@email.com"
}]
}]'
Get alerted at 80% of budget. Not at 150%.
2. Auto-Stop Dev Environments
Use AWS Instance Scheduler or a simple Lambda:
import boto3
def lambda_handler(event, context):
ec2 = boto3.client('ec2')
# Stop instances tagged with AutoStop=true
instances = ec2.describe_instances(
Filters=[
{'Name': 'tag:AutoStop', 'Values': ['true']},
{'Name': 'instance-state-name', 'Values': ['running']}
]
)
for reservation in instances['Reservations']:
for instance in reservation['Instances']:
ec2.stop_instances(InstanceIds=[instance['InstanceId']])
Run it at 8pm, start instances at 8am. Save 50%+ on dev instances.
3. Lifecycle Policies
Always set these on S3 buckets:
{
"Rules": [{
"ID": "TransitionToIA",
"Status": "Enabled",
"Transitions": [{
"Days": 30,
"StorageClass": "STANDARD_IA"
}],
"Expiration": {
"Days": 365
}
}]
}
Data older than 30 days moves to cheaper storage. Data older than a year gets deleted.
When to Use Tools
DIY works until ~$20K/month. After that, the time spent manually auditing exceeds the cost of tools.
But here's my advice: don't buy dashboards, buy action.
Most FinOps tools tell you what's wrong. Few tell you how to fix it. Even fewer give you the actual code to implement fixes.
That's why we built CloudPruneAI - scan your AWS, get deployable CDK code, not a 50-page PDF.
The Mindset Shift
FinOps isn't a one-time cleanup. It's a habit.
Every time you create a resource, ask:
- Does this need to run 24/7?
- What's the right size?
- When should this be deleted?
- Is it tagged so we know who owns it?
Build this into your engineering culture, and you'll never need a dedicated FinOps team.
Key Takeaways
- 27% of cloud spend is waste - yours is probably similar
- 80% of waste is 5 things: zombies, oversizing, logs, storage class, idle DBs
- 15 minutes/week is enough for most startups
- Automate the basics: budgets, auto-stop, lifecycle policies
- Tools should give you action, not just dashboards
Quick Reference
| Problem | Quick Command |
|---|---|
| Unattached EBS | aws ec2 describe-volumes --filters Name=status,Values=available |
| Unattached EIPs | aws ec2 describe-addresses --query 'Addresses[?AssociationId==null]' |
| No log retention | aws logs describe-log-groups --query 'logGroups[?retentionInDays==null]' |
| gp2 volumes | aws ec2 describe-volumes --filters Name=volume-type,Values=gp2 |
| Stopped instances | aws ec2 describe-instances --filters Name=instance-state-name,Values=stopped |
What's your biggest cloud cost pain point? Let me know in the comments - I might cover it in a future post.
Top comments (0)