Skip to content

Declare what your workloads need

Tell leancosts which workloads do not need high availability, which do not need the recovery history you are paying to keep, and which licences you already own. Until you do, it never suggests removing the first two on a production resource, and it never claims a saving that depends on the third.

Three savings levers cannot be inferred. Dropping a standby replica or a zone-redundant configuration trades resilience for money; shortening a backup chain deletes recovery points the moment it is applied; and applying a licence you already own depends on an entitlement that lives in your licensing portal, which leancosts cannot read. None of these is something a product should decide for you from a tag or a usage curve, so leancosts asks you to declare them.

Turning savings appetite up to Aggressive will never produce these findings. Appetite is a confidence floor: how sure the product must be before it shows you a number. The declaration is a different statement, and it lives here.

Go to Admin → Cost model → Open Requirements, press ⌘K and type Requirements, or follow edit requirements from a resource drawer’s Sizing section. The page is organized by service kind: managed databases, virtual machines, App Service plans, Kubernetes and containers, storage, caches, search services messaging namespaces and Databricks subscriptions (Data platforms). Pick the tab you want to declare for.

AxisSet it toWhat it does
AvailabilitysingleRemoving zone or geo redundancy, standby replicas and HA replicas
Availabilityzone_redundantOnly the geo levers: cross-region replication, geo replicas, GRS storage
Availabilityzone_redundant or geo on Virtual machines or Kubernetes and containersWithholds every Spot recommendation (VMs, EC2, AKS, EKS and GKE node pools, ECS Fargate): Spot capacity can be evicted
Spotforbidden on Virtual machines or Kubernetes and containersWithholds every Spot recommendation for those workloads, whatever their availability. Use it to declare no high availability and no Spot together
DurabilityminimumCutting retention to the provider minimum: point-in-time restore, long-term retention, vault policies, snapshot chains
DurabilitynoneRemoving the backup entirely, where an isolated cost line exists for it

Leaving an axis alone makes no claim, which is the default for every organization. Declare Spot’s availability, or the Spot axis, on Virtual machines and on Kubernetes and containers only (the Spot axis is refused elsewhere): a zone_redundant declared on storage or databases also fires the geo levers there. The other axes on the page (latency, cost model, minimum memory and IOPS, stable outbound IP) constrain the sizing recommendations instead; they never unlock a redundancy or retention finding. The Defender plan axis has its own section below.

Four more axes, and they work the other way round: they do not remove anything from your estate, they release a saving you are already entitled to.

AxisTabWhat it unlocks
Windows Server licenceVirtual machinesAzure Hybrid Benefit on Windows VMs, BYOL on Windows EC2 instances
Linux subscriptionVirtual machinesAzure Hybrid Benefit on RedHat / SUSE VMs
SQL Server licenceManaged databasesAzure Hybrid Benefit on vCore SQL, BYOL on SQL Server RDS
Oracle licenceManaged databasesBYOL on Oracle RDS

Three values each: leave it unset, We own them, or We own none. There is no core count and no expiry: yes or no is the honest statement, and a count goes stale the day it is typed.

What each answer does:

  • We own them: the findings appear at confidence 75 with a Licence declared chip. Each still carries its limit: the claim assumes your entitlement covers every core listed.
  • We own none: they stay away, permanently, without you rejecting a single row by hand.
  • Unset: they are withheld, and the total they are worth is shown to you as a question on the Savings Register and the Hunters page: “N resources could cost about $X/mo less if you hold the licences. Do you?” Answering there is one tap and writes the same organization default this page writes. The question for that licence stops at once, even after a reload, and a line confirms the answer with a link back to this page; the held-back findings update within a few minutes. That question is only shown to someone who can edit requirements (governance.admin), since answering it is a write; everyone else simply does not see it.

One exception runs ahead of your answer: on AWS, if License Manager reports Windows entitlement headroom, that is a reading rather than a statement, so the finding claims at confidence 80 with a Licence verified chip whatever you declared.

2c. Declare a steady 12-month outlook for Databricks

Section titled “2c. Declare a steady 12-month outlook for Databricks”

The Data platforms tab has one control, Spend outlook, set per subscription (declare it for one account). Steady for 12 months lets the Databricks pre-purchase finding carry a dollar figure; Uncertain, or nothing, keeps it at $0 as a review item.

A pre-purchase plan cannot be cancelled or exchanged, and DBCU you do not use within the year are forfeited, so leancosts never infers this from the bill: you state it. Even then the figure appears only when your DBU bill is measured at list price, and it sizes the plan from your lowest recent month, not your peak. The plan covers Databricks units only, not VMs or storage.

The Extreme cuts preset below does not touch these four axes. A licence you do not own is not a cut you can choose.

2c. Declare which Defender plans you can do without

Section titled “2c. Declare which Defender plans you can do without”

One more axis, and it is a statement about a security control, so it is never inferred from a name or a tag.

AxisTabsWhat it unlocks
Defender planManaged databases, StorageA review-only finding for the Microsoft Defender plan on your SQL, PostgreSQL and MySQL servers and your storage accounts

Two values: required (the default, no claim) and optional. Declare it on the server itself, or on its account or tag class: a declaration written on a database never reaches its server, because Azure does not inherit tags.

Defender plans bill per subscription, so turning one off can remove protection from a resource you did not mean. The finding therefore appears only when every resource billing that plan family in the subscription is declared optional. If some are and some are not, leancosts says so and claims nothing until the rest are declared. The saving is the resource’s own Defender line on your bill, and the finding is review-only: leancosts never turns a security control off.

Four layers, each beating the one above it:

  1. Organization default: the fallback for every resource of that service kind.
  2. By account: one subscription, AWS account or GCP project. Use this when a whole sandbox or development account can lose its redundancy.
  3. Class: a tag pair such as environment = staging. When several classes match one resource, the most protective value wins.
  4. Per resource: set in the resource’s drawer, and it wins outright.

The Extreme cuts card at the top of the page writes availability: single and durability: none as the organization default for every service kind, in one transaction. The confirmation names the current default for each kind before it overwrites anything.

Read it as what it is: a statement that no workload in this organization needs redundancy or recovery history.

The card then shows where the declaration stands. If every service kind carries it, the card says so and offers Withdraw extreme cuts. If only some do, it names them and offers both directions. Withdrawing takes one click and no confirmation: it puts availability and durability back to whatever the system default says, leaves every other axis you had declared alone, and the cuts that rested on those two axes close on the next sweep as a withdrawn declaration rather than as a saving you realized.

To change one kind at a time, use the per-kind editors above. Clear org default beside Save org default removes that kind’s organization default outright, so every axis falls back to the system default.

After the next sweep, the findings appear with by policy in their name, and each one says which declaration it rests on and where that declaration came from. A resource that already has a measured finding (a rightsizing or a tier change) shows that one first; the declared cut is withheld until the measured finding is resolved, so the two savings figures are never added together.

The backup and retention findings are review-only: no change kit, no one-click apply. Applying them deletes recovery points, so leancosts states the finding and stops.

Both operations exist as MCP tools:

  • list_requirements: every active declaration, with the cascade order.
  • set_requirements: write 1 to 100 rows in one transaction, including the four licence axes as closed enums. Requires governance.admin, and every write is recorded in the audit log.

list_opportunities and list_hunter_findings both return pendingLicenseDeclaration, so an agent can ask what one answer would unlock:

What is leancosts holding back pending a licence declaration,
and which licence would release the most?

See use with an agent and Licensing optimization.