...
Principle sets can be created to accommodate different team archetypes (e.g. cross-functional, flow-to-work, service, platform, etc).
Examples of principles and principle sets
Individual/Role/General Principle Set
X layers from the CEO
Role diversity (individual) and total role diversity (organisation)
Team/Squad Principle Set
Between X & Y members (e.g. 5-9), full or part-time
Location e.g. same city, same building, same floor, timezone, if distributed - no more than X locations
Specific and/or dedicated roles included e.g. Scrum Master or Product Owner, etc
Number of line managers
Group/Tribe/'Team of Teams' Principle Set
Maximum number of individuals e.g. 150
Maximum number of teams/squads
Specific and/or dedicated roles e.g. Tribe Lead, Group Performance Lead, etc
Domain/Business Unit Principle Set
Maximum number of individuals e.g. 500
Maximum number of groups/tribes/'teeam of teams' e.g. 7
Configuring Principles
Principles are enabled in a workspace by default, but can also be toggled off via settings / workspace feature toggles
...
Default principle sets can be defined per team type via Settings / Org Structure type config. Select a team type, then choose a preferred principle set for that team type.
...
JSON parameters for Principles:
Member Count
parameter maxMembers(optional), minMembers(optional)
title Should consist of no more than ${maxMembers} direct members.
Should consist of at least ${minMembers} direct members.
Should consist of between ${minMembers} and ${maxMembers} direct members.
Code Block |
---|
Note |
Note that the default principle set is applied to teams that are updated after the default is set. All existing teams will not be automatically updated when the default is changed. One way to ensure all teams are updated is to import teams with the principle set ID updated. For example, the Teams CSV import can be used to assign a principle set ID to each team in the system. |
...
JSON parameters for Principles:
Member Count
parameter maxMembers(optional), minMembers(optional)
title Should consist of no more than ${maxMembers} direct members.
Should consist of at least ${minMembers} direct members.
Should consist of between ${minMembers} and ${maxMembers} direct members.
Code Block | ||
---|---|---|
| ||
{ "type": "MEMBER_COUNT", "args": { "maxMembers": 10, "minMembers": 5 } } |
Total Member Count
parameter maxMembers
title Should consist of no more than ${maxMembers} direct and indirect members.
Code Block | ||
---|---|---|
| ||
{ "type": "TOTAL_MEMBER_COUNT", "args": { "maxMembers": 150 } } |
Spread
parameter maxTeamsPerMember, teamType
...
Code Block | ||
---|---|---|
| ||
{ "type": "SPREAD", "args": { "maxTeamsPerMember": 1, "teamType": "design" } } |
Role Spread
parameter role, roleDisplayName, limit, teamType, teamDisplayname, roleTagType, roleTagAttribute
title ${roleDisplayName} should work in no more than ${limit} {teamTypeDisplayName}
Code Block | ||
---|---|---|
| ||
{ "type": "ROLE_SPREAD", "args": { "role": "(.*product.*owner)", "roleDisplayName": "Product Owner", "limit": 1, "teamTypeDisplayName": "Agile Team", "teamType": "(group|team)" } } |
Ownership
parameter maxTeamsPerMember, teamType
title Should have 1 ${ownershipRoleDisplayName}.
...
Also supports signal overrides.
See Role Tag Parameters for details on the roleTagType
and roleTagAttribute
parameters.
Role Count
parameter role, roleDisplayName, limit, teamType, teamDisplayname, roleTagType, roleTagAttribute
title ${roleDisplayName} should work in no more than ${limit} $ {ownershipRoleDisplayName}.
Note: Ownership Role
references Job Title (jobTitle
) and the SPECIALIST Tag type (tagType
) for a person. If either match, it will be seen as meeting the principle. (uses Regex - more examples below)
...
teamTypeDisplayName}
Code Block | ||
---|---|---|
| ||
{ "type": "OWNERSHIPROLE_COUNT", "args": { "ownershipRoleDisplayNamerole": "Product Owner(.*product.*owner)", "limitroleDisplayName": 1, "Product Owner", "ownershipRolemin": "(.*product.*owner)"1, } } |
Locality
parameter maxLocations
title Where teams are distributed it will be across no more than ${maxLocations} premises
Code Block | ||
---|---|---|
| ||
"max": 10, { "typeteamTypeDisplayName": "LOCALITYAgile Team", "argsteamType": { "maxLocations": 1 "(group|team)" } } |
Line Manager Count
parameter maxManagers
...
Also supports signal overrides.
See Role Tag Parameters for details on the roleTagType
and roleTagAttribute
parameters.
Ownership
parameter maxTeamsPerMember, teamType
title Should have 1 ${ownershipRoleDisplayName}.
consist of between 1 and ${limit} ${ownershipRoleDisplayName}.
Note: Ownership Role
references Job Title (jobTitle
) and the SPECIALIST Tag type (tagType
) for a person. If either match, it will be seen as meeting the principle. (uses Regex - more examples below)
Code Block | ||
---|---|---|
| ||
{ "type": "LINE_MANAGER_COUNT""OWNERSHIP", "args": { "maxManagersownershipRoleDisplayName": 5"Product Owner", } "limit": 1, } |
Role Conformity (in-complete)
parameter requiredTags,
title Each team member should have a required set of tags.
Note: needs verifying by a dev/.
Code Block | ||
---|---|---|
| ||
{ "type"ownershipRole": "ROLE_CONFORMITY",(.*product.*owner)" } "args": { } |
Locality
parameter maxLocations
title Where teams are distributed it will be across no more than ${maxLocations} premises
Code Block | ||
---|---|---|
| ||
{ "personTagstype": ["LOCALITY", "args": { "tag", "tag", "tag" "maxLocations": 1 } ] } |
Field Match
parameters field,metric,min,max,roleTagType,roleTagAttribute
title Count of people that have matching values for a specified field by number or by ratio
Code Block |
---|
{ } } |
Role Diversity
parameter requiredRoles,
title Each team should have ${minCount}{Role}
Note: requiredRoles
references Job Title (jobTitle
) and the SPECIALIST Tag type (tagType
) for a person. If either match, it will be seen as meeting the principle. (uses Regex - more examples below)
Code Block | ||
---|---|---|
| ||
{"type": "FIELD_MATCH", "args": { "field": "country", "typemin": "ROLE_DIVERSITY"80, "argsmax": { 100, "requiredRolesmetric": ["ratio" } {} |
In the above, if there are any values for the country
field where less than 80% of people have a matching value the principle evaluation fails.
Code Block |
---|
{ "role"type": "Product OwnerFIELD_MATCH", "args": { "minCountfield": 1"country", }, { "min": 8, "rolemax": "Devops Engineer", 10, "minCountmetric": 1"count" } }, |
In the above, if there are any values for the country
field where less than 8 or more than 10 people have a matching value the principle evaluation fails.
Also supports signal overrides.
See Role Tag Parameters for details on the roleTagType
and roleTagAttribute
parameters.
Demand Allocation Ratio
parameter minAllocationRatio,maxAllocationRatio,includedTags,excludedTags,fteThreshold,includeVacancies,useFteRatio
title <%- actualAllocationRatio %>%</strong> members are allocated to demand structure.
Code Block |
---|
{
type: "DEMAND_ALLOCATION_RATIO",
args: {
fteThreshold: 0,
includeVacancies: false,
includedTags: [],
excludedTags: {
NON_PACE_ALLOCATION: [],
RESOURCEAVAILABILITY: [],
NON_PACE_ALLOCATION_DEFAULT: []
},
includedTeamTypes: [],
excludedTeamTypes: [
"Working With Agile"
],
maxAllocationRatio: 100,
minAllocationRatio: 90
}
} |
Notes:
useFteRatio
- default isfalse
. When set totrue
the ratio is calculated from the sum of allocated FTE (with over allocation ignored) as a percentage of total available FTE. When set tofalse
the ratio is the number of members that have any demand allocation at all as a percentage of the total number of members.
Line Manager Count
parameter maxManagers
title Team should have no more than ${maxManagers} line managers.
Code Block | ||
---|---|---|
| ||
{
"type": "LINE_MANAGER_COUNT",
"args": {
"maxManagers": 5
}
} |
Role Conformity (TBD)
parameter requiredTags,
title Each team member should have a required set of tags.
Note: needs verifying by a dev (update this is only used by 1 customer so might not be something we use more broadly with a common set of needs)
Code Block | ||
---|---|---|
| ||
{
"type": "ROLE_CONFORMITY",
"args": {
"requiredTags": [
"tag", "tag", "tag"
]
}
} |
Role Diversity
parameter requiredRoles,
title Each team should have ${minCount}{Role}
Note: requiredRoles
references Job Title (jobTitle
) and the SPECIALIST Tag type (tagType
) for a person. If either match, it will be seen as meeting the principle. (uses Regex - more examples below)
Code Block | ||
---|---|---|
| ||
{
"type": "ROLE_DIVERSITY",
"args": {
"requiredRoles": [
{
"role": "Product Owner",
"minCount": 1
},
{
"role": "Devops Engineer",
"minCount": 1
},
{
"role": "UX/Designer",
"minCount": 1
},
{
"role": "Senior Software Engineer",
"minCount": 1
},
{
"role": "Software Engineer",
"minCount": 3
}
]
}
} |
parameter roleTagType,
Note: roleTagType
references tag type for the requiredRoles
. This defaults to SPECIALIST
.
Total Role Diversity
parameter requiredRoles
title Team should be cross-functional and include the following capabilities:${requiredRoles}
Code Block | ||
---|---|---|
| ||
{ "type": "TOTAL_ROLE_DIVERSITY", "args": { "requiredRoles": [ { "role": "UX/DesignerData Technician", "minCount": 1 }, { "role": "SeniorField Software EngineerTechnician", "minCount": 1 }, { "role": "SoftwareField Engineer", "minCount": 3 }, "minCount": 3 { } ] "role": "Electrical Engineer", } } |
Total Role Diversity
parameter requiredRoles
title Team should be cross-functional and include the following capabilities:${requiredRoles}
Code Block | ||
---|---|---|
| ||
{ "typeminCount": "TOTAL_ROLE_DIVERSITY", 3 "args": { } "requiredRoles": [ ] { } } |
Same City Co-located (incomplete)
parameter null
title All members in the same city should work at the same address.
Code Block | ||
---|---|---|
| ||
{ "role"type: "Data TechnicianSAME_CITY_COLOCATED", args: {} "minCount": 1 }, } |
Child Team Count
parameter maxTeams, minTeams, subGroupName
title Should consist of no more than ${maxTeams} direct ${subGroupName}.
Should consist of at least ${minTeams} direct ${subGroupName}.
Should consist of between ${minTeams} and ${maxTeams} direct ${subGroupName}.
Code Block | ||
---|---|---|
| ||
{ { "type": "CHILD_TEAM_COUNT", "roleargs": "Field Technician", { "minCountmaxTeams": 115, "minTeams": 1 }, } } |
Direct Workforce Count
parameter minCount, companyNames
title Should consist of at least ${minCount} direct workforce members
Code Block | ||
---|---|---|
| ||
{ "roletype": "Field Engineer", DIRECT_WORKFORCE_COUNT", "minCountargs": 3{ "minCount": }4, { "companyNames": [ "role":Company Name"Electrical Engineer", ] "minCount": 3 } } |
Timezone Overlap
parameter goodOverlap
title Members geographically distributed should have at least <${goodOverlap} overlapped working hours.
TBC: need to confirm this is correct (code reference)
Code Block | ||
---|---|---|
| ||
}{ ] } } |
Same City Co-located (incomplete)
parameter null
title All members in the same city should work at the same address.
Code Block | ||
---|---|---|
| ||
"type": "TIMEZONE_OVERLAP", "args": { type: "SAME_CITY_COLOCATED", goodOverlap": 3 args: {} } } |
Child Team Count
parameter maxTeams, minTeams, subGroupName
title Should consist of no more than ${maxTeams} direct ${subGroupName}.
Should consist of at least ${minTeams} direct ${subGroupName}.
Should consist of between ${minTeams} and ${maxTeams} direct ${subGroupName}.
...
language | json |
---|
...
Signal Overrides
By default the are three signals for principles they are:
MET - green (success)
NOT MET - red (danger)
N/A - orange (warning)
These defaults can be overridden with the following config in those principles that support it:
Code Block |
---|
"signals": [ { "condition": "==0", "typecolor": "CHILD_TEAM_COUNTsuccess", "text": "<text to replace MET>" "args": { }, { "condition": ">0", "maxTeamscolor": 15"warning", "text": "<text to replace NOT MET>" }, "minTeams": 1{ "condition": "<0", } "color": "danger", } |
Direct Workforce Count
parameter minCount, companyNames
title Should consist of at least ${minCount} direct workforce members
Code Block | ||
---|---|---|
| ||
{
"type": "DIRECT_WORKFORCE_COUNT",
"args": {
"minCount": 4,
"companyNames": [
"Company Name"
]
}
} |
Timezone Overlap
parameter goodOverlap
title Members geographically distributed should have at least <${goodOverlap} overlapped working hours.
TBC: need to confirm this is correct (code reference)
Code Block | ||
---|---|---|
| ||
{ "type": "TIMEZONE_OVERLAP", "args": { "goodOverlap": 3 } }"text": "<text to replace NOT MET>" }, ], |
The arguments are interpreted as:
condition - an arithmetic comparison - a comparison operator which is any of
==, !=, >, <, >=, <=
followed by some number.color - a colour that indicates the status of the principle given the configured condition. Usually one of
success, danger, warning
text - the text that is to be presented in the principles tab. The defaults are
MET, NOT MET, N/A
.
Role Tag Parameters
For principles that support the roleTagType
parameter this can be a string with a specific tag type (e.g. SPECIALIST
) or it can be a list of tag types like:
Code Block |
---|
"roleTagType": [
"JOB_CAPABILITY_ARCHITECTURE",
"SPECIALIST"
], |
With this configuration the role
parameter is compared with the tag value of the specified tag types.
To use the tag attribute values add the roleTagAttribute
parameter. This parameter causes the principle to be evaluated against the tag attribute value rather than the tag value.
This parameter can also take an explicit string for a single attribute or it can take a list. The tag attribute name or ID can be used in this parameter. All of the following are valid roleTagAttribute settings:
Using one tag attribute name (or ID):
Code Block |
---|
roleTagAttribute: "JA Role Code" |
Using several tag attribute IDs (or names):
Code Block |
---|
roleTagAttribute: [
"abcdef",
"jklmno"
] |
Using Person Attributes
Parameter syntax
Many arguments use Regex. For example "role": "(.*product.*(owner|manager))"
will match either product manager or product owner (or variations containing these words e.g. senior product manager, App product owner…etc). "role": "(.*agil.*coach)"
will match agility coach, agile methodology coach..etc.
Bulk assigning principles to teams
You can use the Teams CSV import (Settings → Data Integrations → Create New - > Teams csv file upload
...
and a field map as follows:
...
Troubleshooting:
Can’t find a team a principle set in the drop down for a team?
...
It is likely you need to ensure a principle set is configured to have a suitableGroupType matching the team type for that team (as defined in Settings → Org Structure → Team Types)
E.g.
Code Block | ||
---|---|---|
| ||
{ suitableGroupTypes:”squad” } |
Related articles
Filter by label (Content by label) | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|
|
Page Properties | ||||
---|---|---|---|---|
| ||||
|
...