OKRs in GitLab

How to enter and organize OKRs in the GitLab platform.

Watch this video for a demo on how to use GitLab for OKR management:

Creating Objectives

The objectives for the quarter are defined on this page. To add new objectives in GitLab, follow the steps below:

  1. In the GitLab OKRs project, navigate to OKRs by selecting Issues on the left sidebar.
  2. In the top right corner of the Issues screen, select the down arrow next to New issue in the top right corner and then select New objective from the menu. Next, select the New objective button to create an Objective.
  3. Enter a short but descriptive title for the objective then click Create objective.
    1. When referring to a division, use the division name, not the e-group leader’s position. For example, use “Marketing OKRs” (not “CMO OKRs”).
  4. Select the objective from the list to open in an editable view and add more details:
    1. Identify the owner for the objective and assign them.
      1. Ensure that only one DRI is assigned to the objective. If there is a case of multi-ownership, it’s likely that the OKR/KR can be simplified or broken down further.
    2. Identify the quarter for the objective and set the corresponding milestone.
    3. Add labels so objective is searchable/filterable:
      1. Add OKR label.
      2. Add division label to assign to the relevant division (i.e. Sales, Product, etc).
        1. Company OKRs are designated with a division::CEO scoped label.
      3. Only Product & Engineering cascade OKRs below division level, so for Product & Engineering OKRs, in addition to division labels, follow stage labels to add the Section/Stage/Group scoped labels to assign the OKR to the relevant parts of Product Hierarchy.
      4. Each part of hierarchy should have a label. For example, an OKR for a group would have a division label, a section label, a stage label, and a group label.
  5. Review the objective against the SAFE Framework to ensure it is information that can be shared. Review to ensure that the objective should not be limited access. If the information is limited access, use code name if relevant or link to a supporting issue that is limited access.

Creating Key Results

Each Objective will contain one or more sub-objectives or key results. Sub-objectives are only used to cascade OKR down a level in organizational structure while Key Results are the measure which helps us understand if we’ve met our objective and can be cascaded down a level of organization structure to become an objective one level down. Key Results must be created as part of an Objective and cannot be created independent of an Objective since Key Results should be linked to an Objective.

Since Key Results are the measure that helps us understand if we’ve met our Objective, Key Results are aligned to the same, single layer of the organizational structure as their parent Objective and not a Key Result for multiple layers of organizational structure. However, Key Results can be cascaded down from this single organizational structure layer by becoming Objectives in the next organizational level down - see Cascading OKRs.

To add new key results in GitLab, follow the steps below:

  1. Navigate to the objective that you want to add a child key result to by opening the GitLab OKRs project, selecting Issues on the left sidebar, then clicking on the target objective.
  2. Add new key result by clicking Add in the Child objectives and key results section of an objective and then select New key result. Use the SAFE framework to determine whether it needs to have limited access.
  3. Enter a short but descriptive title for the key result then click Create key result.
    1. When referring to a division, use the division name, not the e-group leader’s position. For example, use “Marketing KR” (not “CMO KR”).
  4. Select the key result from the list in the Child objectives and key results section to open in an editable view and add more details:
    1. Identify the owner for the key result and assign them.
      1. Ensure that only one DRI is assigned to the KR. If there is a case of multi-ownership, it’s likely that the OKR/KR can be simplified or broken down further.
    2. Identify the quarter for the key result and set the start date as the first date of that quarter and set the due date to the last day of that quarter.
    3. Add labels so that KR is searchable/filterable:
      1. Add OKR label.
      2. Add division label to assign to the relevant division (i.e. Sales, Product, etc). Company OKRs are designated with a division::CEO scoped label.
      3. Only Product & Engineering cascade OKRs below division level. For Product & Engineering OKRs, in addition to division labels, follow stage labels to add the Section/Stage/Group scoped labels to assign the OKR to the relevant parts of Product Hierarchy.
      4. Each part of hierarchy should have a label. For example, an OKR for a group would have a division label, a section label, a stage label, and a group label.
  5. Review the key result against the SAFE Framework to ensure it is information that can be shared. Review to ensure that information should not be limited access. If the information is limited access, use code name if relevant or link to a supporting issue that is limited access.
  6. Optionally, turn on check-in reminders.
  7. The key result now appears in the Child objectives and key results section of the corresponding parent objective.

Watch this video for a demo on how to create objectives and key results:

Cascading OKRs and how to Align Division OKRs to the company OKRs

Cascading is the process by which top-level company OKRs cascade down from company-level to division, department, team, and sometimes individual level. The OKRs that are directly aligned with Company KRs should be tied to the Company KRs in such a way as to allow scoring.

At GitLab, we typically create OKRs at each level where some OKRs align with the levels above, but not all.

Based on the current methodology and feature set in the product, there are two ways to align OKRs to company OKRs:

  1. Add relevant OKRs as related items. Most of the time, this is what teams use.
  2. Have all relevant OKRs as children of a Company KR.

The second method should be used only if all relevant OKRs can be added as children, because Progress is automatically scored based on the children if any exist.

In the future, when manual scoring is available, a mix of the two methods can be used for a single KR.

If an OKR is related, but does not score towards the Company KR, edit the description to add a note.

Creating company OKRs

To allow for division, department, or team objectives to be added as child objectives or KRs, the Company key results should be created as an objective, not as a key result, as GitLab functionality doesn’t allow for a KR to have child OKRs.

The Office of the CEO does the following:

  1. Create the Company objective.
  2. Create the Company key results as child objectives of the Company objective.

Once company OKRs are created, other divisions and departments following one of the two methods for team OKRs that score towards company OKRs.

Typically at GitLab, divisions create OKRs to automatically have progress score towards division objectives. To indicate that a division KR should also show progress of a Company KR, add the division KR as a related item of the Company KR following these instructions:

  1. Click on the relevant Company KR to add related items.
  2. Click Add in the Linked items section.
  3. Click inside of the following item(s) text field.
  4. Find (enter text to filter) and select 1 or more objective(s) or KR(s) that should score to the Company KR.
  5. Click Add to add the selected OKR(s).

Do this for all OKRs that contribute to company OKRs. However, be careful not to link an OKR to multiple Company KRs.

When this method is used, the Office of the CEO will update the score manually based on the scoring of all related items.

A hypothetical example where division KRs score directly to division objectives, and should also progress a Company KR:

  1. Company Objective: Retain and grow top talent – automatically scores from KRs including KR1
    1. KR 1: Have 10% of managers enrolled in leadership program – manually scored based on related items
      1. Related: Sales OKR: Have 10% of managers enrolled in leadership program – child of and automatically scores to CRO Objective
      2. Related: Marketing OKR: Have 10% of managers enrolled in leadership program – child of and automatically scores to CMO Objective

Method 2: Add all OKRs as children of Company KR

This method should only be used if all OKRs that will score towards the Company KR can be children of the KR, because the Company KR progress is automatically scored based on its children. The hierarchy looks similar to this:

  1. Company objective
    1. Company KR (a GitLab objective)
      1. Division objective
        1. Division KR
        2. Division KR

To add the division OKRs as children of the relevant Company KR:

  1. Click on the Company KR you want to be the new parent for an objective/key result.
  2. Click Add in the Child objectives and key results section of the Company KR.
  3. Create team objective or KR as a child objective of the relevant Company KR (Company KR will be a GitLab objective).
  4. If the team objectives or KRs already exist, find the objective or key result for alignment by typing the name of the OKR in the search bar that appears in the Child objectives and key results section. See documentation to add a child objective.
  5. If applicable, add the team key results as children inside of the team objective.
  6. Ensure they have an assignee, labels, etc. following guidelines on Creating Key Results.

A hypothetical example where division OKRs score directly to a company OKR:

  1. Company Objective: Retain and grow top talent – automatically scores from KRs including KR1
    1. KR 1: Have 10% of managers enrolled in leadership program – automatically scores from child OKRs
      1. CRO OKR: Have 10% of managers enrolled in leadership program
      2. CMO OKR: Have 10% of managers enrolled in leadership program
      3. etc. (all divisions participating should be added)

Note: Using this method, if you need to track the team objective or KRs separately, you can take a look at Engineering’s guidance on tracking department OKRs. If you need the team objective or KRs to score to another parent objective, duplicating the OKR is currently the only way to do so.

Search and Filter OKRs

  1. You can use the List view to filter by the assignee or by your team using labels. For example:
    1. This view shows all engineering division OKRs. Division::engineering label can be swapped out for any other division/stage/section/group scoped label.
    2. This view shows all OKRs assigned to @sytses
  2. You can bookmark or share the URL for future reference.

Watch this video for a demo on how to find the OKRs you’re looking for:

Last modified October 28, 2024: Split OKR page (ca1fbdd1)