So true. Too many developers suffer from the "premature generalization" syndrome. Rather, write stuff twice. Only when you find yourself writing it the third time, then consider if generalization is feasible. If you are psychic, you will recognize single responsibilities right away and you will know if the code you write will change for the same or for different reasons. The rest of us will more often than not have to recognize responsibilities and follow the S in SOLID a bit later.