Why Storage Choice Matters More Than You Think

Most founders focus on compute costs when optimizing cloud spend. But storage is the silent budget killer: it's always on, scales linearly with data growth, and teams often default to "premium" options "just to be safe."

The reality? Choosing the wrong disk type can cost you 5-10x more than necessary—without delivering any performance benefit to your users. I've seen startups pay $1,200 per month for database storage that could run perfectly on disks costing $240 per month. That's $11,520 per year wasted on over-engineering.

Let's fix that.

The Storage Decision Framework: 3 Questions Your Team Must Answer

Before selecting any disk type, answer these three questions:

  1. What's your IOPS requirement? (Input/Output Operations Per Second)
    Transactional databases need high IOPS (thousands+). Batch processing needs low IOPS.
  2. What's your throughput requirement? (MB/s of sequential data transfer)
    Video processing, log aggregation, and big data analytics need high throughput. Web servers need modest throughput.
  3. How frequently is data accessed?
    Hot data (daily access) versus warm (weekly) versus cold (monthly/yearly) dictates storage tier.

Pro tip: Measure first. Run iostat -x 1 on Linux or use CloudWatch/GCP Monitoring for 48 hours before making decisions. Guessing equals overpaying.

AWS Storage Deep Dive: EBS Volume Types Decoded

General Purpose SSD: gp3 (The New Default)

Pricing: $0.08 per GB-month (us-east-1)

Why it matters: gp3 decouples storage size from performance. Unlike gp2 (where IOPS scaled with volume size), gp3 gives you:

  • 3,000 baseline IOPS (free) regardless of volume size
  • 125 MB/s baseline throughput (free)
  • Scale IOPS independently ($0.005 per provisioned IOPS beyond 3,000)
  • Scale throughput independently ($0.04 per MB/s beyond 125)

Real-world example:
Your PostgreSQL database needs 4,000 IOPS but only 200GB storage.
- gp2 approach: Must provision 1,334GB to get 4,000 IOPS → $133.40 per month
- gp3 approach: Provision 200GB + 1,000 extra IOPS → $16 (storage) + $5 (IOPS) = $21 per month
→ 84% savings with identical performance

Action item: Migrate ALL gp2 volumes to gp3. It's non-disruptive (via Modify Volume) and saves 20% immediately—even before tuning performance.

Provisioned IOPS SSD: io2/io2 Block Express (For Mission-Critical Databases)

Pricing: $0.125 per GB-month + $0.065 per provisioned IOPS-month (Block Express)

When to use: Only when you need:
- Predictable sub-millisecond latency under heavy load
- More than 16,000 IOPS consistently
- 99.999% durability requirement (io2 offers this; gp3 offers 99.99%)

Pitfall alert: Most startups don't need io2. Unless you're running high-frequency trading or real-time ad auctions, gp3 with provisioned IOPS handles 95% of production workloads.

Throughput-Optimized HDD: st1 ($0.045 per GB-month)

Perfect for:
- Kafka/Zookeeper logs
- Hadoop/Spark scratch space
- Media processing buffers
- Log aggregation before shipping to S3

Performance: Up to 500 MB/s throughput, but only ~500 IOPS. Sequential workloads only—terrible for random access.

Cold HDD: sc1 ($0.015 per GB-month)

Perfect for:
- Archived database backups (older than 90 days)
- Compliance data with 12+ month retention
- Infrequently accessed analytics datasets

Warning: 256 IOPS max. Access latency can hit seconds—not for production workloads.

GCP Storage Deep Dive: Persistent Disk Types Decoded

Balanced Persistent Disk (pd-balanced) — The Sweet Spot

Pricing: Approximately $0.08 per GB-month (varies by region)

Why it matters: Google's answer to AWS gp3. Delivers 60% of SSD performance at 45% of SSD cost. Ideal for:
- General-purpose databases (PostgreSQL, MySQL)
- Application servers
- Development environments

Performance:
- 15 IOPS per GB (up to 15,000 IOPS max)
- 0.28 MB/s per GB throughput (up to 1,200 MB/s)

SSD Persistent Disk (pd-ssd)

Pricing: Approximately $0.17 per GB-month

When to use: Only when you need:
- Sub-1ms latency consistently
- High random I/O workloads (e.g., Redis, Cassandra)
- OLTP databases with more than 10,000 IOPS requirements

Pitfall: Most web applications run perfectly fine on pd-balanced. SSD is 2x more expensive for marginal gains in non-I/O-bound apps.

Standard Persistent Disk (pd-standard)

Pricing: Approximately $0.04 per GB-month

Perfect for:
- Boot disks for non-critical VMs
- Batch processing workloads
- Infrequently accessed data stores

Performance: HDD-backed. 0.75 IOPS per GB (max 15,000). Avoid for databases.

Hyperdisk (GCP's New Tiered Offering)

Google now offers Hyperdisk variants:
- Hyperdisk Balanced: Replaces pd-balanced with better price/performance
- Hyperdisk Throughput: Optimized for sequential workloads (like st1)
- Hyperdisk Extreme: For ultra-high IOPS workloads

Founder note: Hyperdisk pricing is complex (separate capacity/throughput billing). Only adopt after thorough benchmarking—most startups don't need it yet.

The Object Storage Trap: When NOT to Use S3/Cloud Storage

Founders often hear "use S3 for everything!" That's dangerously wrong.

Use object storage for:
- Static assets (images, CSS, JS)
- User uploads (profile pics, documents)
- Log archival (more than 30 days old)
- Backup repositories

NEVER use object storage for:
- Database storage (PostgreSQL/MySQL data directories)
- Application runtime state
- Anything requiring POSIX filesystem semantics
- High-frequency random reads/writes

Warning: S3 has eventual consistency, high latency (approximately 100ms), and charges per API call. A database performing 10,000 IOPS would generate $150+ per month in S3 request fees alone. Never place database transaction logs, temp files, or anything requiring POSIX semantics in object storage.

Real Cost Comparison: Production Database Scenario

Scenario: 500GB PostgreSQL database requiring 3,500 IOPS, moderate write load

Provider Disk Type Monthly Cost Notes
AWS gp2 (500GB) $50.00 Only 1,500 baseline IOPS—performance bottleneck
AWS gp3 (500GB + 500 IOPS) $42.50 3,500 IOPS provisioned, 250 MB/s throughput
AWS io2 (500GB + 3,500 IOPS) $185.00 Massive overkill for this workload
GCP pd-balanced (500GB) $40.00 Approximately 7,500 IOPS baseline—more than enough
GCP pd-ssd (500GB) $85.00 2x cost for marginal latency gains

Savings opportunity: Choosing gp3/pd-balanced over "premium" options saves $140+ per month—$1,680 per year—with zero user impact.

5 Actionable Optimization Strategies (Implement This Week)

1. The gp2 to gp3 Migration (AWS)

Run this AWS CLI command to convert without downtime:

aws ec2 modify-volume --volume-id vol-xxxxxx --volume-type gp3

Expected savings: 20% baseline + ability to right-size IOPS independently.

2. Implement Storage Tiering for Logs

- Hot tier (last 7 days): EBS gp3 / pd-balanced
- Warm tier (8-90 days): S3 Standard / GCS Standard
- Cold tier (91+ days): S3 Glacier Instant / GCS Nearline
- Archive tier (1+ year): S3 Glacier Deep Archive / GCS Archive ($0.00099 per GB-month)

Example: 10TB of logs
- All in gp3: $800 per month
- Tiered approach: $80 (hot) + $230 (warm) + $100 (cold) + $10 (archive) = $420 per month
→ 47% savings with automated lifecycle policies

3. Right-Size Boot Disks

Default AWS AMIs ship with 8GB gp2 boot volumes. Most apps need only 20-30GB.
- Reduce from 100GB to 30GB gp3: Save $5.60 per month per instance
- For 50 instances: $3,360 per year saved with zero risk

4. Use Instance Store for Ephemeral Workloads (AWS)

For stateless apps (web servers, CI runners), use instance store instead of EBS:
- Zero cost for storage
- Higher performance (physically attached NVMe)
- Caveat: Data lost on stop/terminate—only for truly ephemeral workloads

5. Schedule Non-Production Disks

Dev/staging databases don't need 24/7 uptime. Use AWS Instance Scheduler or GCP Start/Stop VM to:
- Shut down non-prod instances nights/weekends
- Save 65% on storage costs for those environments

The Founder's Checklist: Questions to Ask Your Tech Lead

  • Are we still using gp2 volumes anywhere? Why not migrate to gp3?
  • What's our actual measured IOPS/throughput for each critical workload?
  • Which datasets haven't been accessed in 90+ days? Can we move them to cold storage?
  • Are we using SSD disks for workloads that only need sequential throughput?
  • What's our backup retention policy? Are we keeping 13 months of backups when compliance requires 12?
  • Have we benchmarked pd-balanced versus pd-ssd for our GCP workloads?

The Bottom Line

Storage optimization isn't about finding the cheapest option—it's about matching performance to actual requirements. The biggest savings come from:

  1. Eliminating over-provisioning (gp2 to gp3 migration alone saves 20%)
  2. Tiering data by access patterns (hot/warm/cold/archival)
  3. Measuring before deciding (no more guessing IOPS needs)
  4. Automating lifecycle policies (move data to cheaper tiers automatically)

Start with one action this week: run aws ec2 describe-volumes --filters "Name=volume-type,Values=gp2" and migrate the top 3 largest gp2 volumes to gp3. You'll see savings on next month's bill—and build momentum for deeper optimization.

Your infrastructure shouldn't cost more than your growth. Choose wisely.