GCP Cost Optimisation
The client opened the email at 7am Monday. Google Cloud invoice. Four times the bill from eighteen months ago. The CFO wanted answers. The CTO wanted to keep building. Neither could explain where the money had gone. We started where any forensic accountant would: assume nothing, inventory everything. The first pass surfaced an orphaned Cloud Storage bucket from a 2024 migration. The second pass found a Compute Engine VM that nobody remembered provisioning. The third pass discovered a BigQuery slot reservation oversized by 6x for a use case that had ended a year prior. By the fifth pass the case was closed.
The five-pass method
- 01
Inventory every active resource
Every Cloud Run service, Compute Engine VM, Cloud Storage bucket, BigQuery dataset, Pub/Sub topic. Nothing assumed. Output: the full estate as a CSV.
- 02
Tag prod vs dev vs orphaned
Every resource gets a status: production, development, orphaned (no owner can be found, no traffic in 90 days, no recent deploy). The orphan column is usually the largest.
- 03
Rightsize the keepers
Cloud Run with min-instances accidentally pinned to 5. BigQuery slot reservations from a use case that ended a year ago. Compute Engine VMs on n2-standard-16 running 2% utilisation.
- 04
Kill the orphans (with audit log)
Every delete logged. Every owner pinged. 30-day grace window for anything ambiguous. Then close the door.
- 05
Install cost-watch alerting
Slack ping at +10% week-over-week. Budget alerts at 50, 75, 90% of monthly cap. Quarterly reaudit on the calendar.
Result. Material monthly GCP spend reduction in a single audit cycle. Cost-watch alerting installed so the next 10% drift produces a Slack ping, not a Monday-morning shock. The methodology, productised, is now part of the Sandbox playbook for every operator running on Google Cloud who has lost track of the bill.
Methodology productised. Single-pass audit fits in 1-2 weeks per environment.