I think that if one was to see software development as an engineering discipline (which it is mostly) then there is a tendency to want to pass on good practice through the laying out of rules. I do agree however that quite often rules are probably not the best way of passing on knowledge. Perhaps when passing on knowledge a more scientific (rather than engineering) approach is required. For example, I have elucidated a number of generalisations from software developments (not Perl based). I haven’t presented these as rules. I first laid out a series of reasons for creating distinct modules and then a series of general aims and requirements to meet aims. No rules in sight. I think I had in mind what you wrote. I was concerned that people should produce software that was easily evolvable and to do that with rules felt too restrictive.