Ruby practice of opening and modifying existing classes or modules (including private methods) from consumer code. Historically the preferred customization mechanism for Spree users — the framework essentially told people 'it's Rails, monkey-patch everything'. Rafael Zamaris's wroclove.rb 2023 talk analyzes the long-term maintenance costs: patching private methods couples users to upstream internals, makes refactoring without breakage nearly impossible, and silently breaks when upstream code changes. Spree moved away from this pattern by extracting core procedures into service objects with dependency injection so users can swap implementations without patching.