Set up pipeline reliability scorecards
Scorecards let you define maturity levels for your services and teams, giving engineering leaders a clear view of which areas meet reliability standards and which need attention. This guide walks you through setting up Pipeline Reliability scorecards using data from GitHub, GitLab, or Azure DevOps integrations, at different levels of the organization:
- Service: Workflow failure rates and reliability trends for individual services.
- Team: Same metrics aggregated across all services owned by each team.
- Group: Executive-level reliability health for business units.
- Organization: Top-level reliability view across the entire org.
Each scorecard evaluates entities against progressive maturity levels: Bronze, Silver, and Gold.
Common use cases
- Set clear, measurable reliability expectations across engineering teams.
- Identify services with persistently high CI/CD failure rates before they impact delivery.
- Spot reliability trends early to catch pipelines that are degrading before they become critical.
- Give developers a self-service view of their pipeline health against organization-wide standards.
Prerequisites
This guide assumes the following:
- You have a Port account and have completed the onboarding process.
- You have installed a GitHub, GitLab, or Azure DevOps integration.
- You have completed the Measure delivery reliability and stability guide, which configures the required workflow run properties on the
service,_team, andorganizationblueprints.
The example mappings used for reliability metrics often scope data to main, master, or production branches and the last 90 days so the scorecards focus on production-relevant CI/CD health. Exact defaults can vary by provider and by your current mapping.
To change the tracked branches or time window, go to Data Sources, open your GitHub, GitLab, or Azure DevOps integration, select the Mapping tab, and locate the reliability entity resource (githubWorkflowRun, gitlabJob, or azureDevopsBuild). Edit the selector.query field.
For example, this GitHub selector also includes develop:
selector:
query: >-
(.head_branch | IN("main", "master", "production", "develop")) and
((.created_at | fromdateiso8601) > (now - 7776000))
Add or remove branch names in the IN(...) list as needed. The 7776000 value is 90 days in seconds — change it to 2592000 for 30 days.
Maturity levels
Port scorecards use four fixed maturity levels. An entity must pass all rules at a given level (and all levels below it) to achieve that level.
| Level | Progression | Description |
|---|---|---|
| Basic | 0 (default) | Entity exists but meets no scorecard criteria |
| Bronze | 1 | Foundational hygiene — CI/CD is running and failure rate is below 30% |
| Silver | 2 | Good practices — failure rate under 15% and not trending worse |
| Gold | 3 | Excellence — failure rate under 5% |
Create the scorecards
Select the level you want to configure:
- Service
- Team
- Group
- Organization
Blueprint: Service
| # | Rule | Level | Property | Condition |
|---|---|---|---|---|
| 1 | Has workflow runs this month | Bronze | workflow_runs_30d | > 0 |
| 2 | Workflow failure rate < 30% | Bronze | monthly_workflow_failure_rate | < 30 |
| 3 | Workflow failure rate < 15% | Silver | monthly_workflow_failure_rate | < 15 |
| 4 | Failure rate not degrading | Silver | failure_rate_trend | != "Degrading" |
| 5 | Workflow failure rate < 5% | Gold | monthly_workflow_failure_rate | < 5 |
Create the reliability health scorecard on the service blueprint
-
Go to the Builder page of your portal.
-
Search for the Service blueprint and select it.
-
Click on the Scorecards tab.
-
If the
reliability_healthscorecard does not exist, click + New Scorecard. If it already exists, open it instead. -
Click on the
{...} Edit JSONbutton in the top right corner. -
Paste the following JSON configuration:
Service Reliability Health scorecard (click to expand)
{
"identifier": "reliability_health",
"title": "Reliability Health",
"levels": [
{
"color": "paleBlue",
"title": "Basic"
},
{
"color": "bronze",
"title": "Bronze"
},
{
"color": "silver",
"title": "Silver"
},
{
"color": "gold",
"title": "Gold"
}
],
"rules": [
{
"identifier": "has_workflow_runs",
"title": "Has workflow runs this month",
"description": "Service has at least one CI/CD workflow run in the last 30 days, confirming pipelines are active.",
"level": "Bronze",
"query": {
"combinator": "and",
"conditions": [
{
"operator": ">",
"property": "workflow_runs_30d",
"value": 0
}
]
}
},
{
"identifier": "failure_rate_under_30",
"title": "Workflow failure rate < 30%",
"description": "Monthly CI/CD workflow failure rate is below 30%.",
"level": "Bronze",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "<",
"property": "monthly_workflow_failure_rate",
"value": 30
}
]
}
},
{
"identifier": "failure_rate_under_15",
"title": "Workflow failure rate < 15%",
"description": "Monthly CI/CD workflow failure rate is below 15%.",
"level": "Silver",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "<",
"property": "monthly_workflow_failure_rate",
"value": 15
}
]
}
},
{
"identifier": "failure_rate_not_degrading",
"title": "Failure rate not degrading",
"description": "Weekly failure rate is not worsening compared to the monthly average.",
"level": "Silver",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "!=",
"property": "failure_rate_trend",
"value": "Degrading"
}
]
}
},
{
"identifier": "failure_rate_under_5",
"title": "Workflow failure rate < 5%",
"description": "Monthly CI/CD workflow failure rate is below 5%.",
"level": "Gold",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "<",
"property": "monthly_workflow_failure_rate",
"value": 5
}
]
}
}
]
} -
Click Save to create the scorecard.
workflow_runs_30d, failed_workflow_runs_30d, monthly_workflow_failure_rate, and failure_rate_trend are aggregation and calculation properties configured by the reliability metrics setup for your provider. Newly ingested entities may show Basic until the integration completes its first sync. Once sync finishes, scorecard levels are recomputed automatically.
Blueprint: Team (filtered to type = "team")
Same thresholds as service-level, but metrics are aggregated across all services owned by the team.
| # | Rule | Level | Property | Condition |
|---|---|---|---|---|
| 1 | Has workflow runs this month | Bronze | workflow_runs_30d | > 0 |
| 2 | Workflow failure rate < 30% | Bronze | monthly_workflow_failure_rate | < 30 |
| 3 | Workflow failure rate < 15% | Silver | monthly_workflow_failure_rate | < 15 |
| 4 | Failure rate not degrading | Silver | failure_rate_trend | != "Degrading" |
| 5 | Workflow failure rate < 5% | Gold | monthly_workflow_failure_rate | < 5 |
Create the reliability health scorecard on the team blueprint
-
Go to the Builder page.
-
Search for the Team blueprint and select it.
-
Click on the Scorecards tab.
-
If the
team_reliability_healthscorecard does not exist, click + New Scorecard. If it already exists, open it instead. -
Click on the
{...} Edit JSONbutton in the top right corner. -
Paste the following JSON configuration:
Team Reliability Health scorecard (click to expand)
{
"identifier": "team_reliability_health",
"title": "Reliability Health",
"filter": {
"combinator": "and",
"conditions": [
{
"operator": "=",
"property": "type",
"value": "team"
}
]
},
"levels": [
{
"color": "paleBlue",
"title": "Basic"
},
{
"color": "bronze",
"title": "Bronze"
},
{
"color": "silver",
"title": "Silver"
},
{
"color": "gold",
"title": "Gold"
}
],
"rules": [
{
"identifier": "has_workflow_runs",
"title": "Has workflow runs this month",
"description": "Team has at least one CI/CD workflow run across its services in the last 30 days.",
"level": "Bronze",
"query": {
"combinator": "and",
"conditions": [
{
"operator": ">",
"property": "workflow_runs_30d",
"value": 0
}
]
}
},
{
"identifier": "failure_rate_under_30",
"title": "Workflow failure rate < 30%",
"description": "Team's aggregate monthly CI/CD failure rate is below 30%.",
"level": "Bronze",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "<",
"property": "monthly_workflow_failure_rate",
"value": 30
}
]
}
},
{
"identifier": "failure_rate_under_15",
"title": "Workflow failure rate < 15%",
"description": "Team's aggregate monthly CI/CD failure rate is below 15%.",
"level": "Silver",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "<",
"property": "monthly_workflow_failure_rate",
"value": 15
}
]
}
},
{
"identifier": "failure_rate_not_degrading",
"title": "Failure rate not degrading",
"description": "Team's weekly failure rate is not worsening compared to the monthly average.",
"level": "Silver",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "!=",
"property": "failure_rate_trend",
"value": "Degrading"
}
]
}
},
{
"identifier": "failure_rate_under_5",
"title": "Workflow failure rate < 5%",
"description": "Team's aggregate monthly CI/CD failure rate is below 5% — elite performance.",
"level": "Gold",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "<",
"property": "monthly_workflow_failure_rate",
"value": 5
}
]
}
}
]
} -
Click Save to create the scorecard.
Blueprint: Team (filtered to type = "group")
Executive-level reliability health for business units. The has_workflow_runs rule is omitted at this level since groups aggregate across many teams and always have some pipeline activity.
| # | Rule | Level | Property | Condition |
|---|---|---|---|---|
| 1 | Workflow failure rate < 30% | Bronze | monthly_workflow_failure_rate | < 30 |
| 2 | Workflow failure rate < 15% | Silver | monthly_workflow_failure_rate | < 15 |
| 3 | Failure rate not degrading | Silver | failure_rate_trend | != "Degrading" |
| 4 | Workflow failure rate < 5% | Gold | monthly_workflow_failure_rate | < 5 |
Create the reliability health scorecard for groups
-
Go to the Builder page.
-
Search for the Team blueprint and select it.
-
Click on the Scorecards tab.
-
If the
group_reliability_healthscorecard does not exist, click + New Scorecard. If it already exists, open it instead. -
Click on the
{...} Edit JSONbutton in the top right corner. -
Paste the following JSON configuration:
Group Reliability Health scorecard (click to expand)
{
"identifier": "group_reliability_health",
"title": "Reliability Health (Group)",
"filter": {
"combinator": "and",
"conditions": [
{
"operator": "=",
"property": "type",
"value": "group"
}
]
},
"levels": [
{
"color": "paleBlue",
"title": "Basic"
},
{
"color": "bronze",
"title": "Bronze"
},
{
"color": "silver",
"title": "Silver"
},
{
"color": "gold",
"title": "Gold"
}
],
"rules": [
{
"identifier": "failure_rate_under_30",
"title": "Workflow failure rate < 30%",
"description": "Group-wide aggregate monthly CI/CD failure rate is below 30%.",
"level": "Bronze",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "<",
"property": "monthly_workflow_failure_rate",
"value": 30
}
]
}
},
{
"identifier": "failure_rate_under_15",
"title": "Workflow failure rate < 15%",
"description": "Group-wide aggregate monthly CI/CD failure rate is below 15%.",
"level": "Silver",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "<",
"property": "monthly_workflow_failure_rate",
"value": 15
}
]
}
},
{
"identifier": "failure_rate_not_degrading",
"title": "Failure rate not degrading",
"description": "Group's weekly failure rate is not worsening compared to the monthly average.",
"level": "Silver",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "!=",
"property": "failure_rate_trend",
"value": "Degrading"
}
]
}
},
{
"identifier": "failure_rate_under_5",
"title": "Workflow failure rate < 5%",
"description": "Group-wide aggregate monthly CI/CD failure rate is below 5% — elite performance.",
"level": "Gold",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "<",
"property": "monthly_workflow_failure_rate",
"value": 5
}
]
}
}
]
} -
Click Save to create the scorecard.
Blueprint: Organization
Executive-level reliability health for the entire organization. Same failure rate thresholds as group level.
| # | Rule | Level | Property | Condition |
|---|---|---|---|---|
| 1 | Workflow failure rate < 30% | Bronze | monthly_workflow_failure_rate | < 30 |
| 2 | Workflow failure rate < 15% | Silver | monthly_workflow_failure_rate | < 15 |
| 3 | Failure rate not degrading | Silver | failure_rate_trend | != "Degrading" |
| 4 | Workflow failure rate < 5% | Gold | monthly_workflow_failure_rate | < 5 |
Create the reliability health scorecard on the organization blueprint
-
Go to the Builder page.
-
Search for the Organization blueprint and select it.
-
Click on the Scorecards tab.
-
If the
org_reliability_healthscorecard does not exist, click + New Scorecard. If it already exists, open it instead. -
Click on the
{...}button in the top right corner, and choose Edit JSON. -
Paste the following JSON configuration:
Organization Reliability Health scorecard (click to expand)
{
"identifier": "org_reliability_health",
"title": "Reliability Health",
"levels": [
{
"color": "paleBlue",
"title": "Basic"
},
{
"color": "bronze",
"title": "Bronze"
},
{
"color": "silver",
"title": "Silver"
},
{
"color": "gold",
"title": "Gold"
}
],
"rules": [
{
"identifier": "failure_rate_under_30",
"title": "Workflow failure rate < 30%",
"description": "Organization-wide aggregate monthly CI/CD failure rate is below 30%.",
"level": "Bronze",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "<",
"property": "monthly_workflow_failure_rate",
"value": 30
}
]
}
},
{
"identifier": "failure_rate_under_15",
"title": "Workflow failure rate < 15%",
"description": "Organization-wide aggregate monthly CI/CD failure rate is below 15%.",
"level": "Silver",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "<",
"property": "monthly_workflow_failure_rate",
"value": 15
}
]
}
},
{
"identifier": "failure_rate_not_degrading",
"title": "Failure rate not degrading",
"description": "Organization's weekly failure rate is not worsening compared to the monthly average.",
"level": "Silver",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "!=",
"property": "failure_rate_trend",
"value": "Degrading"
}
]
}
},
{
"identifier": "failure_rate_under_5",
"title": "Workflow failure rate < 5%",
"description": "Organization-wide aggregate monthly CI/CD failure rate is below 5% — elite performance.",
"level": "Gold",
"query": {
"combinator": "and",
"conditions": [
{
"operator": "<",
"property": "monthly_workflow_failure_rate",
"value": 5
}
]
}
}
]
} -
Click Save to create the scorecard.
Visualize scorecard results
Once the scorecards are in place, create a dashboard to monitor pipeline reliability maturity across services and teams.
Create the dashboard
- Navigate to your software catalog.
- Click on the
+button in the left sidebar. - Select New folder.
- Name the folder Engineering Intelligence and click Create.
- Inside the Engineering Intelligence folder, click
+again. - Select New dashboard.
- Name the dashboard Pipeline Reliability Scorecards and click Create.
Add widgets
You can populate the dashboard using either an API script or by manually creating each widget through the UI.
- API script
- Manual setup
The fastest way to set up the dashboard is by using Port's API to create all widgets at once.
Get your Port API token
-
In your Port portal, click on your profile picture in the top right corner.
-
Select Credentials.
-
Click Generate API token.
-
Copy the generated token and store it as an environment variable:
export PORT_ACCESS_TOKEN="YOUR_GENERATED_TOKEN"EU regionIf your portal is hosted in the EU region, replace
api.port.iowithapi.port-eu.ioin the dashboard creation command below.
Create the dashboard with widgets
Save the following JSON to a file named reliability_scorecards_dashboard.json:Dashboard JSON payload (click to expand)
{
"identifier": "reliability_scorecards",
"title": "Pipeline Reliability Scorecards",
"icon": "Alert",
"type": "dashboard",
"parent": "engineering_intelligence",
"widgets": [
{
"id": "reliabilityScorecardsDashboardWidget",
"type": "dashboard-widget",
"layout": [
{
"height": 400,
"columns": [
{"id": "serviceLevelDistribution", "size": 4},
{"id": "teamLevelDistribution", "size": 4},
{"id": "servicesBelowBronze", "size": 4}
]
},
{
"height": 400,
"columns": [
{"id": "serviceReliabilityTable", "size": 12}
]
},
{
"height": 400,
"columns": [
{"id": "teamReliabilityTable", "size": 12}
]
}
],
"widgets": [
{
"id": "serviceLevelDistribution",
"type": "entities-pie-chart",
"title": "Service Reliability Levels",
"icon": "Pie",
"description": "Distribution of reliability scorecard levels across services",
"blueprint": "service",
"property": "scorecard#reliability_health",
"dataset": {
"combinator": "and",
"rules": []
}
},
{
"id": "teamLevelDistribution",
"type": "entities-pie-chart",
"title": "Team Reliability Levels",
"icon": "Pie",
"description": "Distribution of reliability scorecard levels across teams",
"blueprint": "_team",
"property": "scorecard#team_reliability_health",
"dataset": {
"combinator": "and",
"rules": [
{
"operator": "=",
"property": "type",
"value": "team"
}
]
}
},
{
"id": "servicesBelowBronze",
"type": "entities-number-chart",
"title": "Services Below Bronze",
"icon": "Alert",
"description": "Number of services that have not reached Bronze reliability level",
"blueprint": "service",
"chartType": "countEntities",
"calculationBy": "entities",
"func": "count",
"unit": "none",
"dataset": {
"combinator": "and",
"rules": [
{
"operator": "=",
"property": "scorecard#reliability_health",
"value": "Basic"
}
]
}
},
{
"id": "serviceReliabilityTable",
"type": "table-entities-explorer",
"displayMode": "widget",
"title": "Service Reliability Scorecard Overview",
"icon": "Table",
"description": "Services with their reliability scorecard level and failure rate metrics",
"blueprint": "service",
"dataset": {"combinator": "and", "rules": []},
"excludedFields": [],
"blueprintConfig": {
"service": {
"groupSettings": {"groupBy": ["team"]},
"propertiesSettings": {
"order": ["$title", "team", "scorecard-property#reliability_health", "monthly_workflow_failure_rate", "weekly_workflow_failure_rate", "failure_rate_trend", "workflow_runs_30d", "failed_workflow_runs_30d"],
"shown": ["$title", "team", "scorecard-property#reliability_health", "monthly_workflow_failure_rate", "weekly_workflow_failure_rate", "failure_rate_trend", "workflow_runs_30d", "failed_workflow_runs_30d"]
},
"filterSettings": {"filterBy": {"combinator": "and", "rules": []}},
"sortSettings": {"sortBy": []}
}
}
},
{
"id": "teamReliabilityTable",
"type": "table-entities-explorer",
"displayMode": "widget",
"title": "Team Reliability Scorecard Overview",
"icon": "Table",
"description": "Teams with their reliability scorecard level and failure rate metrics",
"blueprint": "_team",
"dataset": {
"combinator": "and",
"rules": [
{
"operator": "=",
"property": "type",
"value": "team"
}
]
},
"excludedFields": [],
"blueprintConfig": {
"_team": {
"groupSettings": {},
"propertiesSettings": {
"order": ["$title", "scorecard-property#team_reliability_health", "monthly_workflow_failure_rate", "weekly_workflow_failure_rate", "failure_rate_trend", "workflow_runs_30d", "failed_workflow_runs_30d"],
"shown": ["$title", "scorecard-property#team_reliability_health", "monthly_workflow_failure_rate", "weekly_workflow_failure_rate", "failure_rate_trend", "workflow_runs_30d", "failed_workflow_runs_30d"]
},
"filterSettings": {"filterBy": {"combinator": "and", "rules": []}},
"sortSettings": {"sortBy": []}
}
}
}
]
}
]
}
Then run the following command to create the dashboard with all widgets:
curl -s -X POST "https://api.port.io/v1/pages" \
-H "Authorization: Bearer $PORT_ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d @reliability_scorecards_dashboard.json | python3 -m json.tool
The script assumes a folder with the identifier engineering_intelligence already exists in your catalog. If you haven't created it yet, follow steps 1–4 in the Create the dashboard section first. To find the exact identifier of an existing folder, open it in your catalog and check the URL — the identifier appears as the last path segment (e.g., app.getport.io/organization/catalog/my_folder_id). Replace engineering_intelligence in the JSON with your actual folder identifier if it differs.
Scorecard level distribution
Service reliability levels pie chart (click to expand)
- Click
+ Widgetand select Pie Chart. - Title:
Service Reliability Levels. - Description:
Distribution of reliability scorecard levels across services. - Choose Service as the Blueprint.
- Select
Reliability Healthfrom the Breakdown by property dropdown (this is thescorecard#reliability_healthproperty). - Click Save.
Team reliability levels pie chart (click to expand)
- Click
+ Widgetand select Pie Chart. - Title:
Team Reliability Levels. - Description:
Distribution of reliability scorecard levels across teams. - Choose Team as the Blueprint.
- Select
Reliability Healthfrom the Breakdown by property dropdown (this is thescorecard#team_reliability_healthproperty). - Add a filter:
type = "team". - Click Save.
Attention metrics
Services below bronze number chart (click to expand)
-
Click
+ Widgetand select Number Chart. -
Title:
Services Below Bronze. -
Description:
Number of services that have not reached Bronze reliability level. -
Select
Count EntitiesChart type and choose Service as the Blueprint. -
Add this JSON to the Additional filters editor:
{
"combinator": "and",
"rules": [
{
"operator": "=",
"property": "scorecard#reliability_health",
"value": "Basic"
}
]
} -
Click Save.
Scorecard tables
Service reliability scorecard overview table (click to expand)
- Click
+ Widgetand select Table. - Title:
Service Reliability Scorecard Overview. - Description:
Services with their reliability scorecard level and failure rate metrics. - Choose Service as the Blueprint.
- Group by Team.
- Configure the displayed columns to show: title, team, reliability level, monthly failure rate, weekly failure rate, failure rate trend, monthly workflow runs, and monthly failed runs.
- Click Save.
Team reliability scorecard overview table (click to expand)
- Click
+ Widgetand select Table. - Title:
Team Reliability Scorecard Overview. - Description:
Teams with their reliability scorecard level and failure rate metrics. - Choose Team as the Blueprint.
- Add a filter:
type = "team". - Configure the displayed columns to show: title, reliability level, monthly failure rate, weekly failure rate, failure rate trend, monthly workflow runs, and monthly failed runs.
- Click Save.
Next steps
- Add automations: Use Port automations to notify teams via Slack when their service drops below Bronze, or create Jira tickets for services with persistently high failure rates.
- Customize thresholds: The failure rate thresholds (30%, 15%, 5%) are starting points. Adjust them to match your organization's baselines.
- Combine with Delivery Performance: Stack this scorecard alongside the Delivery Performance scorecard to get both reliability and velocity signals in one dashboard.
Related guides
- Measure delivery reliability and stability : The prerequisite guide that sets up workflow run ingestion and failure rate properties.
- Set up Delivery Performance scorecards : Complement pipeline reliability with PR throughput and cycle time scorecards.
- Set up a Service Production Readiness scorecard : Combine with repository hygiene and ownership standards.