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.
Why this page exists
Section titled “Why this page exists”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.
1. Open Requirements
Section titled “1. Open Requirements”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.
2. Set the two axes that unlock findings
Section titled “2. Set the two axes that unlock findings”| Axis | Set it to | What it does |
|---|---|---|
| Availability | single | Removing zone or geo redundancy, standby replicas and HA replicas |
| Availability | zone_redundant | Only the geo levers: cross-region replication, geo replicas, GRS storage |
| Availability | zone_redundant or geo on Virtual machines or Kubernetes and containers | Withholds every Spot recommendation (VMs, EC2, AKS, EKS and GKE node pools, ECS Fargate): Spot capacity can be evicted |
| Spot | forbidden on Virtual machines or Kubernetes and containers | Withholds every Spot recommendation for those workloads, whatever their availability. Use it to declare no high availability and no Spot together |
| Durability | minimum | Cutting retention to the provider minimum: point-in-time restore, long-term retention, vault policies, snapshot chains |
| Durability | none | Removing 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.
2b. Declare the licences you own
Section titled “2b. Declare the licences you own”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.
| Axis | Tab | What it unlocks |
|---|---|---|
| Windows Server licence | Virtual machines | Azure Hybrid Benefit on Windows VMs, BYOL on Windows EC2 instances |
| Linux subscription | Virtual machines | Azure Hybrid Benefit on RedHat / SUSE VMs |
| SQL Server licence | Managed databases | Azure Hybrid Benefit on vCore SQL, BYOL on SQL Server RDS |
| Oracle licence | Managed databases | BYOL 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.
| Axis | Tabs | What it unlocks |
|---|---|---|
| Defender plan | Managed databases, Storage | A 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.
3. Choose the layer you mean
Section titled “3. Choose the layer you mean”Four layers, each beating the one above it:
- Organization default: the fallback for every resource of that service kind.
- By account: one subscription, AWS account or GCP project. Use this when a whole sandbox or development account can lose its redundancy.
- Class: a tag pair such as
environment = staging. When several classes match one resource, the most protective value wins. - Per resource: set in the resource’s drawer, and it wins outright.
4. Or declare it everywhere at once
Section titled “4. Or declare it everywhere at once”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.
5. What you will see next
Section titled “5. What you will see next”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.
Doing it from an agent
Section titled “Doing it from an agent”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. Requiresgovernance.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.