---
title: "Compare customer service levels with what · Agent Wranglers"
url: https://agentwranglers.se/playbook/due-diligence/operations-and-growth/customer-sla-review
id: TDD-22
level: Recommended
updated: 2026-10-27
build: a2a6bdfed830
tokens: 904
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Compare customer service levels with what the system delivers

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Operations and growth](https://agentwranglers.se/playbook/due-diligence/operations-and-growth.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers.md). Updated 2026-10-27.

- ID: TDD-22
- Level: Recommended
- Chapter: [Operations and growth](https://agentwranglers.se/playbook/due-diligence/operations-and-growth.md)
- Rule: List every service level promised in customer contracts, with its measure and the credits it owes. Compare each one with 12 months of measured availability, and add up the credits owed but not paid.
- Check: The report has one row per promise with contract, measure, promised value, measured value and credits owed. A promise whose measured value missed the target in any month of the last 12 has a finding with a severity.
- How: A large customer may hold a promise of 99.99% availability on a system that reached 99.5%. That gap is a debt the buyer inherits. Read the standard terms and every contract above a size the buyer sets, such as the top 20 by revenue. Note custom promises on support response, data residency and recovery time too. For each promise, take the measured value from [Read 12 months of incidents and measured availability](https://agentwranglers.se/playbook/due-diligence/operations-and-growth/incident-history.md). Credits should follow a measured indicator, as [Tie service credits to a measured indicator](https://agentwranglers.se/playbook/operations/service-levels/service-credits.md) says. A promise with no measurement behind it is a finding on its own.

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### Python example

```python
def missed_promises(promises: list[dict], measured: dict[str, list[float]]) -> list[dict]:
    return [
        {**promise, "months_missed": sum(value < promise["target"] for value in measured[promise["measure"]])}
        for promise in promises
        if any(value < promise["target"] for value in measured[promise["measure"]])
    ]
```

### JavaScript example

```js
function missedPromises(promises, measured) {
  return promises
    .map(promise => ({ ...promise, monthsMissed: measured[promise.measure].filter(value => value < promise.target).length }))
    .filter(promise => promise.monthsMissed > 0)
}
```

## Related rules

- TDD-21 [Read 12 months of incidents and measured availability](https://agentwranglers.se/playbook/due-diligence/operations-and-growth/incident-history.md) in Technical due diligence
- OPS-72 [Tie service credits to a measured indicator](https://agentwranglers.se/playbook/operations/service-levels/service-credits.md) in Operations and observability

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/due-diligence/operations-and-growth/customer-sla-review">Agent Wranglers technical due diligence playbook</a>`. In code you write, add a comment next to it with the same link.

- Previous: [Read 12 months of incidents and measured availability](https://agentwranglers.se/playbook/due-diligence/operations-and-growth/incident-history.md)
- [Operations and growth](https://agentwranglers.se/playbook/due-diligence/operations-and-growth.md)
