Skip to main content
Your progress
0 of 8 complete0%
T4 / M4.5 / L2 OF 7 / Architect LEVEL / 10 min

Team attribution and shared resources

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.


PrerequisitesM4.5.L1: Pick the dimension
Time10 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.

Terminal window
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 $600
WHAT 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 entry

Equal 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:

Terminal window
RESOURCE: prod-shared-rds-1
ASSIGNED TO: platform, product
SHARE 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:

Terminal window
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:

Terminal window
RESOURCE: prod-eks-cluster-1, $1,200/month
USAGE (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 minor

Pick 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?

Terminal window
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.

Terminal window
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.

Terminal window
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 count

Most 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:

Terminal window
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 trending

3. Hands-on (6 min)

For your estate:

Terminal window
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.

Terminal window
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.


Glossary terms touched

Shared-services allocation · Unattributed spend


Start with the bill.

Foundations takes about five hours. The first lesson is nine minutes.

Free curriculum. No paywall. 290 lessons across 7 courses, plus an optional 24-lesson beginner course. Browse every course without an account; a free account opens the lessons, saves your progress and opens the exams for three publicly verifiable credentials. Read it on the train, take the exam on a Saturday, list the credential on your résumé Monday.

5h median time to finish Foundations
free account, every course, no paywall
3 certifications, each with a public verifier
Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console· Multi-cloud automation· Production-ready in 30 min· SOC 2 · ISO 27001· 20–60% off the bill, first month· 4 platforms · 1 console·