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