The distinction between project state and project memory is the part I find most useful here. A repository can tell an agent what the system looks like today, while the “why” explains why certain seemingly unnecessary constraints should not be removed.
The abandoned-change example also highlights an important retrieval problem. Storing the rationale is only half the solution; the agent needs a deterministic way to discover when that rationale is relevant. In production AI work at IT Path Solutions, I’d treat those entries almost like architectural constraints with searchable scope and provenance, rather than generic documentation.
There’s also an interesting failure mode here: a stale or incorrect “why” can actively mislead an agent. Versioning the rationale alongside the code and making it clear which assumptions caused the decision could make repo-native memory much safer to rely on during future refactors.
Exactly. I think “architectural constraints with searchable scope and provenance” is a very good way to describe it.
The goal is not to create another documentation bucket, but to make rationale part of the repository’s state: versioned, reviewable, and distributed with the code it explains.
And I completely agree about stale “why”. A wrong rationale can be worse than no rationale at all. That is why the assumptions and context behind a decision matter just as much as the decision itself - future agents need enough information to recognize when those assumptions no longer hold.
The retrieval side is equally important. If an agent has to remember to manually search the memory, the system has already failed. Discovery has to become part of the agent workflow itself.
That is basically the problem I’m exploring with Keep the Why: not just storing the “why”, but making it reliably available when the next agent actually needs it.
The distinction between project state and project memory is the part I find most useful here. A repository can tell an agent what the system looks like today, while the “why” explains why certain seemingly unnecessary constraints should not be removed.
The abandoned-change example also highlights an important retrieval problem. Storing the rationale is only half the solution; the agent needs a deterministic way to discover when that rationale is relevant. In production AI work at IT Path Solutions, I’d treat those entries almost like architectural constraints with searchable scope and provenance, rather than generic documentation.
There’s also an interesting failure mode here: a stale or incorrect “why” can actively mislead an agent. Versioning the rationale alongside the code and making it clear which assumptions caused the decision could make repo-native memory much safer to rely on during future refactors.