The first shock is usually not the launch cost — it is month three when staging environments, oversized databases, and untagged resources pile up. Cloud providers are happy to sell you more capacity. Nobody will call you and suggest you spend less. That job is yours.
Start with visibility. Turn on billing alerts at 50%, 80%, and 100% of your budget. Tag every resource by team, project, and environment (prod, staging, dev). If you cannot see who spun up a $400-a-month machine, you cannot fix it. Most consoles have cost breakdown views — check them weekly, not quarterly.
Right-size your servers. A common pattern: pick a large instance at launch "to be safe" and never look again. Metrics show most VMs use a fraction of their CPU and RAM. Scale down, use autoscaling, or switch to burstable instance types for low-traffic apps. Schedule dev and test environments to shut off nights and weekends if nobody is working.
Storage adds up silently. Old snapshots, duplicate backups, and logs nobody reads still charge every month. Set lifecycle rules to move old files to cheaper tiers or delete them after 90 days. Compress what you can. One terabyte of junk costs the same as one terabyte of gold until you clean it out.
Reserved capacity and committed use discounts reward planning. If you know you will run the same database for a year, prepaying or committing saves 30–60% on some providers. Do not commit on day one — wait until usage is stable. Spot and preemptible instances cut compute costs for jobs that can survive interruption, like batch processing and CI builds.
Culture beats tools. Review costs in sprint planning the same way you review bugs. Delete resources when projects end. Question every always-on service. The goal is not penny-pinching on production — it is cutting waste so you can spend on things users actually feel, like faster pages and better reliability.