Ótimo post, porém, se posso acrescentar algo, diria que as pessoas deveriam tomar cuidado com DRY, porque? porque ele molda o pensamento das pessoas que todo código duplicado é ruim e deve ser abstraido, sendo que a verdade é que nós devemos primeiro pensar se aquela abstração faz sentido, se ela cobre o caso certinho, porque se não, abstraimos o código duplicado e a medida que nossa base de código cresce, precisamos atender mais um caso, e aí? você cria mais um parametro para atender esse caso? e se surgirem mais? acaba que uma abstração pode ser muito perigosa no sentido de gerar mais complexidade no código, pode ser que sua função no futuro vire algo como um Frankenstein e outra pessoa que for ler mais a frente não saiba nem qual o próposito daquela função ou o que ela resolve de fato.
Por isso é comumente difundido que "Um código duplicado custa mais barato que uma abstração mal feita".
Isso porque uma abstração mal feita gera uma complexidade muito MAIOR do que um código duplicado.
Lembrando que não estou aqui dizendo pra não fazer hein, eu mesmo faço muitas, muitas mesmo, acredite. Porém eu só estou dizendo para pensar certinho em cada caso, em cada contexto.
Deixo aqui um artigo em inglês(Desculpe, não consegui achar um artigo relacionado em PT-BR) como recomendação de leitura sobre este caso, abraços.
https://alexkondov.com/the-cost-of-wrong-abstractions/