Free tiers can become expensive surprises if you don't understand the cost traps. This guide documents the most common billing pitfalls and proven strategies to avoid them.
The Hidden Bandwidth Tax
Many services charge for data leaving their network, even when inbound data and storage are free.
Common Examples:
- AWS: $0.09/GB outbound data transfer after free tier
- GCP: $0.12/GB egress for most services
- Azure: $0.087/GB outbound bandwidth
- Cloudflare R2: $0.015/GB for data retrieval
- CDN First: Route all user traffic through free CDNs (Cloudflare, Bunny.net)
- Edge Computing: Process data at the edge to reduce egress
- Compression: Enable gzip/brotli compression
- Caching: Implement aggressive caching to reduce origin requests
- Regional Deployment: Deploy applications in users' regions
- Track data transfer metrics
- Set alerts at 80% of free tier limits
- Use CDN analytics for bandwidth monitoring
Data transfer between regions within the same provider incurs charges.
Examples:
- AWS inter-region transfer: $0.02/GB
- GCP cross-region egress: $0.12/GB
- Azure inter-region bandwidth: $0.035/GB
- Design single-region architectures
- Use global services (Cloudflare, AWS CloudFront)
- Implement data locality principles
- Use multi-provider architectures
Using one "free" service automatically incurs costs in related services.
Examples:
- AWS EC2 + EBS: Storage costs $0.10/GB-month after free tier
- GCP Compute Engine + Persistent Disk: $0.040/GB-month
- Azure VM + Managed Disks: $0.119/GB-month
- Storage Optimization: Use object storage (S3, Cloud Storage) instead of block storage
- Ephemeral Instances: Design for stateless applications
- External Storage: Use free storage services from other providers
- Container Optimization: Minimize image sizes and dependencies
API gateways and load balancers add costs even when backend services are free.
Examples:
- AWS API Gateway: $3.50/million requests after free tier
- GCP Cloud Load Balancing: $0.025/hour per forwarding rule
- Azure Application Gateway: $0.022/hour
- Direct Service Calls: Expose services directly when possible
- CDN Integration: Use CDN functions for simple API routing
- Service Mesh: Implement free service mesh solutions
- Custom Load Balancing: Application-level load balancing
Some free tiers require account age or additional verification.
Examples:
- AWS advanced services require 12+ months account age
- GCP some services need billing account verification
- Azure some free tiers require credit card verification
- Account Planning: Create accounts early for time-gated services
- Verification Timing: Complete all verifications upfront
- Alternative Services: Use services without age restrictions
- Multi-Account Strategy: Use different accounts for different service types
Detailed monitoring and logging can incur costs even when the service is free.
Examples:
- AWS CloudWatch: $0.30/GB ingested after free tier
- GCP Cloud Logging: $0.50/GB after 50GB free
- Azure Monitor: $2.30/GB ingested
- Basic Monitoring Only: Use free monitoring tiers
- Log Aggregation: Centralize logs with free tools
- Sampling: Implement log sampling for high-volume applications
- Retention Policies: Shorten log retention periods
Auto-scaling can rapidly consume free tier limits and incur charges.
Examples:
- Lambda cold starts during traffic spikes
- Auto-scaled EC2 instances during peak hours
- Database read replicas during high query volume
- Manual Scaling: Control scaling manually during development
- Scaling Limits: Set hard limits on auto-scaling
- Caching Layers: Implement caching to reduce backend load
- Queueing: Use queues to smooth traffic spikes
Over-sizing instances "just in case" wastes free tier allocations.
Examples:
- Running large EC2 instances when small ones suffice
- Over-provisioned databases with unused capacity
- Excessive storage allocation
- Right-Sizing: Start small and scale up only when needed
- Load Testing: Test actual usage patterns
- Resource Monitoring: Monitor actual vs allocated resources
- Dynamic Scaling: Scale down during low-usage periods
Database connections and complex queries can incur costs.
Examples:
- AWS RDS: $0.20/hour per database connection beyond limits
- GCP Cloud SQL: Connection costs vary by instance type
- Azure Database: DTU-based pricing for connections
- Connection Pooling: Use connection pools to limit concurrent connections
- Query Optimization: Optimize queries and add appropriate indexes
- Caching: Implement application-level caching
- Read Replicas: Use read replicas for read-heavy workloads
Database storage and automated backups add costs.
Examples:
- AWS RDS backup storage: $0.095/GB-month
- GCP Cloud SQL backups: $0.08/GB-month
- Azure backups: Varies by storage type
- Minimal Backups: Reduce backup frequency for non-production
- External Backups: Use free storage for manual backups
- Storage Optimization: Compress and archive old data
- Backup Policies: Implement intelligent backup retention
Security services often have separate pricing from compute services.
Examples:
- AWS WAF: $5/month + $0.60/million requests
- GCP Cloud Armor: $1/month + $0.60/million requests
- Azure WAF: $5/month + $0.60/million requests
- Application Security: Implement security at application layer
- CDN Security: Use CDN security features when available
- Open Source Tools: Self-hosted security tools
- Basic Security: Start with fundamental security practices
Custom domains require DNS and SSL certificate services.
Examples:
- AWS Route 53: $0.50/month per hosted zone
- GCP Cloud DNS: $0.20/month per hosted zone
- Azure DNS: $0.10/month per hosted zone
- Free DNS: Use free DNS services (Cloudflare, Njalla)
- CDN Domains: Leverage CDN-provided domains during development
- Self-Signed Certificates: For internal/development use
- Certificate Authorities: Use free ACME certificates
Time-limited trials convert to paid services automatically.
Examples:
- AWS EC2: Converts to paid after 750 hours
- GCP Compute Engine: Charges after $300 credit expires
- Azure VMs: Bills after 30-day trial
- Calendar Reminders: Set reminders before trial expiration
- Usage Monitoring: Track usage against trial limits
- Migration Planning: Plan migration before trial ends
- Gradual Transition: Test paid services during trial period
Some services charge for inactive accounts or resources.
Examples:
- AWS dormant accounts may incur costs for retained resources
- GCP projects with resources continue billing
- Azure subscriptions with active resources bill continuously
- Resource Cleanup: Regularly audit and remove unused resources
- Account Monitoring: Monitor all accounts for unexpected charges
- Budget Alerts: Set up billing alerts for all accounts
- Resource Tagging: Tag resources for easy identification and cleanup
- Problem: Free EC2 hours don't include EBS storage
- Avoidance: Use instance store or external storage
- Problem: Using RDS with EC2 incurs separate charges
- Avoidance: Use DynamoDB or external databases
- Problem: Complex data transfer pricing between services
- Avoidance: Minimize cross-service communication
- Problem: High egress costs for data leaving GCP
- Avoidance: Use Cloud CDN and edge caching
- Problem: Service accounts can incur costs
- Avoidance: Minimize service account usage
- Problem: All resources in a project share billing
- Avoidance: Use separate projects for different workloads
- Problem: Resources in resource groups can interact unexpectedly
- Avoidance: Plan resource group architecture carefully
- Problem: Some services have complex hybrid pricing
- Avoidance: Stick to straightforward consumption models
- AWS Cost Explorer and Budgets
- GCP Billing reports and budgets
- Azure Cost Management
- CloudHealth, Cloudability for multi-provider monitoring
- Free tools like AWS Cost Allocation Tags
- Set alerts at 50%, 80%, and 100% of budget
- Configure alerts for unexpected spending
- Set up alerts for specific service costs
- Monitor usage against free tier limits
- Alert on approaching limits
- Track usage patterns over time
- Review all billing statements
- Audit resource usage
- Identify optimization opportunities
- Review cost optimization strategies
- Plan for upcoming service changes
- Evaluate new cost-saving opportunities
- Identify the source of unexpected charges
- Stop or modify the offending resource
- Contact provider support if needed
- Implement cost controls and alerts
- Review and update cost management practices
- Document lessons learned
- Review architecture for cost optimization
- Evaluate alternative services
- Implement cost-saving measures
- Use cost optimization tools
- Implement automated cost controls
- Monitor cost trends over time
Cost avoidance isn't about being cheap—it's about being smart. Understanding these traps prevents "free" services from becoming expensive mistakes.