JB Back to Blog

Freelance Development & Cloud Costs

How One Bug Cost Me Over $7,000 on Google Cloud (And How You Can Avoid It)

Published on August 15, 2025 | Last Updated: August 18, 2025

A dramatic representation of a high cloud bill

Hello, mga kapwa dev!


Gusto kong i-share sa inyo ang isa sa mga pinakamalaki at pinakamasakit na pagkakamali na nagawa ko sa career ko bilang isang freelance developer. Ito yung kwento kung paano ako nagising isang araw na may bill na umaabot sa higit $7,000 (halos ?417,000) mula sa Google Cloud dahil sa isang bug na hindi ko namalayan.


Sana, sa pag-share ko nito, may matutunan kayo at hindi niyo maranasan ang kaba at stress na pinagdaanan ko.


Normal na araw, chineck ko yung billing ko sa Google Cloud para sa personal project kong "Kapilya Near Me". Pero eto ang tumambad sa akin:


Google Cloud billing report showing a massive cost spike on August 13th.
Yung makita mo ang cost spike sa isang araw. Dito nagsimula ang kaba ko.

Para akong binuhusan ng malamig na tubig. Biglang umakyat sa libo-libong dolyar ang bill sa loob lang ng isang araw. Halos lahat ng gastos, galing sa iisang service: Distance Matrix API.


Total cost breakdown showing almost all charges came from the Distance Matrix API.
Ang kabuuang pinsala. Halos lahat ng $5,866.69 ay galing lang sa iisang API.

Dito na nagsimula ang imbestigasyon ko. Ano'ng nangyari? Paano nangyari? At higit sa lahat, paano ko 'to babayaran?!


Matapos ang maraming pag-check sa logs at reports, naging malinaw kung saan talaga nanggaling ang problema. Hindi ito galing sa labas, tulad ng inaasahan, kundi isang bagay na mas simple at nakatago mismo sa code ng application:


The JavaScript code snippet that caused the issue.

Para sa mga hindi familiar, ang applyFiltersAndRender() function ko ay tumatawag sa getTravelTimes, which then calls the Google Distance Matrix API. Ginagamit ito para i-calculate kung gaano kalayo at katagal ang byahe mula sa user papunta sa mga kapilya.


Ang akala kong simpleng feature ay naging isang financial nightmare. Ang problema: sa bawat pag-click ng user sa filter or travel mode, tumatawag ito sa getTravelTimes para sa LAHAT ng locations sa listahan. Kung may 100 na Locals sa list, isang click lang ng user, 100 API calls agad 'yon! Isipin mo na lang kung paano 'to umabot ng 1.4 million requests sa isang araw. Isang classic case ng N+1 problem na hindi ko napansin.


Base sa masakit na experience na ito at sa tulong na rin ng Google Support, narito ang list ng mga mahahalagang aral na dapat tandaan ng bawat developer:


  1. MAG-SET NG BILLING ALERTS! (Budgets & Alerts)

    Ito ang pinaka-basic na dapat gawin. Sa Google Cloud, pwede kang mag-set ng "Budget" at kapag malapit nang ma-reach 'yon, mag-e-email sa'yo si Google. Kung may alert ako na naka-set sa $10, edi sana nalaman ko agad nung nagsisimula pa lang yung spike.

  2. GUMAMIT NG API QUOTAS! (API Quotas)

    Ito ang hard-stop. Ito yung "kill switch" mo. Pwede mong i-limit ang isang API sa certain number of requests per day. For example, pwede kong i-set na 1,000 requests per day lang ang limit ng Distance Matrix API ko. Kapag na-reach 'yon, mag-e-error na siya. Mas gugustuhin kong mag-error ang feature ko kaysa magkaroon ng ?417,000 na bill.

  3. INTINDIHIN ANG PRICING NG BAWAT SERVICE! (Understand the Pricing)

    Hindi sapat na alam mo lang gamitin ang isang service. Dapat alam mo rin kung paano ka sinisingil. Sa kaso ng Distance Matrix API, ang singil ay per "element" (isang origin-destination pair), hindi per request. Kailangan nating basahin ang documentation, lalo na ang pricing page.

  4. I-SECURE ANG API KEYS! (Secure Your API Keys)

    Isang pagkakamali ko ay ang paggamit ng iisang API key para sa local development (127.0.0.1) at production (kapilyanearme.com). Dapat, may restrictions ang bawat API key. I-restrict mo lang sa domain ng website mo, o sa IP address ng server mo.

  5. MAG-BATCH NG REQUESTS AT MAG-CODE REVIEW! (Batch Your Requests)

    Kung kailangan mong kumuha ng data para sa multiple items (tulad ng 100 na Locals), alamin mo kung pwede itong i-batch sa iisang API call. Sa kaso ko, dapat isang tawag lang sa API na naglalaman ng lahat ng destinations. At syempre, mahalaga ang code review. Kung solo developer ka na tulad ko, i-practice mong iwanan ang code mo saglit at balikan ito after a day or two. Magugulat ka sa mga potential issues o improvements na makikita mo with fresh eyes.

Update as of August 18, 2025


So, akala ko tapos na ang kwento doon. Hindi pa pala. Ang initial shock sa $5,866 na nakita ko sa cost report ay simula pa lang pala. Nang lumabas na ang official transaction details, nadagdagan pa ito ng VAT, na nagpataas sa total bill sa $7,133.38.


Official transaction list showing the final amount including VAT.

After my chat with Google Support last August 15, the next step was to wait. Pero ang hindi ko inasahan ay ang agarang epekto nito. As of today, my entire Google Cloud billing account is locked.


Ang resulta? Hindi lang ang "Kapilya Near Me" ang apektado. Lahat ng projects na nakakabit sa billing account na 'yon ay down din. Ito ang listahan ng mga nadamay:


  • Bacolodwebdev.com

  • joselitobacolod.com (Joselito's Finance Tracker)

  • Bahanearme.com (Baha Near Me)

  • somedaycapsule.com (Someday)

  • Kapilyanearme.com (Kapilya Near Me)

Pati na rin ang ilang projects ng mga dati kong client. Ito ang isang masakit na aral: ang pagkakaroon ng single point of failure. Dahil sa isang project, nadamay lahat.


Ang plano ko ngayon ay i-migrate lahat ng affected sites sa isang bagong billing account. It's a tedious process that will probably take me 3-4 days to complete. Sa ngayon, I'm still waiting for a concrete resolution from Google Support. Ang process ay mas mabagal kaysa sa inaasahan ko, at sa totoo lang, nakakadismaya na wala man lang silang proactive alert system para sa ganitong kalaking spike. This situation highlights that even with their vast resources, the responsibility for cost management ultimately falls on us, the users.


Masakit na pagkakamali, oo. Pero ito rin ang isa sa mga pinakamahalagang aral na nakuha ko. Bilang freelance developers, tayo ang CEO, CTO, at accountant ng sarili nating trabaho. Hindi sapat na magaling lang tayo mag-code; kailangan din nating maging responsable sa resources na ginagamit natin at magkaroon ng contingency plans.


Habang sinusulat ko 'to, on-going pa rin ang process. Hinihintay ko pa rin ang "goodwill credit adjustment" at ginagawa ang migration para maging live na ang mga website ko.


Sana may napulot kayo. Mag-set na kayo ng billing alerts at quotas ngayon na! At kung kaya, ihiwalay niyo ang billing ng inyong mga critical projects. Huwag niyo nang hintayin na may dumating na "surprise" sa inyo.


Happy coding, and be a responsible dev!