“prefer duplication over the wrong abstraction”
- Programmer A sees duplication.
- Programmer A extracts duplication and gives it a name.This creates a new abstraction. It could be a new method, or perhaps even a new class.
Programmer A replaces the duplication with the new abstraction.
Ah, the code is perfect. Programmer A trots happily away.
- Time passes.
A new requirement appears for which the current abstraction is almost perfect.
- Programmer B gets tasked to implement this requirement.Programmer B feels honor-bound to retain the existing abstraction, but since isn’t exactly the same for every case, they alter the code to take a parameter, and then add logic to conditionally do the right thing based on the value of that parameter.
What was once a universal abstraction now behaves differently for different cases.
- Another new requirement arrives.
Another additional parameter.
Another new conditional.
Loop until code becomes incomprehensible.
- You appear in the story about here, and your life takes a dramatic turn for the worse.