The agent finds constructors used directly where construction needs validation, subclass selection, or caching — none of which constructors can express.
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);
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.
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.
The agent extends construction in one place; consumers don't depend on which concrete class they're getting.
Wrapping every constructor in a factory adds an indirection layer the agent must navigate without buying any new construction capability.