Change Value to Reference

Removes smells
Symptom

Duplicate copies of a logically-single entity scattered across the codebase; the agent updating the entity must find and update every copy consistently.

Goal

The entity exists once; the agent reasons about one canonical object referenced everywhere.

Before the refactoring

// every order carries its own Customer copy
orders.forEach(o => o.customer = { name: 'Acme' });

After the refactoring

const acme = customerRepository.find('Acme');
orders.forEach(o => o.customer = acme);
Example source: Illustrative example written for this site, not a quotation from any source.
Pressure

The agent must coordinate updates across every copy; identity becomes ambiguous and the agent can't tell which copy is canonical.

Tradeoff

Sharing references introduces lifetime and visibility ambiguities (who owns this? when does it get freed?) the agent must reason about; the original value-copies sidestepped this.

Relief

Updates land in one place; storage shrinks; the agent reasons about the entity as a single referent with meaningful identity.

Trap

Sharing references without explicit ownership creates lifetime ambiguities the agent must model — the cure introduces a different category of bug than the original duplication.