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 I often get the abstraction slightly wrong if I don't wait for 4 so I can see what aspects vary.