# Proxies give way

> A rule that stands in for a property is a proxy.

Page: Methodology · Ship
Canonical: https://banes-lab.com/disciplined-methodology/ship#when-not

This section is stop 95 of 102 in the learning route. Previous: [45 - The deploy is a file operation](https://banes-lab.com/disciplined-methodology/ship/the-deploy-is-a-file-operation.md). Next: [47 - The honest gaps](https://banes-lab.com/disciplined-methodology/ship/the-honest-gaps.md). It builds on [30 - One correct answer](https://banes-lab.com/disciplined-methodology/verify/one-correct-answer.md).

A rule that stands in for a property is a proxy. A proxy is easy to state and easy to enforce for its own sake, and it ends up guarding the wrong thing; the ontology's names for the habit are [pattern cargo cult](https://banes-lab.com/records/arch/pattern-cargo-cult.md) and [golden hammer](https://banes-lab.com/records/arch/golden-hammer.md). Two proxies come up often enough to name here, and [D1·a two proxies](https://banes-lab.com/disciplined-methodology/ship#when-not-panel-a) shows each one with the property it stands for and what holds that property instead. Two others are retired elsewhere in the method: a fixed line count repeated in every document is retired in [one home](https://banes-lab.com/disciplined-methodology/build/one-home.md), and a voice the model keeps up all session is retired in [a seat is a contract](https://banes-lab.com/disciplined-methodology/start/a-seat-is-a-contract.md).

### The property behind the rule

A rule that outlives its reason gets enforced for its own sake. The team argues about whether a file may have one more line, while the module it lives in has no boundary at all. A proxy is easier to state than the property, so it gets stated first and then outlives its reason.

For this reason a rule that stands in for a property gives way once the property has a check. The property is checked directly and the proxy is let go, rather than the rule being kept beside the check. In practice, the question for every rule is what property it protects, and that property is named.

To check this, stop enforcing one rule for a cycle. If the property it stood for still holds, the rule was the proxy.

D1·a two proxies

```mermaid
flowchart TB
subgraph proxies["The proxy rule"]
r1["Benchmark everything before any application logic"]
r2["Synchronous over asynchronous, always"]
end
subgraph properties["The property it stands for"]
p1["A measurement precedes an optimisation"]
p2["One correct answer exists"]
end
subgraph holds["What holds the property"]
h1["Measure a hot path when you have one, never as a rite"]
h2["Asynchronous by necessity, still one correct answer"]
end
r1 --> p1 --> h1
r2 --> p2 --> h2
```

## Links to

- [Pattern Cargo Cult](https://banes-lab.com/records/arch/pattern-cargo-cult.md)
- [Golden Hammer](https://banes-lab.com/records/arch/golden-hammer.md)
- [One home](https://banes-lab.com/disciplined-methodology/build/one-home.md)
- [A seat is a contract](https://banes-lab.com/disciplined-methodology/start/a-seat-is-a-contract.md)
