Co-written with Thomas Lorreyte, Head of Infrastructure at BeReal.
When to use this recipe
Use hourly granularity when your infrastructure spend is driven by discrete events rather than steady-state traffic. The pattern shows up in workloads such as:- Push notification fanouts, including BeReal’s Time to BeReal notifications, marketing pushes, and scheduled email blasts.
- Scheduled batch jobs, such as nightly ETL, billing runs, periodic reconciliation, and ML training.
- Live event spikes, including sports streams, drop sales, product launches, and regional rollouts.
- Cron-driven workloads where you can name the recurring event that creates elastic cost.
Why daily granularity falls short
Daily cost data is the default in many AWS, GCP, and Azure billing workflows. It works for steady workloads where today looks like yesterday. It breaks down when spend is concentrated into short windows. Common failure modes:- Multiple events land on the same day. Three batch jobs on Monday and one on Tuesday make day-over-day comparison hard to interpret.
- Events shift across time zones. Billing cutoffs are usually UTC or US Central, so a single calendar day can contain a different count of events depending on where they fired.
- Spikes are short relative to the day. A 90-minute compute burst averaged into 24 hours can disappear into the daily total.
Hourly granularity is part of the Copilot Plus tier. It is built for teams running bursty workloads where per-event cost matters. If your infrastructure is mostly steady-state, daily granularity in the base tier is usually enough.
The recipe
Name the event
Pick the discrete thing that drives your cost: a push notification, batch run, campaign send, or training job. Write down its rough duration and frequency.
Switch Cost Explorer to hourly
In , set granularity to hourly and filter to the services that scale with the event. This is usually compute, and sometimes egress or storage I/O.
Anchor the event in time
Ingest your scale-up triggers as events through the Events integration. Each spike is labeled and aligned with the cost curve, so the per-event window is clear.
Compute the per-event cost
Read the cost across the full event window: scale up, run, and scale down. Treat that window as one unit. Repeat across several events to calculate the mean and variance.
Worked example: BeReal
BeReal pushes four daily Time to BeReal notifications worldwide. Each one fires at a randomized time and opens a two-minute posting window. Infrastructure-wise, each notification is a clean, repeatable cost unit:- Clusters scale up ahead of each notification.
- They handle the load through the posting window.
- They scale back down within the hour.
- Variable count per day. The GCP billing cutoff is US Central. Depending on where notifications landed across time zones, a calendar day could contain three, four, or five notifications.
- No trustworthy per-notification number. The team had attempted a homemade hourly script, but the numbers were not solid enough to bring to product or finance.
- Per-notification cost. A Japan notification costs X. A US notification costs Y. The numbers stay stable regardless of which calendar day they land on.
- Optimization ROI in dollars. Code changes on scale-up logic are measured against the next notification, not a noisy daily average. Wins and regressions both show up quickly.
- One view across teams. Product scopes new features against the same numbers finance uses to review the bill.
- Defensible scaling decisions. When infrastructure spend grows, the per-notification number shows whether the team is becoming more efficient or less efficient.
Thomas Lorreyte, Head of Infrastructure at BeReal
“It was a drastic change from a product decision standpoint. We can now quantify, to the dollar, every optimization we ship on the moment infrastructure.”
Pair per-event cost with a business unit
Per-event cost answers what one event costs. Pairing it with a business unit, such as DAU, posts, impressions, processed records, or customers, turns it into for the workload. BeReal pairs per-notification cost with cost per DAU, split between:- Static cost: storage of historical photos and baseline workloads.
- Elastic cost: the part that scales with traffic.
- Engineering defends optimization work. Ship a scale-up change, measure the delta in dollars per DAU per notification, and report the result.
- Product scopes features against ROI. Price a new notification or cadence change against a credible cost-per-DAU-per-notification number, then weigh it against expected business lift.
Adapt it to your stack
Use these prompts to find the equivalent event in your infrastructure:- Name the discrete event that drives most of your elastic cost.
- Define the full window: scale up, run, and scale down. Anything under 24 hours can benefit from hourly granularity.
- Pick the outcome that maps to one event, such as a post, an impression, a processed record, or a customer. One business unit per event is the cleanest pairing for ROI.
- Identify who needs the number. Engineering uses it to defend work, product uses it to scope features, and finance uses it to review the bill.
Next steps
Explore hourly costs
Switch Cost Explorer to hourly granularity and inspect your spike shapes.
Ingest events
Overlay scale-up triggers and workload events on the cost timeline.
Define unit economics
Turn per-event cost into a per-user or per-outcome metric.
Correlate costs and events
Tie cost shifts back to the events that caused them.
FAQ
Does hourly granularity make billing data real time?
Does hourly granularity make billing data real time?
No. Hourly granularity changes the time bucket in the billing data. AWS, GCP, and Azure exports still arrive with a delay, and Costory processes the data after it is available. See Data Refresh for provider freshness details.
Do I need events to use this recipe?
Do I need events to use this recipe?
You can start with manual time windows, but events make the metric defensible. Once scale-up triggers are ingested, each spike is labeled on the cost curve and easier to compare over time.
What if my workload has multiple events in one day?
What if my workload has multiple events in one day?
That is the main reason to use hourly granularity. Instead of explaining one daily total, split the day into event windows and calculate cost per event.
