Todo desenvolvedor já duplicou códigos, na verdade todos nós fazemos isso não importa o nível de experiência ou senioridade.
Seja por falta de tempo, pura preguiça ou até mesmo desatenção, o fato é que duplicar código é muito comum.
Pesquisando sobre “Como escrever um livro” eu me deparei com a seguinte dica: “Escreva sem pensar muito e faça a revisão somente depois que terminar de escrever” e acredito que programar é exatamente isso, quando estamos programando nossa mente está com o foco voltado para a solução do problema.
Design Pattern? Clean Code? Algoritmo? Pura balela, sem cérebro faz questão de esquecer isso, mas o problema é exatamente o epois de “Resolvi o problema. Acabei.”, se você não voltar pra revisar e refatorar o código logo vai deixar ali um legado de código duplicado e sabe mais que armadilhas.
Quem já não lidou com a seguinte situação ao fazer uma refatoração:
/src/index.js
function isEmpty(args){...}
/src/components/list-items/item.js
function isArrayEmpty(args){...}
/src/utils
function isEmptyArray(args){...}
/src/services/api/get-items.js
function isEmptyInArray(args){...}
Oh my god. Is so duplicated functions.
...
Pode parecer pouca coisa mas em um projeto onde cada função dessa está espalhada em mais de 50 arquivos não é nada fácil de se refatorar.
Você pode até estar pensando: “Ah mas eu posso simplesmente usar atalhos para fazer substituição em massa”. Certamente, mas isso só vai funcionar caso as funções sejam idênticas em todos os aspectos menos no nome. E se os argumentos forem diferentes? E se tiverem condicionantes diferentes? E se estiverem em arquivos diferentes, logo precisa mudar também os imports? Nunca subestime uma refatoração, você pode se surpreender com uma teia duplicidades e sabe-se lá o que mais pode encontrar.
É claro que com o tempo vai ficar tão natural que você vai conseguir desenvolver ao mesmo tempo com as boas práticas, mas até lá, siga esse caminho: Desenvolva para resolver o problema e depois que resolveu volte para refatorar e remover as duplicidades.