---
id: "shared-dependency-without-redundancy"
type: "rule"
severity: "error"
url: "https://localhost:3000/catalogue/rules/shared-dependency-without-redundancy"
---

# Shared dependency without redundancy

The design requires redundant discovery, but a DNS or coordination service has a single provider or is not replicated.

| | |
|---|---|
| Severity | error |
| Selects | every node of kind dns or coordination-service |
| Components in scope | 52 |

## Why

The design requires redundant discovery, but this DNS or coordination service, which everything depends on, runs on a single provider or a single replica. Its failure is the whole system's failure.

## What it checks

It looks at every node of kind dns or coordination-service, and fires when:

- all of these hold:
  - the design requirement `availability.discoveryRedundant` is true
  - any of these hold:
    - the node's `redundantProviders` is false
    - the node's `replicated` is false

Message template:

```
Shared dependency '{{node.id}}' is not redundant, but the design requires redundant discovery.
```

## Applies to

- [Coordination service](https://localhost:3000/catalogue/kinds/coordination-service.md) `coordination-service`
- [DNS](https://localhost:3000/catalogue/kinds/dns.md) `dns`

52 catalogue components fall under it.

## Tripped by

Reference designs whose broken twin names this rule in its header:

- [booking-search](https://localhost:3000/d/zeema/booking-search)
- [cloudflare-edge](https://localhost:3000/d/zeema/cloudflare-edge)
- [distributed-message-queue](https://localhost:3000/d/zeema/distributed-message-queue)
- [github-mysql](https://localhost:3000/d/zeema/github-mysql)
- [linkedin-kafka](https://localhost:3000/d/zeema/linkedin-kafka)
- [monzo-platform](https://localhost:3000/d/zeema/monzo-platform)
- [nearby-friends](https://localhost:3000/d/zeema/nearby-friends)
- [netflix-streaming](https://localhost:3000/d/zeema/netflix-streaming)
- [object-storage](https://localhost:3000/d/zeema/object-storage)
- [robinhood-trading](https://localhost:3000/d/zeema/robinhood-trading)
- [shopify-flash-sale](https://localhost:3000/d/zeema/shopify-flash-sale)
- [spotify-playback](https://localhost:3000/d/zeema/spotify-playback)
- [stack-overflow](https://localhost:3000/d/zeema/stack-overflow)
- [stripe-payments](https://localhost:3000/d/zeema/stripe-payments)
- [tinder-geo](https://localhost:3000/d/zeema/tinder-geo)
- [unique-id-generator](https://localhost:3000/d/zeema/unique-id-generator)
- [zoom-video](https://localhost:3000/d/zeema/zoom-video)

## Source (`rule` YAML, verbatim)

```yaml
# yaml-language-server: $schema=../schema/rule.schema.json
# The design requires redundant discovery, but a DNS or coordination service that every
# component depends on has a single provider or a single replica.
# Tripped by: designs/object-storage.broken.yaml
schemaVersion: "1"
type: "rule"
id: "shared-dependency-without-redundancy"
severity: "error"
select:
  node:
    kind: ["dns", "coordination-service"]
when:
  all:
    - requirement: "availability.discoveryRedundant"
      equals: true
    - any:
        - prop: "redundantProviders"
          equals: false
        - prop: "replicated"
          equals: false
message: "Shared dependency '{{node.id}}' is not redundant, but the design requires redundant discovery."
```

Human page: https://localhost:3000/catalogue/rules/shared-dependency-without-redundancy
