A plan for allocating team capacity
A capacity plan models how much work a team can actually take on in a given period, set against what it has already committed to. It accounts for the things that erode raw headcount into real availability: holidays, on-call, meetings, the steady drip of maintenance. The discipline turns on one counter-intuitive fact, that planning a team to 100% of its capacity is the surest way to make it slower.
Capacity planning began in manufacturing and operations, where matching production capacity to demand was a measurable engineering problem. Agile teams adopted a lighter version through velocity and throughput, using a team's recent delivery rate to forecastForecastSales & RevenueA revenue forecastView reference → how much it could commit to next.
The decisive insightInsightUser ResearchA synthesised finding from researchView reference → came from queueing theory. Kingman's formula, the VUT equation for mean wait time in a queue, shows that waiting time rises with utilisation in a way that turns sharply upward as utilisation approaches 100%. Donald Reinertsen carried this into product work in The Principles of Product Development Flow (2009): capacity utilisation increases queues exponentially, and a rough rule of thumb treats anything past roughly 80% as the point where queue times and work-in-progress begin to balloon. The practical lesson is that a team planned to full capacity has no buffer for the variability that is certain to arrive, so its delivery slows precisely when it can least afford to.
The field landed on planning to less than full load on purpose. Slack is the mechanism that keeps flow moving, and a capacity plan that ignores it is a forecast of delay dressed up as efficiency.
A team of six has a nominal 30 person-days per two-week sprint. The capacity plan deflates that to reality: two engineers are part-time on an incidentIncidentDevOps & PlatformA production incidentView reference → rota (minus 4 days), one is on holiday (minus 5), recurring ceremonies and reviews take a day across the team (minus 6), and routine maintenance reliably consumes a fifth of what remains. Effective planning capacity comes to about 12 person-days, not 30.
The team commits to 10 days of featureFeatureProduct SpecificationA product capability or featureView reference → work and holds the rest as buffer. A neighbouring team that committed its full 30 spends the sprint firefighting overruns, with new requests queueing behind blocked work. The first team ships what it planned and absorbs a mid-sprint escalation without derailing. The difference is the refusal to plan at 100%.
In the Unified Product Graph, Capacity PlanTeam & OrganisationA plan for allocating team capacity lives in the team-and-organisation region and binds to its owner through capacity_planTeamplanned viaCapacity Planhierarchy, a hierarchical edge from team_planned_via_capacity_planTeamTeam & OrganisationA cross-functional teamView reference → to the plan that governs its load. Keeping the plan attached to a specific team is what makes the 100%-utilisation trap visible: a plan that commits a team beyond its deflated capacity is a queryable warning, not a buried assumptionAssumptionStrategyA belief taken as true that underpins a strategyView reference →. It sits next to teamResource AllocationProgram ManagementAn allocation of team capacityView reference → and resource_allocationCeremonyTeam & OrganisationA recurring team ritual (standup, planning)View reference →, so the chain from portfolio staffing down to a single team's deliverable load, ceremonies and all, stays connected.ceremony
Type-specific fields on BaseNode
plan_periodstringTime period the plan covers (e.g. "Sprint 14", "Q2 2026")
total_capacitynumberTotal available capacity in person-days or story points
allocatednumberCapacity already allocated to work
availablenumberRemaining unallocated capacity
idstringrequiredUnique identifier (UUID)
typeNodeTyperequiredDiscriminator for the entity type
titlestringrequiredDisplay name
descriptionstringOptional detailed description
statusstringLifecycle status
tagsstring[]Freeform tags for filtering
5 phases — initial: drafted
1 edge type connected to this entity.
team_planned_via_capacity_plan