A workable allocation rule has two gates and one tie-breaker. Both gates must pass. The tie-breaker resolves the queue.
Gate 1, role fit. Does the person's role require the tool for a named, recurring task? "Requires" means the task is on their job description or their team's charter and the tool changes how fast or how well it gets done. "Might be useful" is not role fit. Write the tasks down, per role, before the rollout. For a support team the tasks might be drafting replies and summarizing tickets. For a data team they might be generating SQL and reviewing diffs.
Gate 2, weekly use. Has the person used the tool at or above a threshold in the trailing measurement window? You cannot measure this before granting a seat, so this gate applies to renewal and to reassignment, not to first grant. For first grants, run a two-week trial on a shared or low-cost tier, then measure.
Thresholds that hold up. Set the bar where the tool stops being an experiment and starts being part of the workflow: at least three distinct active days in a week, or at least ten substantive sessions per month. Microsoft's own definition of an active Copilot user requires at least one intentional interaction, a submitted prompt or deliberate engagement with a feature in a supported app, as noted in this guide to Microsoft license reclamation. That is the floor for counting as active at all, not the bar for justifying a premium seat. A user who opens the pane and never submits a prompt registers zero.
The tie-breaker: frequency of a task the tool accelerates. When two people pass both gates and one seat is available, count how often each performs the task. A person who writes thirty customer replies a week beats a person who writes four, even if both are in suitable roles.
Here is a scoring rule you can run in a spreadsheet. Score each candidate weekly, keep the top scores seated, and hold the rest.
# Weekly seat scoring. Scores above 0 pass both gates.
def seat_score(role_required, active_days, task_frequency, data_tier_ok):
if not role_required or not data_tier_ok:
return 0 # fails gate 1, no seat, waitlist with reason
if active_days < 3:
return 0 # fails gate 2, retest next cycle
# Rank seated candidates by task frequency, 1-5 scale
return task_frequency
people = [
{"name": "support_lead", "role_required": True, "active_days": 5, "task_frequency": 5, "data_tier_ok": True},
{"name": "analyst", "role_required": True, "active_days": 4, "task_frequency": 3, "data_tier_ok": True},
{"name": "designer", "role_required": False, "active_days": 2, "task_frequency": 2, "data_tier_ok": True},
{"name": "researcher", "role_required": True, "active_days": 3, "task_frequency": 4, "data_tier_ok": False},
]
ranked = sorted(people, key=lambda p: -seat_score(
p["role_required"], p["active_days"], p["task_frequency"], p["data_tier_ok"]))
Run it, and read the output as a decision, not a ranking. In the sample above the support lead and analyst are seated, the designer is waitlisted on role fit and usage, and the researcher is waitlisted on data tier even though the role requires the tool. The last case is the one teams get wrong: a strong candidate with a data restriction is a governance problem, not a budget problem, and no number of active days fixes it.
Add a third gate you keep separate from the score: data tier. Whatever the tool's approved data classes are, the candidate must handle only data at or below that level. This is the point at which the acceptable use policy and the seat list have to agree. The ICOM generative AI policy, for example, forbids sharing restricted or confidential data with any generative AI system and tells users to limit AI input to public and, in some cases, internal data, as set out in that policy. If a candidate's daily work is confidential by default, the seat does not help them.
For agents and skills, the rule needs an extra column. An agent Skill is often just a markdown file on an employee's machine, and it executes with that employee's own permissions, able to read files, call APIs or run shell commands, as Backslash Security's vetting guide explains. That means an agentic capability is a seat in a different sense: the permission scope it inherits is the allocation, and it has to be reviewed at the same cadence as a license.