LinkedIn Carousel: FOCUS 1.2 Billing Standard
Post type: Technical · 10 slides
Blog post: https://www.nuvikatech.com/blog/posts/focus-1-2-billing-standard
SLIDE 1 — Cover
Headline: “How much did we spend on compute last month?” sounds simple. Try answering it across AWS, Azure, and GCP at the same time.
Sub-line: Why we standardised all Fintropy billing records on FOCUS 1.2 — and what it actually cost to get there.
SLIDE 2
Label: THE PROBLEM
Headline: Three clouds. Three schemas. Three completely different names for the same concept.
Body:
AWS: lineItem/UsageType. Azure: MeterCategory. GCP: service.description. One query that answers “how much did we spend on compute?” across all three requires either deeply provider-specific logic — or a normalisation layer.
SLIDE 3
Label: THE STANDARD
Headline: FOCUS 1.2: the FinOps open standard that gives them all the same column name.
Body:
Maintained by the FinOps Foundation. 37 standardised columns. Every major cloud provider’s billing export maps to the same schema. ServiceName, ResourceId, BilledCost, ChargePeriodStart — consistent across all three.
SLIDE 4
Label: HOW WE STORE IT
Headline: Every billing record from any provider goes through a FOCUS 1.2 transform before hitting the database.
Body:
One table: focus_billing_records. AWS CUR, Azure Usage, GCP Billing Export — all transformed to the same 37 columns. Query the table, get consistent data. No provider-specific handling needed downstream.
SLIDE 5
Label: WHAT IT UNLOCKED: ANOMALY DETECTION
Headline: One z-score algorithm covers EC2, Azure VMs, and Compute Engine simultaneously.
Body: With FOCUS normalisation, all three get treated as “compute spend” in the same query. One algorithm, one code path, all three providers. Before FOCUS: three separate anomaly detection implementations.
SLIDE 6
Label: WHAT IT UNLOCKED: SLA CREDITS
Headline: The same SQL query calculates credit values for AWS, Azure, and GCP breaches.
Body:
SELECT SUM(billed_cost) FROM focus_billing_records WHERE service_name ILIKE :service. No provider-specific code in the credit calculation. One query, correct for all three.
SLIDE 7
Label: WHAT IT UNLOCKED: BUDGETS
Headline: A budget for “compute” aggregates EC2, Azure VMs, and Compute Engine automatically.
Body: Without FOCUS, customers would need to know provider-specific service names to set up cross-cloud budgets. With FOCUS, they just say “compute”. The normalisation handles the rest.
SLIDE 8
Label: THE BEFORE STATE
Headline: Before FOCUS: every cross-cloud analysis was 3x the code, 3x the tests, 3x the bugs.
Body: Three billing tables. Every analysis required a UNION of three queries with manual field mapping. Every billing feature took three times as long to build and was three times as likely to have a provider-specific edge case.
SLIDE 9
Label: THE TRADEOFF
Headline: 6 weeks of migration. Some concepts don’t map cleanly. Keep raw metadata in JSONB.
Body: The migration was real work. AWS Reserved Instance billing has no clean FOCUS equivalent yet. We store provider-specific metadata in a JSONB column alongside the standard fields — nothing is lost.
SLIDE 10 — CTA
Headline: Want the full story?
Body: The full FOCUS 1.2 implementation: the column mapping, the transform pipeline, what it unlocked for anomaly detection and credit calculation, and the honest migration cost.
Link: nuvikatech.com/blog/posts/focus-1-2-billing-standard