SUMMARY · OCTOBER 2026
Northwind Care
October 2026
Basis: amortized Azure cost, USD, all subscriptions in scope.
01 / Recommendations
Each finding was investigated by an AI agent, reviewed by an independent AI critic and signed off by an engineer. Each saving range is proposed by the AI and checked by code against recorded cost.
Checks to do first
A check decides whether a saving is real. It saves nothing on its own and is not in the total.
| ID | Check | At stake / month | Confidence | What decides it |
|---|---|---|---|---|
| R-11 | Compute savings plan across vmss-ingest-prod and aks-care-prodOnly 7 months of history for aks-care-prod; a node pool change is planned | $11,732 | Medium confidence | Re-check after the planned node pool change |
| R-12 | Remove st-legacy-exports once an owner confirmsNo owner found; no reads in 90 days | $690 | Low confidence | Name an owner, then decide |
Savings
| ID | Recommendation | Saving / month | Risk | Critic | Status |
|---|---|---|---|---|---|
| R-01 | Reserve 1-year capacity for sql-claims-prod and sql-providers-prod12 months of stable vCore usage; 80% of cost is compute; 1-year reserved price | $2,540 to $3,180 | Low risk | Passed | Awaiting your approval |
| R-02 | Delete three unattached managed disksUnattached since July; snapshots kept for 30 days before deletion | $330 to $410 | Low risk | Passed | Quick win · Approved |
| R-03 | Stop aks-care-staging node pools nights and weekendsNo requests 20:00 to 07:00 or at weekends in 8 weeks; 103 of 168 weekly hours idle | $1,720 to $2,150 | Low risk | Passed | Quick win · Awaiting your approval |
| R-04 | Move container stdout logs to the Basic logs plan38% of ingestion is ContainerLogV2, queried only for incident search | $880 to $1,100 | Low risk | Passed | Awaiting your approval |
| R-05 | Apply Azure Hybrid Benefit to the warehouse SQL licenceSaving depends on SQL Server licences with Software Assurance being available | $1,970 to $3,280 | Low risk | Passed with a prerequisite | Needs your information |
| R-06 | Lower asp-claims-prod autoscale minimum from 4 to 2 outside 07:00 to 20:00P95 memory 61% at 2 instances off-peak; keep 3 during the 01:00 batch window | $980 to $1,230 | Medium risk | Passed with a condition | Awaiting your approval |
| R-07 | Downsize asp-claims-prod from P2v3 to P1v3Average CPU is low, but peak working set is 11.4 GiB, above the 8 GiB of P1v3 | None | High risk | Rejected | Rejected by critic |
| R-08 | Tier st-datalake-prod blobs older than 90 days to Cool71% of data untouched for 90+ days; read pattern checked for 6 months | $830 to $1,040 | Low risk | Passed | Approved |
| R-09 | Move redis-care-staging from Premium P1 to Standard C3Staging only; peak memory 2.1 GB; no clustering or persistence used | $640 to $800 | Low risk | Passed | Quick win · Awaiting your approval |
| R-10 | Auto-shutdown vm-ingest-dev-01 19:00 to 07:00 and weekendsDev VM; no logons or jobs outside working hours in 6 weeks | $580 to $720 | Low risk | Passed | Quick win · Approved |
| Total | Code total of savings, overlaps counted once | $10,470 to $13,910 |
R-07 rejected by the critic. Average CPU suggested a smaller plan, but peak memory does not fit. Low averages are not a reason to resize.
02 / Cost by product
The workbook calls each product a project: the product or application a resource serves.
| Month | Claims | Care | Member | Data Platform | Unassigned | Total |
|---|---|---|---|---|---|---|
| May 2026 | $28,422 | $23,054 | $10,519 | $24,587 | $1,267 | $87,849 |
| Jun 2026 | $29,110 | $23,300 | $10,714 | $24,664 | $1,236 | $89,024 |
| Jul 2026 | $29,260 | $23,990 | $10,714 | $25,199 | $1,227 | $90,390 |
| Aug 2026 | $29,410 | $24,236 | $10,714 | $25,276 | $1,196 | $90,832 |
| Sep 2026 | $29,918 | $24,630 | $10,844 | $25,506 | $1,173 | $92,071 |
| Oct 2026 | $29,948 | $24,843 | $11,004 | $25,945 | $1,170 | $92,910 |
Product totals include allocated shared cost. Total = products + unassigned = the Azure bill in scope. October 2026 vs September 2026: $92,910 vs $92,071.
03 / Shared cost allocation
Direct resource cost is assigned first. Shared services are split by a documented rule, and the rule travels with the number.
| Shared resource | Rule | Product | Share | Allocated |
|---|---|---|---|---|
| afd-public | Request share | Claims | 46% | $1,435 |
| afd-public | Request share | Member | 38% | $1,186 |
| afd-public | Request share | Care | 16% | $499 |
| agw-internal-prod | Request share | Care | 55% | $1,012 |
| agw-internal-prod | Request share | Data Platform | 45% | $828 |
| log-platform-prod | Ingested GB | Claims | 30% | $1,578 |
| log-platform-prod | Ingested GB | Care | 34% | $1,788 |
| log-platform-prod | Ingested GB | Member | 12% | $631 |
| log-platform-prod | Ingested GB | Data Platform | 24% | $1,262 |
| vnet-hub-weu | Even split (convention) | Claims | 25% | $345 |
| vnet-hub-weu | Even split (convention) | Care | 25% | $345 |
| vnet-hub-weu | Even split (convention) | Member | 25% | $345 |
| vnet-hub-weu | Even split (convention) | Data Platform | 25% | $345 |
| agw-nonprod | Request share | Care | 60% | $588 |
| agw-nonprod | Request share | Member | 40% | $392 |
04 / Project mapping
The mapping agent proposes product, component and environment for each resource, with a confidence level and evidence. 12 of 22 are confirmed by an owner; the rest wait for owner review. Unsupported mappings stay unassigned.
| Resource | Product › component | Env | Confidence | Status |
|---|---|---|---|---|
| asp-claims-prodTag app=claims; deployed by the claims-portal pipeline; App Insights dependency to ca-claims-api-prod | Claims › Claims Portal | prod | High confidence | Confirmed by owner |
| asp-claims-stagingSlot swap history with asp-claims-prod; same pipeline | Claims › Claims Portal | staging | High confidence | Confirmed by owner |
| appi-claims-prodConnection string used by the Claims Portal app | Claims › Claims Portal | prod | High confidence | Confirmed by owner |
| ca-claims-api-prodObserved calls from Claims Portal (App Insights); same release pipeline | Claims › Claims API | prod | High confidence | Proposed |
| sql-claims-prodOnly consumer is ca-claims-api-prod (observed connections); tag product=claims | Claims › Claims API | prod | High confidence | Confirmed by owner |
| redis-claims-prodOnly client is ca-claims-api-prod (observed connections) | Claims › Claims API | prod | Medium confidence | Proposed |
| func-census-workerName similarity; managed identity writes to st-claims-docs | Claims › Census Worker | prod | Low confidence | Needs review |
| st-claims-docsBlob container written by Claims API and Census Worker; tag cost-center=410 | Claims › Census Worker | prod | High confidence | Confirmed by owner |
| aks-care-prodHelm release labels app=care; namespaces scheduler and notify | Care › Scheduler | prod | High confidence | Confirmed by owner |
| sql-providers-prodObserved dependency from scheduler pods | Care › Provider Directory | prod | High confidence | Confirmed by owner |
| func-notify-prodIdentity access to the Care key vault only; no observed traffic yet | Care › Notifications | prod | Low confidence | Needs review |
| aks-care-stagingSame Helm charts as prod; namespace care-stg | Care › Scheduler | staging | High confidence | Confirmed by owner |
| redis-care-stagingOnly client is aks-care-staging | Care › Scheduler | staging | Medium confidence | Proposed |
| asp-member-prodTag app=member; custom domain member.northwind.example | Member › Member Portal | prod | High confidence | Confirmed by owner |
| redis-member-prodOnly client is the Member Portal app | Member › Member Portal | prod | High confidence | Proposed |
| ca-identity-prodToken calls observed from Claims and Member portals; deployed with Member | Member › Identity | prod | Medium confidence | Proposed |
| asp-member-devName pattern and dev pipeline stage | Member › Member Portal | dev | Medium confidence | Proposed |
| vmss-ingest-prodImage gallery ingest-*; tag workload=ingest | Data Platform › Ingestion | prod | High confidence | Confirmed by owner |
| vm-sqldw-prod-01SQL IaaS extension; tag workload=warehouse | Data Platform › Warehouse | prod | High confidence | Confirmed by owner |
| vm-reporting-01Scheduled job connects to vm-sqldw-prod-01 | Data Platform › Reporting | prod | Medium confidence | Proposed |
| st-datalake-prodWritten by vmss-ingest-prod; read by the warehouse | Data Platform › Ingestion | prod | High confidence | Confirmed by owner |
| vm-ingest-dev-01Name pattern; runs around the clock at 3% average CPU | Data Platform › Ingestion | dev | Medium confidence | Needs review |
05 / Evidence gaps
Missing data stays missing. Each gap names what it blocks and how to close it.
| Gap | Affects | How to close it | Who |
|---|---|---|---|
| Owner not confirmed for func-census-worker | Project mapping (low confidence) | Claims owner confirms or corrects in the console | Your team |
| Owner unknown for st-legacy-exports | R-12, unassigned cost | Name an owner or approve removal | Your team |
| Software Assurance coverage for SQL licences | R-05 | Share licence entitlement summary | Your licensing contact |
| Short usage history for aks-care-prod (7 months) | R-11 | Re-check after the planned node pool change | DynamoNet |
| Per-instance memory not collected for asp-member-prod | Rightsizing check for Member Portal | Enable the memory metric in App Insights | Your team |
| Egress per product not measured on the hub | Hub network allocation | Enable NSG flow logs on the hub, or keep the even split | Your team |