Skip to main content

AWS Cost Architecture: How System Design Decisions Become Your Cloud Bill

How architectural decisions - data transfer patterns, service boundaries, caching strategy - directly translate into AWS costs. A practical guide for architects who own the bill.

2026-03-2017 min readTech Architect

The Architecture-Cost Connection

Most engineers think about cost as an operational concern - something the finance team worries about after the system is built. This is backwards.

The decisions that drive the largest cloud costs are made during system design: how services communicate, where data lives, how often it moves, and what gets cached. By the time the bill arrives, the architecture is already set.

The Most Expensive Architectural Mistakes

1. Cross-AZ data transfer in hot paths

AWS charges for data transfer between Availability Zones. A microservice architecture where services in different AZs call each other on every request can generate significant data transfer costs that are invisible during design.

Mitigation: Co-locate services that communicate frequently. Use AZ-aware load balancing.

2. NAT Gateway for internal traffic

Traffic from private subnets to AWS services (S3, DynamoDB, SQS) routes through NAT Gateway by default - at $0.045/GB. For high-throughput systems, this is a significant cost.

Mitigation: Use VPC endpoints for AWS services accessed from private subnets.

3. Synchronous fan-out to downstream services

A single API request that triggers synchronous calls to five downstream services multiplies your compute and data transfer costs by five. Under load, this compounds.

Mitigation: Async event-driven patterns where latency allows. Cache aggressively at the aggregation layer.

4. Storing everything in RDS when DynamoDB fits

RDS costs are dominated by instance size, not usage. A multi-AZ RDS instance runs 24/7 regardless of load. For access patterns that fit DynamoDB's model, the cost difference at scale is an order of magnitude.

Cost as an Architectural Fitness Function

Add cost to your architectural fitness functions:

# cost-fitness.yml
thresholds:
  monthly_compute: $2000
  monthly_data_transfer: $500
  monthly_storage: $300
alerts:
  - metric: aws.billing.estimated_charges
    threshold: 80%
    action: notify_architect

When cost is a first-class architectural concern, it gets the same rigour as latency and availability.

Back to Writing