
Here’s the part the roadmap card doesn’t say out loud: the Capacity view landing in Planner in October 2026 is a paid feature. It looks like a natural extension of the boards your teams already use for free, sitting one tab over from Grid and Board. But the moment someone clicks it and sees “upgrade to unlock,” you’ll get the ticket. And then you’ll get the second ticket, from a manager who tried it on a trial and now wants it for all 40 people in the department.
So let’s get ahead of it. This is a genuinely useful feature — resource-levelling has been missing from basic Planner since day one — but it carries a licensing cost that admins need to model now, not scramble for when a director asks why their team can’t see it.
What Capacity view actually does
Capacity view (roadmap item 569733, GA October CY2026) puts every assignment on a timeline against the people doing the work. Instead of squinting at a board and mentally tallying how many cards each person is holding, you get a horizontal view: rows for people, bars for their assigned tasks over time. Someone stacked three deep in the same week shows up as an obvious block. Someone with a clear fortnight shows up as white space you can fill.
If that sounds familiar, it should. This is resource management lifted out of Project for the web and dropped into the Planner app in Teams. The concept isn’t new — Project has done capacity and resource engagement for years. What’s new is that Microsoft is surfacing it inside the Planner experience most of your users already live in, which massively widens the audience that will want it.
The productivity gain is real and easy to articulate to a budget holder. Before Capacity view, load-balancing across a team was a manual, gut-feel exercise done in someone’s head or a spreadsheet. After it, an overloaded engineer or a stalled sprint is visible at a glance, before the missed deadline rather than after. That’s the pitch. It’s also the trap, because the pitch works so well that demand outstrips whatever you’ve licensed.
The licensing catch nobody’s flagging
Basic Planner — the free experience that ships with Microsoft 365 and every Microsoft 365 Group — does not include premium plans, and Capacity view is a premium plan feature. To use it, a user needs a premium Planner license. These are the plans Microsoft rebranded from Project in 2025:
- Planner Plan 1 (formerly Project Plan 1) — the entry point for premium plans, sprints, goals, and the timeline/schedule views that Capacity view belongs to.
- Planner Plan 3 (formerly Project Plan 3) — adds the desktop Project client and roadmap-level capabilities.
- Planner and Project Plan 5 (formerly Project Plan 5) — portfolio, demand management, enterprise resource capacity.
Here’s what bites you in six months: the person who creates the premium plan needs the license, and depending on how your teams collaborate, contributors interacting with premium features may need one too. Microsoft’s own guidance on premium plan access has shifted more than once, so don’t assume “one licensed owner covers the whole team.” Model it per-user and validate against your actual usage. The renaming from Project to Planner also means your existing Project licenses are the Planner premium licenses — check what you already own before you buy anything.
Audit what you can actually turn on today
You have fourteen months. Use the first hour of it to find out where you stand: how many premium seats you own, how many are consumed, and who’s already sitting on a Project/Planner license they’ve forgotten about. Everything below uses the modern Microsoft.Graph module — no AzureAD or MSOnline, both of which are on their way out.
Connect-MgGraph -Scopes "User.Read.All","Group.Read.All","Tasks.Read.All","Organization.Read.All"
# Premium Planner SKUs are the rebranded Project SKUs.
# Verify the exact part numbers in YOUR tenant with Get-MgSubscribedSku first —
# these vary by agreement type (EDU/GCC/commercial).
$plannerSkuParts = @("PROJECT_P1","PROJECTPROFESSIONAL","PROJECTPREMIUM")
$skus = Get-MgSubscribedSku -All |
Where-Object { $plannerSkuParts -contains $_.SkuPartNumber }
if (-not $skus) {
Write-Warning "No premium Planner/Project SKUs found. Confirm part numbers with: Get-MgSubscribedSku -All | Select SkuPartNumber, SkuId"
}
$skus | Select-Object SkuPartNumber,
@{n='Enabled'; e={$_.PrepaidUnits.Enabled}},
ConsumedUnits,
@{n='Available'; e={$_.PrepaidUnits.Enabled - $_.ConsumedUnits}} |
Format-Table -AutoSize
That tells you the seat pool. Now find the humans holding those seats, so you know who can use Capacity view on day one and who’ll be raising a ticket:
$targetSkuIds = $skus.SkuId
# Get-MgUser -All handles pagination automatically — no manual @odata.nextLink loop needed.
$licensedUsers = Get-MgUser -All `
-Property Id,DisplayName,UserPrincipalName,AssignedLicenses,AccountEnabled |
Where-Object {
($_.AssignedLicenses.SkuId | Where-Object { $targetSkuIds -contains $_ }).Count -gt 0
}
$licensedUsers |
Select-Object DisplayName, UserPrincipalName, AccountEnabled |
Sort-Object DisplayName |
Export-Csv .\planner-premium-licensed-users.csv -NoTypeInformation
Write-Host "$($licensedUsers.Count) users hold a premium Planner license."
Watch for disabled accounts still holding a premium seat — that’s reclaimable budget sitting idle, and reclaiming it before renewal is the cheapest win in this whole exercise.
It’s also worth inventorying the plans themselves, so you know which teams are heavy Planner users and therefore the most likely to demand Capacity view. There’s no single “get all plans” endpoint, so you enumerate through the groups that own them:
$groups = Get-MgGroup -All `
-Filter "groupTypes/any(c:c eq 'Unified')" `
-Property Id,DisplayName
$planInventory = foreach ($g in $groups) {
try {
Get-MgGroupPlannerPlan -GroupId $g.Id -All -ErrorAction Stop |
Select-Object @{n='Group'; e={$g.DisplayName}},
@{n='PlanTitle';e={$_.Title}},
@{n='PlanId'; e={$_.Id}},
@{n='Created'; e={$_.CreatedDateTime}}
}
catch {
Write-Warning "Plan lookup failed for '$($g.DisplayName)': $($_.Exception.Message)"
}
}
$planInventory | Sort-Object Group | Export-Csv .\planner-plan-inventory.csv -NoTypeInformation
On a large tenant this loop is slow and will occasionally throw throttling (HTTP 429). The try/catch keeps one bad group from killing the run; for tenants with thousands of groups, add a short Start-Sleep between iterations or batch it.
Assigning the seats — on reviewed input only
When the requests come in, resist the urge to pipe a live query straight into a license assignment. Assign from a CSV you’ve actually reviewed with the budget owner. This script defaults to a dry run — it prints what it would do and changes nothing until you explicitly pass -Apply, and it only ever touches the rows in your reviewed file:
param(
[string]$InputCsv = ".\reviewed-capacity-users.csv", # must contain a UserPrincipalName column
[string]$SkuPartNumber = "PROJECT_P1",
[switch]$Apply # omit this and the script only reports. Nothing changes without -Apply.
)
$sku = Get-MgSubscribedSku -All | Where-Object SkuPartNumber -eq $SkuPartNumber
if (-not $sku) { throw "SKU $SkuPartNumber not found in tenant." }
$available = $sku.PrepaidUnits.Enabled - $sku.ConsumedUnits
$requested = (Import-Csv $InputCsv).Count
if ($requested -gt $available) {
Write-Warning "Requesting $requested seats but only $available available. Buy more before applying."
}
Import-Csv $InputCsv | ForEach-Object {
$upn = $_.UserPrincipalName
if ($Apply) {
Set-MgUserLicense -UserId $upn -AddLicenses @{SkuId = $sku.SkuId} -RemoveLicenses @()
Write-Host "ASSIGNED $SkuPartNumber -> $upn"
}
else {
Write-Host "[DRY RUN] would assign $SkuPartNumber -> $upn"
}
}
Run it once with no switch, eyeball the output, confirm the seat math, then re-run with -Apply. The same rule applies to any reclamation script you write against those disabled accounts — review, then apply.
Where this lives in the admin center
Planner has no dedicated admin portal, which surprises people every time. Your controls are spread across a few places:
- Licensing and seat counts: Microsoft 365 admin center → Billing → Licenses, and Billing → Purchase services for buying more premium Planner seats.
- App availability and pinning: Teams admin center → Teams apps → Manage apps and Setup policies — this is where you pin the Planner app so users find it, and where you’d block it if you needed to.
- Tenant-level Planner settings: still Graph/PowerShell territory (iCal publishing, roster creation) — there’s no GUI for most of it.
The bigger Planner picture you should be planning for
Capacity view doesn’t arrive in isolation. The Planner app in Teams is now the consolidated home for To Do, Planner, and Project for the web — the old “Tasks by Planner and To Do” name is gone. If your setup policies still reference the old app name, fix that before your users go looking for the new features.
Two other threads matter for the same admin workflow. First, Copilot in Planner — plan generation, goal breakdown, and task drafting — is itself a premium capability layered on top of both a premium Planner plan and a Copilot license. If you’re modelling budget for Capacity view, model Copilot in the same conversation, because the same power users will want both. Second, premium plan features like sprints and goals ride the exact same license as Capacity view. In other words, one Plan 1 seat unlocks the whole premium tier, so frame the purchase as “premium Planner for this team,” not “the timeline thing one manager asked for.” That reframing usually makes the business case easier, not harder.
My take
Capacity view is a good feature landing in the right place. Resource levelling belongs where the work already happens, and Teams is where it happens. The feature isn’t overrated — the surprise is.
Prioritise like this. Now: run the audit, find idle premium seats on disabled accounts, and reclaim them. Before Q3 2026: identify your two or three heaviest Planner teams and cost out premium seats for them specifically — those are your first adopters and your best pilot. When it goes GA in October: turn it on for the pilot from a reviewed CSV, not a bulk assignment, and let the results build your case for a wider rollout. Do it in that order and Capacity view becomes a planned upgrade with a clear ROI story. Ignore it and it becomes a support queue full of “why can’t I see the timeline” the week it ships.