In my experience, bad copy pasted code results in an annoying afternoon of tech debt repayment and fixes. Badly abstracted code results in months of tech debt repayment.
Of course, the answer is “don’t make bad abstractions”, but we all know how that one goes with a team and changing product reqs.
If only that were the case on a project at work. The badly copy pasted code has diverged over the years so you have 10 different versions of the same looking code that individually have differing edge cases, half of them by mistake because they forgot about the other 9.
I would trade that for one piece of mediocre abstracted code any day.
Oh yeah and everything in the codebase is copy and pasted.
Of course, the answer is “don’t make bad abstractions”, but we all know how that one goes with a team and changing product reqs.