If the flexibility was desirable then yes but it by definition makes the code do more then it did before and is therefore harder to <i>really</i> understand.<p>In this concrete case, these many functions are now spread over the entire codebase (spanning many repos). In many classes and inheritance trees and driven by a ton of configuration so there are now many many more possibilities. Here is one implementation <a href="https:&#x2F;&#x2F;github.com&#x2F;groupserver&#x2F;gs.group.type.discussion&#x2F;blob&#x2F;master&#x2F;gs&#x2F;group&#x2F;type&#x2F;discussion&#x2F;requiredpropertiescanpostrule.py#L95-L116" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;groupserver&#x2F;gs.group.type.discussion&#x2F;blob...</a> which i don&#x27;t find very readable personally<p>Reading the README in the first repo I can now see the flexibility and coupling the rules more closely to their objects was a design goal. So in fairness the new code is doing a lot more then (what i imagine to be) old code to be doing. Also I now note this code is 3+ years old so the zope dependency (which i know nothing about) makes some more sense.