Many of us have been told the virtues of “Don’t Repeat Yourself” or DRY. Pause and consider: Is the duplication truly redundant or will the functionality need to evolve independently over time? Applying DRY principles too rigidly leads to premature abstractions that make future changes more complex than necessary. Think about how the functions’ purpose holds with time, not just about making the code shorter.

Source: Don’t DRY Your Code Prematurely