Skip to main content

Methodology

How every number is computed

The marketing pages state consequences; this page names the mechanisms. Denser on purpose — it is written for the engineer who checks.

Anomaly detection

One cloud change produces one useful alert — not five duplicate notifications.

Daily movements are flagged per service against a robust z-score threshold, and across account, region, usage type and tag with real multiple-testing correction: Benjamini–Hochberg false-discovery-rate control across that whole family of tests, with hierarchical dedup on top so a single change does not arrive as five separate alerts. Slices the scan skips for a known reason — too little history, too sparse, too small to matter, over the cap, degenerate, or rejected by the false-discovery test — are counted in the diagnostics it returns instead of being passed over in silence.

Reconciliation against the bill

Our totals are graded against the provider's own billing data — the Cost and Usage Report and Cost Explorer — and say so when they cannot be; none is called invoice-grade until it is matched to the invoice.

The reconciliation against the raw bill is summed in integer micros — any stored row still missing its integer copy is counted as a float fallback — and the comparison with Cost Explorer allows half a cent of floating-point noise. On our own estate, on the June 2026 bill, the derived total landed within about 1% of the Cost and Usage Report, window-aligned. The production CUR import ran again on 27 September 2026. September’s CUR, through the 26th, agrees with Cost Explorer to the cent; August’s is $17.07 short and under investigation, so the June 2026 check remains the last clean one. On yours the same check gives a result once your Cost and Usage Report is connected and imported. When it cannot verify, it names why — raw tier partial, missing raw source, provider export pending, restatement detected — instead of showing a tick.

The Kubernetes cost basis

On the Kubernetes overview, every cluster's dollars name the evidence rung they stand on; the allocation export marks each row priced, partly priced or unpriced.

Five rungs, weakest to strongest: usage-only, estimated price card, OpenCost import, bill-backed node, bill-backed pod. A cluster with nothing priced reports usage-only, not a $0 that looks like an answer — and where node capacity is known, idle is its own line, not spread across your teams; without it, idle is shown as unmeasured and the node bill is shared over the workloads that ran. On AWS, pod-grain dollars come straight from split cost allocation data in your Cost and Usage Report.

The price book

Rate math is dated and honest about staleness; the AI price book is versioned as well.

AI pricing runs on a versioned price book that counts its own stale rows rather than presenting every rate as freshly verified; GPU rates come from your bill or the rate your telemetry declares, and GPU list prices from the dated cloud catalog, which grades each row fresh, aging or stale. Shared GPU pools split on an evidence ladder that names its basis per row: the GPU-hours each consumer held at each GPU's own rate (billed pools split per GPU model first; gaps in a GPU's telemetry are not counted as held time), then MIG geometry, then token share, then an even split — and an even split is always a human's explicit choice.

Projected vs bill-measured savings

An estimate is never called a result.

Savings stay projected until the provider bill supports the change. The word verified is reachable through exactly one code path, and only when the bill isolated the resource that changed — with no other CloudJaeger change merged on the same resource inside the measured window; a change made outside CloudJaeger in that window is not separated out. Anything less is graded unattributable: it reports what moved and declines to name a dollar it cannot attribute.

The FOCUS export

The way out is stated precisely.

The Cost and Usage dataset exports in the FinOps Foundation's FOCUS 1.4 schema, up to 180 days per export, as export compatibility, not a conformance certification: we have not been through that process, three of its datasets (Invoice Detail, Billing Period and Contract Commitment) are deliberately not emitted, and a test fails if the claim ever widens. CSV and JSON exports sit beside it.

Where the LLM sits

A model writes optional prose; it never decides.

Scoring, ranking, detection and reconciliation are deterministic. A large language model writes plain-English recommendation explanations when you opt in, and answers list-price questions sent to the pricing API. No result depends on a model: explanations are opt-in and fall back to the engine's own text when a call fails, the pricing API is the only other caller, and no raw billing line items are sent to one.

The exact read-only IAM policy is on /connect-security, with the rest of the security material on /security and transport on /trust; the OAuth profile and token handling for API and MCP clients are on /developers. What each module can prove today is on /evidence.