I find DRY often turns into an antipattern because decoupling is far more important than code reuse in practice. Having a function that supports many different code paths can make it very brittle because any changes to it need to consider all the possible use cases. However, if you have two separate functions that are similar, but can evolve independently then you don’t have that problem. As a rule, it’s better to duplicate code first, and then extract parts that turn out to be general purpose functionality once that’s identified through usage, and to put that code into libraries.
I remember 10 years or so ago working with a guy who was trying to sell me on the wonders of Eclipse. “It writes all this boilerplate for you!” I was more interested in writing in languages that were less shit and required less boilerplate.
It’s the new “promotion machine.” The first manager: “I saved this company x dollars using AI, promote me.” The new manager: “I increased productivity by x percent getting rid of AI, promote me.” Repeat.
“I fired hundreds of employees because a con artists sold me on this new technology, promote me.”