Here is an observation about writing software that may be so general as to be incomprehensible.
When you go from having one of a thing to having two of a thing, it is easier and possibly even more readable to just duplicate the thing instead of creating a generalized system that can handle N things.
Once you get to having three of a thing, it is better in all ways to simply have a generalized system that can handle N things.
But you don't *do* this when N reaches 3. You wait until N reaches 4
@mcc
Knowing *what* to generalize is an art.
If you generalize the wrong things too soon, you potentially make the generalizations that matter that much harder.
I won't go quite so far as to say, "premature generalization is the root of all evil," but it's up there.