Overview
Objective Types is a system that allows organizations to categorize objectives into named types (e.g., Company Objective, Initiative, Department Goal). Each type has a scope — either Strategic or Individual — and can be configured with a color, a set of administrators, and rules about which other types can act as parents in the objective hierarchy.
This feature enables organizations to model multi-level goal structures where strategic objectives sit above individual-level ones, and where creation and edit permissions are controlled per type.
Key Concepts
Scope
Scope | Description |
Strategic | Org-level objectives. Managed by type administrators. Can have zero collaborators. |
Individual | Personal objectives tied to a specific person. Must always have at least one collaborator (the owner is added automatically on creation). |
There can only be one Individual-scoped type per organization. There is no limit on Strategic types.
Type Hierarchy
Each type can define which other types are allowed as parent types (
link_parent_types).A type can only link to parents at the same or higher scope level (Strategic ≥ Individual). An Individual type cannot be the parent of a Strategic type.
An individual type always has itself as an allowed parent (self-link, enforced automatically).
Administrators
The
administratorsfield, is a filter that defines who can administer a given Strategic type.If
administratorsis left empty, the type is open by default — anyone can pick it when creating a new objective (edit rights then come only from being a collaborator).Admin authority cascades downward: if a person is an admin of type A, and type B has A as an allowed parent type, that person also becomes an implicit admin of type B.
Configuration (Admin)
Location: Admin → Objectives administration → Objective Types
Only users with the OBJECTIVES_ADMIN role (or superusers) can create, edit, or delete objective types.
Fields
Field | Required | Notes |
Name | Yes | Must be unique per organization. Max 100 characters. |
Description | No | Free text, describes the purpose of the type. |
Color | Yes | HEX color used as a visual badge for the type. |
Scope | Yes |
|
Owner | Auto | Set to the creating user. Read-only in the form. |
Administrators | No | People filter (JSON). Strategic types only. Leave empty to allow everyone to pick this type. |
Allowed parent types | No | Determines which types can be set as parents. Only types at the same or higher scope level are shown. |
Constraints and Validations
Deleting a type is blocked if any objectives are currently assigned to it. The error message shows how many objectives use the type.
Individual scope: only one per organization is allowed. The form defaults new types to Strategic.
Link parent types: a type cannot link to a parent type at a lower scope level (e.g., a Strategic type cannot have an Individual type as a parent).
When editing an Individual type, the self-link in
link_parent_typesis always preserved automatically (enforced on create and update).
Visual Hierarchy Graph
The admin page includes a link graph (D3-rendered) showing how types are connected through their allowed parent relationships. Clicking a node in the graph opens the edit modal for that type.
Where Objectives Appear in the UI
Section | What is shown | Who can see it |
Company → Objectives → Strategic Objectives | Strategic objectives, grouped by type | Admins of the ObjectiveType, or users with the OBJECTIVES_ADMIN role |
Company → Objectives → Overview – All | All objective types (Strategic + Individual) | Based on chain of command |
Company → Objectives → Overview – My team / reports / objectives | Individual-scoped objectives only | Based on chain of command |
Profile → Objectives | Individual objectives of the profile owner | Owner, their managers, and admins |
Profile → Sidebar panel "View strategic objectives" | Strategic objectives of the org, grouped by type | Only if a collaborator of the objective is in the viewer's chain of command |
Note: The Strategic tab on the Company Objectives page is only rendered when the current user has at least one accessible strategic type (via admin rights or collaborator subtree). It is hidden entirely if neither condition is met.
Edit Permissions
Who can edit a given objective depends on its scope:
Individual Objectives
Who | Can edit? |
Collaborator on the objective or any ancestor in the tree | ✅ Always |
Manager or admin of any collaborator on an ancestor (individual scope only) | ✅ Yes |
OBJECTIVES_ADMIN | ✅ Yes, all individual objectives |
Strategic Objectives
Who | Can edit? |
Collaborator on the objective or any ancestor in the tree | ✅ Always |
Admin of the ObjectiveType (direct, via owner, or via | ✅ Yes, objectives of that type only |
Admin of any ancestor type (via | ✅ Yes, by inherited admin authority |
OBJECTIVES_ADMIN | ✅ Yes, all strategic objectives |
Creation Permissions
Who | Can create? |
Any authenticated user | Can create Individual objectives |
Admin of a Strategic type (direct, owner, or filter match) | Can create objectives of that Strategic type |
Admin of a parent type (via | Can create objectives of descendant Strategic types |
OBJECTIVES_ADMIN | Can create objectives of any type |
Types with no administrators filter are open by default — any user can pick them when creating a new objective.
Collaborator Behavior by Scope
Behavior | Individual | Strategic |
Default collaborators at creation | Owner auto-added | None (empty by default) |
Minimum collaborators | 1 (mandatory — enforced automatically) | 0 (allowed) |
Collaborator grants edit on subtree | ✅ Yes | ✅ Yes |
If an Individual objective has no collaborators (e.g., after a type change from Strategic to Individual), the owner is automatically set as a collaborator to maintain the ≥ 1 constraint.
Adding children as a collaborator (non-admin)
A user who is only a collaborator on a strategic objective — but not an admin of any ObjectiveType — has edit access to that objective and can use the "+" button to add children. However, the type assigned to the new child is determined by computeDefaultType, which selects from userEditableObjectiveTypes (the types the current user is allowed to create objectives for). Because a pure collaborator has no admin rights, userEditableObjectiveTypes is empty and computeDefaultType returns null — the child is created with no type assigned (treated as Individual by default).
Expected behavior for a collaborator-only user adding a child to a strategic objective:
Action | Expected result |
Add child via "+" button | ✅ Allowed — edit access granted via collaborator inheritance |
Child inherits a strategic type | ❌ No — |
Manually assign a strategic type to the child | ❌ No — the type picker only shows types the user can create |
Assign the Individual type to the child | ✅ Yes — if the Individual type has no |
By design: being a collaborator on a strategic objective grants edit access, but does not grant the ability to create objectives of strategic types. Creating strategic-typed objectives requires being an admin of that type.



