Анализируя большую кодовую базу, мы сразу видим случаи, в которых следовало реиспользовать код. Но если вы только начинаете проект, случаи реиспользования кода не так очевидны — сложно предугадать, как будет эволюционировать тот или иной участок кода.
Дублировать код хорошо на начальном этапе, когда вы ещё не знаете, как в дальнейшем он будет развиваться. Подумать о реиспользовании можно будет в будущем, когда кодовая база достаточно разрастётся и устаканится.
На начальном этапе реиспользование усложняет дальнейшее изменение и переписывание кода. При реиспользовании участок кода выносится в модуль, используемый в разных частях программы. Изменение такого модуля требует проверки работоспособности всех зависящих от него частей программы. Дублирование позволяет свести количество внешних зависимостей к минимуму — участок кода используется непосредственно там, где он написан. Это позволяет переписывать этот участок и не бояться, что в другой части программы что-то сломается.
Итак, дублирование кода позволяет минимизировать количество зависимых от него участков приложения, а значит упростить его дальнейшую доработку. Из этого следует ещё одна рекомендация: дублируйте код, который в будущем с большой вероятностью будет меняться. Чем более код специфичен, с тем большей вероятностью он изменится в будущем. Например, бизнес-логика меняется гораздо чаще, чем низкоуровневая логика общения с сервером (стандарт HTTP обновляется раз в несколько лет).