I can't disagree more. DRY forces you to create pure reusable code, and split your code into small pieces. When I read such code I need to understand just a few pieces.
If you make everything as generic and reusable as possible from the beginning, you'll end up with messy code that has way too much options to set for every simple operation.
Increasing the distance between inputs and outputs increases complexity.
Reusable code isn't all that reausable when nobody understands it or things are so fragmented people can't figure out how to operate the code base.
This isn't a rule. It's a moderation thing.