The Structural Prerequisite: FOSM via fosm-rails
Everything in this gem rests on one foundational constraint: FOSM (Finite Object State Machine) — the discipline of building business software as a finite set of objects, each governed by an explicit lifecycle of states, events, guards, and side effects.
Without FOSM, a codebase is an unbounded wilderness. "Add a feature" could mean anything — touch any file, introduce any abstraction, create any dependency. Estimation in that world is guesswork. Every software estimate in history that was wildly wrong was wrong because the change space was unbounded and unknowable.
FOSM changes this. When business software is modelled as a finite set of objects with explicit lifecycles, the universe of possible changes becomes enumerable. Every change to the system maps to one or more typed primitives: