Outcome
By the end of this lesson, you will be able to pick the right outcome type for a watch policy, predict how each one is priced, and explain why an un-priceable finding is demoted to advisory rather than shipped at $0.
| Tier | Engineer |
| JTBD | ”Make my own policy produce a savings number I can defend, or none at all.” |
| Personas | Platform Engineer · FinOps Lead |
| Prerequisites | M2.14.L2 · M2.1.L4 (pricing) |
| Time | 9 minutes |
| Bloom verb | Pick (Evaluate), Predict (Apply), Explain (Understand) |
1. Concept
The outcome you declare is not a label. It decides how the finding is priced, and therefore whether it can carry a dollar figure at all.
The governing principle is the one from M2.1: concrete or abstain. A watch policy is held to exactly the same standard as a built-in rule, and it uses the same pricing helpers rather than a parallel implementation.
The four outcomes and their pricing
terminate (delete) savings = the WHOLE monthly bill, optimized cost 0 demoted to advisory on a STATEFUL resource, because deleting a database or a replica is destructive
stop / idle / schedule (recurring off-hours) savings = cost x the MEASURED off-hours fraction (RecoverableFraction, falling back to the idle percentage) NOT a fabricated constant. The same basis every built-in schedule rule uses. demoted to advisory $0 when there is no measured schedule data, and likewise on a stateful resource
rightsize savings = a concrete one-tier-down SKU, priced through the SAME strict delta helper v1's rightsizing rule uses demoted to advisory $0 when the target is un-priceable or the resource is already smallest
custom Your own label. Carries no automatic pricing.The uptime fold
Before any of that runs, monthlyCost is uptime-folded, using the same adjustment the built-in path applies before its rules run.
WHY A resource that runs 8 hours a day should not be priced as though it ran 24/7. Calculated-source costs are rescaled to real running hours first.
THE CONSERVATIVE DEFAULT Unknown uptime leaves the 24/7 figure intact. That over-states the cost base rather than under-stating it, which is the safe direction: a savings figure derived from it is conservative in the customer's favour only if you read it as a ceiling.There is a known follow-up here worth being aware of: the custom recommendation table is v1-shaped and does not yet carry uptime_pct / uptime_source columns, so the fold is applied but not stamped for later audit. If you are reconciling a watch finding’s number months later, that provenance is not there yet.
Why advisory rather than $0
A cost-driven finding that cannot be priced is demoted to advisory, never shipped with a $0 savings figure.
THE RULE, ACROSS BOTH ENGINES Never ship a cost-driven recommendation carrying $0 cost and $0 savings.
WHY IT MATTERS HERE A $0 cost-driven finding gets dropped by the low-savings suppressor anyway, so shipping one means the finding silently vanishes. Demoting to advisory keeps it visible, correctly labelled as carrying no recoverable dollar figure.This is the same reasoning that puts genuine posture findings in non-cost-driven categories (M2.1). The category and the outcome both have to be honest about whether money is involved, or the finding disappears.
The stateful demotion
Two of the four outcomes demote on stateful resources:
terminate on a stateful resource -> advisoryscheduled stop on a stateful -> advisory
STATEFUL means the same thing as in the Safety Gate:a managed data-service type, a non-empty engine spec, ora data tier. Never a name token.Your policy can still target databases. What it cannot do is claim a confident savings figure for deleting or stopping one, because the platform will not automate that action and the number would imply an action nobody should take unattended.
Category and severity are yours
CATEGORY your own label. A known v1 category, or free text up to 50 characters (the column width). Independent of the action-derived headline.
SEVERITY author-declared.This is more freedom than built-in rules get, and it comes with the obvious responsibility: a category you invent will not participate in any of the category-driven behaviour you met in M2.1, including the low-savings exemption that orphan carries.
2. Demo
The same policy, three outcome choices, three very different results:
THE FINDING scope type = rds, resource_group = analytics signal max db_connections eq 0 over 30 days matches 4 RDS instances, ~$890/mo combined
CHOICE A: outcome = terminate Intended: "these are unused, delete them" ACTUAL RESULT: all 4 demoted to ADVISORY $0. RDS is stateful. The policy will not claim a savings figure for deleting a database, and it is right not to. The findings still surface; they just carry no number.
CHOICE B: outcome = schedule Intended: "stop them outside business hours" ACTUAL RESULT: all 4 demoted to ADVISORY $0, twice over. 1. stateful resource 2. no measured schedule data, because these have never been scheduled, so there is no RecoverableFraction to price against Two independent reasons for the same demotion.
CHOICE C: outcome = rightsize Intended: "they are oversized for zero connections" ACTUAL RESULT: 3 findings priced concretely, 1 advisory. 3 had a one-tier-down SKU available, priced through the strict delta helper: $310/mo combined 1 was ALREADY the smallest instance class in its family, so there is no target to price -> advisory
WHAT THE TEAM LEARNED Their intent was "delete these". The platform's honest answer is that it will surface them but will not put a number on deleting a database.
So they used CHOICE C to get a defensible number for the sizing waste, and handled the deletions as a manual project with the advisory findings as the worklist.
Total defensible: $310/mo, plus 4 advisory findings that led to ~$890/mo of manual deletions. Reported as: $310/mo. The rest went in as a project outcome, not as a platform-attributed saving.That last line is the discipline. The $890 was real money, and it was not a number the platform claimed.
3. Hands-on (6 min)
1. For your policy, which outcome did you pick? [ ] terminate [ ] stop/idle/schedule [ ] rightsize [ ] custom
2. Are any resources in scope STATEFUL? Y / N (managed data-service type, engine spec, data tier) If Y and your outcome is terminate or schedule, expect advisory $0. Is that acceptable? Y / N
3. If you picked schedule: do the resources in scope have measured schedule data today? Y / N If N, every finding will be advisory $0 until they do.
4. If you picked rightsize: is any resource in scope already the smallest in its family? Y / N Those will abstain.
5. Run it. Count the split: priced concretely ______ advisory $0 ______ If everything came back advisory, your outcome type and your scope disagree. Which will you change? ______________________________________________4. Knowledge check
Q1
A watch policy with outcome terminate targets RDS instances. The findings will:
A. Carry the full monthly bill as savings
B. Carry half the monthly bill
C. Be demoted to advisory $0
D. Be rejected at save time
Show answer
Correct: C. terminate prices at the whole monthly bill on a normal resource, but demotes on a stateful one, because deleting a database is destructive and a confident savings figure would imply an action nobody should take unattended. Stateful means the same thing as in the Safety Gate: a managed data-service type, a non-empty engine spec, or a data tier, and never a name token. The findings still surface as a worklist; they simply carry no platform-attributed number.
Q2
Why is an un-priceable cost-driven watch finding demoted to advisory rather than shipped with $0 savings?
A. Advisory findings are easier to dismiss
B. Because $0 findings break the organisation’s savings rollup entirely, so the totals stop reconciling against the bill
C. Because advisory findings skip the $5 floor
D. Because a $0 cost-driven finding gets dropped by the low-savings suppressor, so shipping one means the finding silently vanishes
Show answer
Correct: D. Demoting to advisory keeps it visible and correctly labelled as carrying no recoverable dollar figure. This mirrors why genuine posture findings are filed in non-cost-driven categories in M2.1. Both the category and the outcome have to be honest about whether money is involved, or the finding disappears entirely.
Q3
A schedule outcome is priced from:
A. A standard off-hours assumption of 128 of 168 hours
B. The difference between its current SKU and the one tier down SKU rate itself
C. The measured off-hours fraction for that resource, falling back to its idle percentage
D. The resource’s uptime over the policy window
Show answer
Correct: C. It is the same concrete-or-abstain basis every built-in schedule rule uses, and with no measured schedule data the finding is demoted to advisory $0 rather than given a fabricated constant. The refusal to fabricate a constant is the point: a plausible-looking default would make every schedule finding carry a number, and none of those numbers would be defensible.
5. Apply
Pick the outcome that matches what can actually be measured, not what you wish were true. If everything comes back advisory, the mismatch is usually between a terminate intent and a stateful scope, and the productive move is to price the sizing waste concretely and run the deletions as a separate project.
Report the platform-attributed number and the project outcome separately. Merging them is how savings figures stop being defensible.
Related lessons
- L2: The signal vocabulary
- L4: Evaluation and its limits (next)
- T2.M2.1.L4: Pricing: TierRates vs SKURates
- T2.M2.3.L7: The Recommendation Safety Gate
Glossary terms touched
Concrete-or-abstain · RecoverableFraction · Uptime fold · Advisory demotion