Symptom

The agent finds constructors used directly where construction needs validation, subclass selection, or caching — none of which constructors can express.

Goal

Construction goes through a named factory the agent can extend with validation, polymorphism, or caching as one location.

Before the refactoring

const employee = new Employee(name, 'engineer', salary);

After the refactoring

function createEngineer(name, salary) {
return new Employee(name, 'engineer', salary);
}
const employee = createEngineer(name, salary);
Example source: Illustrative example written for this site, not a quotation from any source.
Pressure

The agent's reasoning about construction must consider pre-construction logic scattered at every call site; constructors hide the capability for the patterns the code actually needs.

Tradeoff

The factory hides the actual class from callers; the agent must ensure the factory's name still expresses the produced shape clearly or call sites become opaque.

Relief

The agent extends construction in one place; consumers don't depend on which concrete class they're getting.

Trap

Wrapping every constructor in a factory adds an indirection layer the agent must navigate without buying any new construction capability.