> When you've had to chase through a change in untold and actually unknown numbers of duplications of code in different permutations and fix them because they are all on fire simultaneously, you'd disagree too
Doesn't it mean that you are in a good place to start DRYing code? I mean, code was written in a way to avoid bad abstractions. You can't generalize on 1-2 samples, but now you have "unknown numbers" (more than two?), so you can start looking at it an see patterns. It means you can create a perfect abstraction. It is the basis of the WET (Write Everything Twice) principle.
It would be frustrating, and I mean really frustrating. People are easily generalize over two things but they struggle to generalize over three. Pick two random words and think of a common category they fall into. It is an easy task for 5 years old. Pick three random words and try to generalize them, you would have a very hard cognitive task.
This frustration stems from the inherent complexity of the task. It is not because people before you wrote duplicating code, it is because it is hard to generalize. People before you didn't do it being afraid of missing things and creating a bad abstraction, but you have hard data, you can create an abstraction without missing a thing.