# S3 — Startup-Specific Guidance ## Why S3 Rarely Needs Startup-Specific Advice S3 is the one AWS service where the standard best practices apply at every scale. It costs nearly nothing at startup volumes, has no fixed monthly fee, and scales infinitely. There's no "startup vs enterprise" decision to make. **However, there are a few traps and decisions that disproportionately affect startups:** ## Startup Cost Traps 1. **Data transfer egress is the hidden S3 cost**: Storage is cheap ($0.023/GB-month for Standard). But serving files directly from S3 to the internet costs $0.09/GB. A startup serving 1TB/month of user-uploaded images pays $90/month in transfer. Put CloudFront in front ($0.085/GB, lower at volume + caching reduces origin requests dramatically). Break-even is almost immediate. 2. **Incomplete multipart uploads**: Abandoned multipart uploads are invisible but accumulate storage costs. A startup doing video uploads that fail mid-upload can accumulate GBs of orphaned parts. **Always add a lifecycle rule: abort incomplete multipart uploads after 7 days.** This should be on every bucket from day one. 3. **Intelligent-Tiering monitoring fee**: $0.0025 per 1,000 objects/month. Negligible for most startups, but if you store millions of tiny objects (log lines, events), the monitoring fee can exceed the storage savings. Use Standard for high-frequency small objects; Intelligent-Tiering for larger objects with unknown access patterns. 4. **Cross-region replication "for safety"**: Replication doubles your storage cost AND charges for PUT requests + data transfer. At pre-Series A, single-region S3 with versioning enabled is sufficient. S3 has 99.999999999% durability within a single region. You don't need replication until you have compliance requirements or need cross-region latency. 5. **Versioning without lifecycle rules**: Versioning keeps every version of every object. Without noncurrent version expiration, storage grows unbounded. Rule: expire noncurrent versions after 30 days for non-compliance buckets. ## Stage-Specific Decisions ### Pre-PMF - **Storage class: Standard.** Don't overthink it. At <100GB, the cost difference between storage classes is dollars. - Enable versioning on any bucket with user data (protection against accidental deletes) - Add lifecycle rule: abort incomplete multipart uploads after 7 days - Serve user-facing assets through CloudFront from day one (performance + cost savings) ### Post-PMF (100GB-10TB) - Switch to **Intelligent-Tiering** for data with unpredictable access (uploaded content, processed files) - Add **noncurrent version expiration** (30 days for most, 90 for important data) - Use **S3 Express One Zone** only if you need single-digit-ms latency for hot data access from EC2 (rare for most startups) ### Scale (>10TB) - Lifecycle transitions: Standard → Standard-IA after 30 days → Glacier after 90 days for archival data - S3 Storage Lens for visibility into what's costing you money - Consider S3 Access Points if multiple teams/apps share buckets ## Counterintuitive Startup Advice - **Don't use S3 presigned URLs for your MVP auth.** It's tempting to generate presigned URLs and skip building a file serving layer. But presigned URLs can't be revoked, have fixed expiry, and leak through browser history/logs. Use CloudFront with signed cookies/URLs backed by your auth system for user-facing content. Presigned URLs are fine for temporary upload targets. - **One bucket per concern, not one bucket per entity.** Startups either create too many buckets (one per user? one per feature?) or too few (one bucket for everything). Right-size: `uploads`, `processed-media`, `backups`, `logs` — 3-5 buckets for most early-stage products. - **S3 event notifications → Lambda is fine for your scale.** Don't build a Kinesis pipeline for image processing at 100 uploads/day. S3 → Lambda → process and write back. Graduate to Step Functions or EventBridge when you need retry logic or multi-step workflows. ## Credits-Specific Guidance - S3 storage and request costs are covered by credits. During credits: don't optimize storage classes — use Standard everywhere for simplicity. - **Watch out**: S3 data transfer OUT is the cost most likely to spike unexpectedly during the credits period (video streaming, large file downloads). This is covered by credits but burns them faster than expected. - When credits expire: the first S3 bill is usually a non-event (<$50) for most startups unless you're serving large files directly to users. The surprise comes from data transfer, not storage.