Performance Indicators
Executive Summary
KPI | Health | Status |
---|---|---|
Open InfraDev Issues | Problem |
|
Past Due Security Issues | Problem |
|
Team Member Retention | Okay |
|
Development Average Age of Open Positions | Attention |
|
Key Performance Indicators
Open InfraDev Issues
Measures the number of past due .com availability issues by severity.
Target: At or below 20 issues Health:Problem
- Our starting point is 49 with numerous issues past due, as well as long-running. This is our first priority.
Chart
URL(s):
Past Due Security Issues
Measures the number of past due security issues by severity.
Target: At or below 20 issues Health:Problem
- We are at 31 currently, exceeding our goal.
Chart
Team Member Retention
We need to be able to retain talented team members. Retention measures our ability to keep them sticking around at GitLab.
Target: at or above 84% This KPI cannot be public Health:Okay
- We are above target but this number still includes AI + Data + Core DevOps Departments.
Development Average Age of Open Positions
Measures the average time job openings take from open to close. This metric includes sourcing time of candidates compared to Time to Hire or Time to Offer Accept which only measures the time from when a candidate applies to when they accept.
Target: at or below 50 days Health:Attention
- We are seeing a very recent spike in age that needs attention.
Chart
</tableau-viz>
</div>
Regular Performance Indicators
MR Rate
Development Department MR Rate is a performance indicator showing how many changes the Development Department implements directly in the GitLab product. This is the ratio of product MRs to the number of team members in the Development Department. It’s important because it shows us how productivity of our projects have changed over time. The full definition of MR Rate is linked in the url section.
Target: Above 12 MRs per month Health:Problem
- There is no 100% accurate way of tracking this at the department level today.
Escape Rate Over Time
This shows the rate that bugs are created. It is the ratio of opened bugs to the number of MRs merged. As an example, an escape rate of 10% indicates that, on average, for every 10 MRs merged we will see 1 bug opened. Looking at the escape rate helps us understand the quality of the MRs we are merging.
Target: Currently no target is set for this metric. We need to establish a baseline and consider the right balance between velocity and quality. Unknown
- Significant closure of S3 bugs by the Dev sectoion in May as the Bug Burndown started. Similar for CI/CD in S2s and S3s.
Chart
Project/Area Maintainership Health
A project’s maintainership is considered unhealthy if it has fewer maintainers than the target maintainer count. Each project’s target maintainer count is based on the number of incoming MRs and maintainer availability.
Target: Below 20% Health:Attention
- There has been an increase consistently over several quarters, possibly due to the addition of new projects with lower maintainer numbers over time. 3 areas which need the most attention currently are GitLab database, AI Gateway, and runbooks showing we need more support in these areas and to potentially exclude some projects (like runbooks).
Chart
Review Time to Merge (RTTM)
Review Time to Merge (RTTM) tells us on average how long it takes from submitting code for review to being merged. This number includes projects from this file.
Target: At or below 3 Health:Okay
- We are doing good here but not as well with maintainership in the other charts.
Chart
Overall MRs by Type
We want to measure the breakdown of our development investment by MR type/label. We only consider MRs that contribute to our product. If an MR has more than one of these labels, the highest one in the list takes precedence.
Target: < 5% change in proportion of MRs with undefined label Health:Okay
- All sections are maintenance-heavy, with an average of 65%. Bugs make up less than features, averaging 5% except for a 10% steep increase in bug burndown for CI (100% increase).
Chart
Legends
Health
Value | Level | Meaning |
---|---|---|
3 | Okay | The KPI is at an acceptable level compared to the threshold |
2 | Attention | This is a blip, or we’re going to watch it, or we just need to enact a proven intervention |
1 | Problem | We'll prioritize our efforts here |
-1 | Confidential | Metric & metric health are confidential |
0 | Unknown | Unknown |
How pages like this work
Data
The heart of pages like this are Performance Indicators data files which are YAML files. Each - denotes a dictionary of values for a new (K)PI. The current elements (or data properties) are:
Property | Type | Description |
---|---|---|
name |
Required | String value of the name of the (K)PI. For Product PIs, product hierarchy should be separate from name by " - " (Ex. {Stage Name}:{Group Name} - {PI Type} - {PI Name} |
base_path |
Required | Relative path to the performance indicator page that this (K)PI should live on |
definition |
Required | refer to Parts of a KPI |
parent |
Optional | should be used when a (K)PI is a subset of another PI. For example, we might care about Hiring vs Plan at the company level. The child would be the division and department levels, which would have the parent flag. |
target |
Required | The target or cap for the (K)PI. Please use Unknown until we reach maturity level 2 if this is not yet defined. For GMAU, the target should be quarterly. |
org |
Required | the organizational grouping (Ex: Engineering Function or Development Department). For Product Sections, ensure you have the word section (Ex : Dev Section) |
section |
Optional | the product section (Ex: dev) as defined in sections.yml |
stage |
Optional | the product stage (Ex: release) as defined in stages.yml |
group |
Optional | the product group (Ex: progressive_delivery) as defined in stages.yml |
category |
Optional | the product group (Ex: feature_flags) as defined in categories.yml |
is_key |
Required | boolean value (true/false) that indicates if it is a (key) performance indicator |
health |
Required | indicates the (K)PI health and reasons as nested attributes. This should be updated monthly before Key Reviews by the DRI. |
health.level |
Optional | indicates a value between 0 and 3 (inclusive) to represent the health of the (K)PI. This should be updated monthly before Key Reviews by the DRI. |
health.reasons |
Optional | indicates the reasons behind the health level. This should be updated monthly before Key Reviews by the DRI. Should be an array (indented lines starting with dashes) even if you only have one reason. |
urls |
Optional | list of urls associated with the (K)PI. Should be an array (indented lines starting with dashes) even if you only have one url |
funnel |
Optional | indicates there is a handbook link for a description of the funnel for this PI. Should be a URL |
public |
Optional | boolean flag that can be set to false where a (K)PI does not meet the public guidelines. |
pi_type |
Optional | indicates the Product PI type (Ex: AMAU, GMAU, SMAU, Group PPI) |
product_analytics_type |
Optional | indicates if the metric is available on SaaS, SM (self-managed), or Both. |
is_primary |
Optional | boolean flag that indicates if this is the Primary PI for the Product Group. |
implementation |
Optional | indicates the implementation status and reasons as nested attributes. This should be updated monthly before Key Reviews by the DRI. |
implementation.status |
Optional | indicates the Implementation Status status. This should be updated monthly before Key Reviews by the DRI. |
implementation.reasons |
Optional | indicates the reasons behind the implementation status. This should be updated monthly before Key Reviews by the DRI. Should be an array (indented lines starting with dashes) even if you only have one reason. |
lessons |
Optional | indicates lessons learned from a K(PI) as a nested attribute. This should be updated monthly before Key Reviews by the DRI. |
lessons.learned |
Optional | learned is an attribute that can be nested under lessons and indicates lessons learned from a K(PI). This should be updated monthly before Key Reviews by the DRI. Should be an array (indented lines starting with dashes) even if you only have one lesson learned |
monthly_focus |
Optional | indicates monthly focus goals from a K(PI) as a nested attribute. This should be updated monthly before Key Reviews by the DRI. |
monthly_focus.goals |
Optional | indicates monthly focus goals from a K(PI). This should be updated monthly before Key Reviews by the DRI. Should be an array (indented lines starting with dashes) even if you only have one goal |
metric_name |
Optional | indicates the name of the metric in Self-Managed implemenation. The SaaS representation of the Self-Managed implementation should use the same name. |
f688a4e3
)