§ Lesson 04 / Reading the Specification

Reading the spec like a practitioner.

The spec evolves. The keywords matter. The audiences differ. This lesson covers spec versioning (1.0 to 1.3), how to tell normative text from context, and the anatomy of a column entry.

4.1 — Spec overview & versioning

The FinOps Open Cost and Usage Specification (FOCUS) is an open technical specification for technology-related billing data. It defines clear requirements that vendors follow to produce uniform cost and usage datasets and provides a common vocabulary for describing consumption-based billing models.

The specification is shaped by real-world feedback. Each version reflects what practitioners struggled with, where definitions needed clarity, and which new capabilities solve real problems.

Version history

VersionDateHighlights
FOCUS 1.0June 2024First production release. Baseline metrics and dimensions for common FinOps use cases. Focused on Cloud Service Provider billing models.
FOCUS 1.1Capacity reservations, commitment discounts, service subcategories, SKU details, improved metadata for ETL pipelines.
FOCUS 1.2Cloud+ era — Cloud, SaaS, and PaaS under one schema. Adds Invoice ID, billing-account dimensions, virtual/national currency. New adopters: Alibaba Cloud, Databricks, Grafana.
FOCUS 1.3Allocation transparency, dataset for tracking contract terms, recency/completeness signals, Service vs. Host Provider distinction, first column deprecations.

This course uses v1.2 as the working example, but always refer to the version your provider actually publishes (check provider versions).

4.2 — Three audiences for the spec

4.3 — Three kinds of text

Normative text

Normative text defines the rules a data generator must follow to produce a conformant dataset. Normative keywords appear in ALL CAPITALS:

Interpreted per BCP 14 (RFC 2119 / RFC 8174). A lowercase “should” is not normative.

Non-normative text

Sections marked “This section is non-normative” don’t define rules — they give context that helps you understand why the rules exist.

Supporting content (the part everyone misses)

The FOCUS GitHub repository ships an open Supporting Content directory alongside the spec itself. It’s where the working group records the reasoning behind a rule, worked examples, edge-case clarifications, and the discussions that led to a particular wording. The spec tells you what is required; supporting content tells you why — which is what you need when a teammate or auditor asks “but what does this mean?”

Practical habit: when the spec text confuses you on a column, search the matching markdown file in supporting_content/. It usually answers your question with a worked example.

4.4 — Anatomy of a column entry

When you look at a column definition in the spec, you’ll see three labelled parts:

The Requirements Analyzer

The FOCUS specification includes over 600 requirements. The Requirements Analyzer makes them searchable. Filter by function type (composite, format, nullability, presence) or by keyword (MUST, SHOULD, MAY). Trace any failed validator rule back to the specific requirement.

Knowledge check

Q. Looking up a column in the FOCUS spec, you see three labelled blocks: a Title & Non-Normative Description, a Normative Text section, and a Breakout of Column Details. A vendor implementing FOCUS asks “which of those three is the only place I’m held to conformance?” What do you tell them?

Normative Text. Only normative text imposes conformance requirements on a data generator — and only when it uses the BCP 14 keywords (MUST, MUST NOT, SHALL, SHOULD, MAY, etc.) in ALL CAPS. The Title/Description gives plain-English context, and the Breakout of Column Details explains how to read the requirement. Both are aids, not rules. A validator failure should always trace back to a specific line of normative text.