notebook № 145 plates · 14 min to read, longer to play ·
A name on every dollar
On names, tags and fair shares
part 3 of 7 in What the cloud costs · by Slavik Shynkarenko
A bill nobody owns is a bill nobody fixes. Allocation is the unglamorous work of putting a team’s name on every line: tags, accounts, rules for the costs everyone shares, and a decision about whether the result is a report or a charge. This notebook lets you try each piece and see where the arguments start.
plate I · tags and accounts
The unlabelled pile
Every resource on a cloud bill has to belong to someone. Clouds give you two ways to say who. The hierarchy: accounts on AWS, subscriptions and resource groups on Azure, projects on Google Cloud. And tags (labels on Google Cloud): key-value pairs like team=search stuck on each resource.
The hierarchy is the stronger of the two, because a resource can’t exist outside an account, while a tag can be forgotten. Give each team its own accounts and most of the bill allocates itself. Tags then do the finer work: product, environment, cost centre, and everything in the accounts teams share.
What’s left after both is the pile. Rules at ingestion time can clear part of it, mapping names like search-* to a team. The honest measure is coverage by cost, not by count: ninety percent of resources tagged can still leave half the money unexplained, if the untagged ones are the big databases.
Switch the measure from “count” to “cost” with tags only. Then add the account structure.
plate II · governance
Tags that stay put
Tagging campaigns all follow the same curve. Someone sends a spreadsheet of untagged resources, coverage jumps, and six months later it has drifted back, because new resources keep arriving without tags. Coverage is a flow problem, not a cleanup problem.
The fixes that last move the tag to the moment a resource is born. A tag policy rejects deployments without the required tags (AWS tag policies and service control policies, Azure Policy, organisation policies on Google Cloud). Infrastructure as code sets default tags once per module. Inheritance copies a team’s tags from its account or resource group to everything inside.
None of this is a FinOps team’s job alone. It’s a platform decision: the paved road should make the tagged path the easy one, and the reports should point at the few teams still off it.
Run the monthly report alone, then add the deploy gate. Which one is still climbing after a year?
plate IV · containers
Inside the cluster
A Kubernetes cluster is a shared cost with its own internal economy. The bill shows machines. The teams run pods on them. Tools like OpenCost and Kubecost close the gap by pricing each pod’s slice of the nodes it runs on.
Which slice is the question. A pod requests CPU and memory, which the scheduler reserves whether it’s used or not, and then uses some amount of it. Charging by usage rewards teams that over-request: they reserve the capacity and someone else pays for the idle part. Charging by requests, or by whichever is higher, makes the reservation itself the cost, and that’s what moves teams to rightsize.
Then there’s the capacity nobody requested: spare nodes, headroom, fragmentation. Spread it across teams and they’ll never see it. Leave it with the platform team and idle becomes a number someone owns, and usually shrinks. GPU clusters serving models raise the same question with higher stakes, which notebook 18 picks up.
Allocate by usage and look at the data team. Then switch to requests and keep idle with the platform.
plate V · showback and chargeback
A report or a charge
Allocation produces a number per team. What happens next is a choice. Showback sends it to the team as information: here’s what you spent, here’s how it changed. Chargeback books it against the team’s budget, so the money really moves between cost centres.
Chargeback gets attention fast, because a budget line is harder to ignore than a dashboard. It also turns every allocation error into a dispute. A team charged for costs it can’t trace will spend its energy arguing, not optimising.
So the order matters. Showback first, while coverage climbs and the shared rules settle. Chargeback once allocation is high and stable enough that the unexplained part is smaller than anyone’s rounding error. Plenty of mature organisations never switch at all: a trusted showback, read every week, does most of the job.
Set allocation to 70% and switch to chargeback. Then raise it to 95%.
Questions people ask
- What is a good tag coverage for cloud cost allocation?
Measure coverage by cost, not by resource count, because a few large resources matter more than many small ones. The FinOps Foundation’s maturity examples put allocation at around 70% for a practice starting out, 85% for a developing one and 90% or more for a mature one. The rest is usually shared or untaggable cost handled by split rules.
- How do you allocate shared cloud costs?
Pick a rule per shared cost and publish it. Common choices are an even split, a split proportional to each team’s direct spend, a split by a usage driver such as CPU requested or requests served, or keeping the cost central. Usage drivers are the fairest but need data. Proportional splits are simple and good enough for support fees and taxes.
- What is the difference between showback and chargeback?
Showback reports each team’s allocated cost without moving money: it informs and builds accountability. Chargeback books the cost against the team’s budget, so it changes behaviour faster but needs accurate, trusted allocation, or every invoice turns into a dispute. Most organisations start with showback and move to chargeback once allocation is high and stable.
Related material
elsewhere in the notebooks
further reading
- Allocation FinOps Foundation The Framework capability this notebook follows, with its maturity measures.
- Invoicing & Chargeback FinOps Foundation How allocated cost turns into showback reports and internal charges.
- Best Practices for Tagging AWS Resources AWS whitepaper Tag strategy, enforcement with tag policies and cost allocation tags.
- OpenCost CNCF project The open-source standard for allocating Kubernetes cost to namespaces and workloads, behind plate IV.