Deployment risk

Risk alerts bring everything together by flagging conditions that indicate elevated deployment risk. These alerts help you move from passive observation to action, notifying when multiple risk factors align and it may be time to pause or reassess further changes.

For this tile, we're going to do things a little out of sequence, as we'll combine signals from our previous tiles into a composite risk score. Each KPI contributes a small risk weight, and when multiple signals degrade together, the dashboard escalates from 0-100.

As we're relying on signals from our other tiles, before configuring this tile, make sure that you've built the following tiles and published them as a KPI:

Configuring the tile

Configure the following in the tile editor:

  1. Multiple datasets: Enable the toggle at the top of the tile editor. Each dataset keeps its own data source, data stream and parameters, and is named dataset1, dataset2 and so on. Rename a dataset by selecting it in the step list, and click Add dataset to add another.

    Turning the toggle back off keeps only the first dataset, so the rest of the tile configuration may need adjusting.

  2. dataset1:
    1. Data Source: Select RollUp.
    2. Data Stream: Select KPI.
    3. Parameters > KPIs: Select the KPIs you published for your tiles.
  3. SQL > Query: Enter the query below, then click Execute.

    Queries run using DuckDB, which is PostgreSQL-compatible. Table and column names containing spaces or mixed case must be enclosed in double quotes.

    1. This example extracts the current deployment success rate, change failure rate, and unresolved critical issue count, normalizes each onto a common 0-1 risk scale, before finally combining them into a weighted 0-100 risk index.
    2. WITH kpi_values AS (
        SELECT
          MAX(CASE 
                WHEN LOWER("Name") LIKE '%deployment success rate%' 
                THEN "value" 
              END) AS deploy_success_pct,
      
          MAX(CASE 
                WHEN LOWER("Name") LIKE '%change failure rate%' 
                THEN "value" 
              END) AS change_failure_pct,
      
          MAX(CASE 
                WHEN LOWER("Name") LIKE '%unresolved critical%' 
                THEN "value" 
              END) AS unresolved_critical_count
      
        FROM dataset1
      )
      
      SELECT
        ROUND(100 * (
          0.40 * LEAST(GREATEST((95 - deploy_success_pct) / 15, 0), 1) +
          0.35 * LEAST(GREATEST((change_failure_pct - 5) / 25, 0), 1) +
          0.25 * LEAST(GREATEST(unresolved_critical_count / 10, 0), 1)
        ), 0) AS risk_index
      FROM kpi_values;
  4. Columns: Ensure Risk Index has a Type of Number and has Decimal Places set to 0.

Adding a monitor

By applying thresholds to the Risk Index, you define what “safe to deploy,” “proceed with caution,” and “pause and reassess” mean in your own environment.

This transforms the tile from a passive score into an operational control, giving you a clear signal when additional investigation or rollback planning may be required before pushing further changes.

Configure the following on the Monitoring tab:

  1. Monitoring: Enable the toggle.
  2. Type: Select Threshold.

  1. Value: Select Top.
  2. Column: Select Risk Index.
  3. Conditions:
    1. Error: Enable the toggle, then configure as Greater than, and supply an appropriate value. For example, 65. This represents a high-risk state where teams should pause further releases and reassess.
    2. Warning: Enable the toggle, then configure as Greater than, and supply an appropriate value. For example 35. This signals elevated risk. Deployments may still proceed, but with increased scrutiny.
  4. Click Save.

Was this article helpful?


Have more questions or facing an issue?