Outcome
By the end of this lesson, you will be able to distribute shared-resource costs equitably across consuming teams, identify when equal split is wrong and what to change when it is, and drive the Unattributed bucket toward zero.
| Prerequisites | M4.5.L1: Pick the dimension |
| Time | 10 minutes |
1. Concept
When one team owns a resource, there is nothing to work out. The team assignment says whose it is.
The difficulty is everything shared: the load balancer, the database, the Kubernetes cluster, the monitoring, all serving several teams at once.
ZopNight splits those equally, between however many teams the resource is assigned to. Where an equal split would obviously be unfair, the fix is to change the assignments (or the ownership model), not the split.
SHARED RESOURCE: prod-shared-rds-1 Used by team-platform (60% of queries) Used by team-product (40% of queries) Cost: $1,200/month
WHAT ZOPNIGHT DOES: Equal split (50/50): each team gets $600WHAT YOU CAN CHANGE (the assignments, not the split): Owner-pays: assign it to one team; it picks up all $1,200 Shared-services team: assign it to a dedicated team that owns it Outside ZopNight: finance settles a 60/40 split by journal entryEqual split via shareCount
This is the rule. A resource assigned to more than one team (directly, or through a resource group a team owns) gets its cost split equally:
RESOURCE: prod-shared-rds-1ASSIGNED TO: platform, productSHARE COMPUTATION: shareCount = number of teams it is assigned to = 2 per-team share = total cost / shareCount = $1,200 / 2 = $600
ALLOCATION RESULT: platform: $600 product: $600 Combined: $1,200 (matches the resource cost: no over- or under-attribution)Equal split is the rule, and a sound one, for three reasons. Simplicity: no usage data required, no manual configuration. Predictability: teams know what to expect; the share does not change month-to-month based on traffic. Avoids gaming: a usage-based split can incentivize teams to “off-load” by reducing their measured usage (e.g., caching aggressively to make their share smaller while still benefiting from the resource).
When equal split is wrong
Equal split fails when usage is highly skewed:
SCENARIO 1: Team A uses 90%, team B uses 10% Equal split: each pays 50%. Team B is overcharged by 40 percentage points. Team A is undercharged by 40 percentage points. FIX: owner-pays. Remove team B's assignment so team A carries the resource, and settle any credit to B outside ZopNight.
SCENARIO 2: Team gets temporary access for a migration Equal split: charged ongoing despite the temporary nature. FIX: remove the team assignment when the migration ends.
SCENARIO 3: Team is allocated capacity but doesn't use it Equal split: charged regardless. FIX: re-evaluate whether the team should be assigned to the shared resource at all; if not, unassign it.The signal that equal split is wrong is usually complaint volume. Teams that feel overcharged surface it; teams that feel undercharged stay quiet. If you hear repeated complaints from one team, look at usage skew.
One rule, so change the assignments
ZopNight has one attribution rule: equal split across the teams a resource is assigned to. There is no usage-based or tag-driven split, and no tag changes the share. When usage is skewed, you change who the resource is assigned to:
RESOURCE: prod-eks-cluster-1, $1,200/monthUSAGE (from your own telemetry): platform 60%, product 30%, data 10%
OPTION 1: owner-pays Assign to platform only platform $1,200 Finance credits product and data outside ZopNight if needed
OPTION 2: shared-services team Assign to shared-services only shared-services $1,200 Shared-services budget covers it; re-allocate by journal entry
OPTION 3: keep the equal split Assigned to all three $400 each Acceptable when the skew is small or the cost is minorPick the option by cost and skew. A small resource with mild skew is not worth the conversation; a large resource with 90/10 skew is. If finance needs the exact usage split, ZopNight gives them the resource’s cost and they apply the percentages in their own chargeback.
What if no team is assigned?
assigned to no team → Resource lands in the "Unattributed" bucket → Visible in Teams report as its own row → Cost is not chargeable to any specific team → Surfaces as an ownership gap to close (team tags play no part: only assignment counts)The Unattributed row should be visible and trended. A healthy org keeps Unattributed under 5% of total spend; mid-maturity orgs are in the 5-15% range; early-stage orgs can be 20-30%.
Multi-team shared services pattern
A common, cleaner pattern: stand up a dedicated shared-services team that owns shared infrastructure as a unit.
PATTERN: dedicated shared-services team
team=shared-services cost_owner=infrastructure-team
Resources owned: DNS (Route 53 hosted zones) Monitoring (DataDog, Prometheus, Grafana) Logging (CloudWatch Logs, ELK, Sumo) Security tools (GuardDuty, vulnerability scanners) Container registries (ECR, GAR, ACR) CI/CD infrastructure (GitHub runners, Buildkite agents)
COST FLOW: - All shared infra costs charged to shared-services team - shared-services team's budget covers the full cost - Optionally: re-allocate to consuming teams via internal chargeback (monthly journal entry from finance)This pattern has two advantages over multi-team-tagged shared resources. First, clarity: the cost is attributed to one team that has explicit ownership. Second, incentive alignment: the shared-services team is responsible for the cost AND the service quality, which tends to produce better-optimized shared infrastructure.
Drift detection on shared-resource assignments
Over time, teams come and go from shared resources. If the assignments do not get updated, the attribution stays stuck at an old shape.
DRIFT EXAMPLES: - Team is dissolved, but it is still assigned to resources - New team starts using a shared resource without being assigned - A team stopped using a shared resource but is still assigned
DETECTION (quarterly review): - List all shared resources (resources with shareCount > 1) - For each, confirm the assigned team list is current - For heavily skewed ones, decide whether owner-pays or the shared-services team fits better than the equal split - Update the assignments on the Teams page; the next daily allocation uses the new share countMost orgs catch drift quarterly. Over time the team list on a shared resource drifts, so the equal split drifts with it.
How ZopNight uses team attribution
The Teams report aggregates daily allocation records where the dimension is team. Each record carries the date, the resource, the team, the resource’s cost, the share count, and the allocated cost (cost divided by share count). There is one allocation method, the equal split, so no method column is needed.
For audit purposes, every allocation is traceable back to the resource. If a team disputes a charge, the FinOps lead can drill from the team total → the source resources → the team assignments that drove the attribution.
2. Demo
A mid-size customer’s team attribution after a clean review:
ESTATE: 12 cloud accounts, $75K/month total
ASSIGNMENT SHAPE: Single-team resources 52% of spend (clean attribution) Shared between 2 teams 20% of spend (equal split) Shared services 10% of spend (dedicated team) Unassigned / Unattributed 18% of spend ← gap
REPORTS → Teams view (current month): platform $24,000 (32% of total) product $18,000 data $12,000 shared-services $7,500 Unattributed $13,500 ← target ──────── TOTAL $75,000
ANALYSIS: Top investment opportunity: reduce Unattributed from 18% to <5%. Estimated work: 3 days of assigning resources and resource groups to teams. Estimated impact: ~$10K of spend becomes attributable; chargeback becomes practical.
ACTION PLAN: Week 1: Assign the resource groups that map to teams (each group brings all its members) Week 2: Assign the top-spend Unattributed resources by hand Week 4: Re-measure; target 5% Unattributed Week 12: Steady-state monitoring with monthly trending3. Hands-on (6 min)
For your estate:
SHARED-RESOURCE INVENTORY: Number of resources with shareCount > 1: _____ How many are assigned to 3 or more teams? _____
HIGHEST-SKEW shared resource (one team uses much more): Resource: __________ Usage skew (your telemetry): ___ / ___ Better fit: keep equal / owner-pays / shared-services
UNATTRIBUTED BUCKET: Current % of total spend: _____ % Target % (typical: <5%): _____ % Gap-closing plan: □ Run Smart Tags on Unattributed □ Manual cleanup of top resources □ IaC tag enforcement to prevent future drift □ Quarterly review cadence
SHARED-SERVICES TEAM (if not already): Would your org benefit from a dedicated shared-services team? __________________________________________________________If your Unattributed is above 20%, the gap-closing has a high return: every percentage point of improvement is real spend becoming chargeable.
Do it through MCP. The same task you just did in the console, asked in one sentence.
BEFORE A ZopNight account with one cloud connected. Resources discovered, and a team structure you can mirror.ASK "Create a team for platform engineering and assign these resources to it."CHECK unattributed spend afterwards. Attribution that leaves a large unallocated bucket has not landed, which is L7.Tools behind it: create_team (write, tier 1, metadata only), assign_resource_to_team (write, tier 1, metadata only), get_cost_by_team (read, Cost), get_team_cost_detail (read, Cost). Connection details are in the MCP integration docs.
4. Knowledge check
Q1
A resource is assigned to both the platform and product teams and costs $1,200/month. Attribution:
A. Equal split: $600 to each team (shareCount=2)
B. The platform team pays for the entire thing
C. It is left completely unattributed for now
D. Alphabetical order, so that platform wins
Show answer
Correct: A. shareCount is the number of teams the resource is assigned to, and the cost is split equally between them. Predictable and simple; no usage data required.
Q2
A team uses 90% of a shared resource; another team uses 10%. Best attribution:
A. Add workload_share_* tags to set a 90/10 split
B. Keep both teams assigned and accept the 50/50 split
C. Assign it to the 90% team only (owner-pays)
D. Unassign both teams so it sits in Unattributed
Show answer
Correct: C. ZopNight’s only rule is equal split across assigned teams, so you fix skew by changing the assignment, not the split. No tag sets a usage split. The 50/50 split overcharges the small user, and Unattributed hides an owned cost.
Q3
Unattributed bucket at 18% of total spend. Best action:
A. Ignore: 18% is acceptable
B. Split it evenly across every team in the org
C. Stop showing the bucket
D. Investigate and reduce
Show answer
Correct: D. Target Unattributed below 5%. The cause is resources not assigned to any team: new resources, or resources outside every team’s groups. Assign whole groups to teams, then the top-spend leftovers by hand. Every percentage point recovered is real spend that becomes chargeable.
5. Apply
The Teams report at Cost Reports → Teams surfaces attribution by team, with the Unattributed bucket as its own row for visibility. Team ownership comes from assignments on the Teams page, not from tags.
For shared-services patterns, create a dedicated team on the Teams page and assign the shared-infrastructure resources (or their resource group) to it. Budgets on those resources or that group should cover the full shared infra cost.
Related lessons
- L1: Pick the dimension
- L3: Tag attribution (next)
- L4: Tag coverage
- L5: Unit economics
- T4.M4.4.L1: Why multi-account
Glossary terms touched
Shared-services allocation · Unattributed spend