all problems in programming can be traced to "do not repeat yourself" tendency of programmers that want to standardize and unify all the things all the time. it makes sense from all angles. but in time, things start to diverge and become more unique and the unification will become an obstacle. nobody wants to fix one bug or make a universal change in 20 places, but in the long run, that's the best thing to do. repeat yourself should be the new mantra.