А мне кажется, это философский вопрос, каждый отвечает на него по-своему.
Кто мало в нормальных условиях программировал, напишет общий код. Те же, кого нелёгкая погрузила в чан с внезапно меняющимися требованиями, горящими сроками и хроническим непониманием задачи, уже пишут только то, что надо.
Написал один раз обобщённый код, написал второй раз, третий. Следующее изменение вообще никак не затронуло предыдущие. Оказалось, что ты сделал обобщённый код в той плоскости, в которой будет существовать только этот конкретный случай, но изменения пришли в другие измерения, а там у тебя дублирование и свичи. Переписываешь, добавляешь новую плоскость в пространство универсального кода, но оказывается, что это не плоскость, а просто какая-то парабола, которая лежит в этой плоскости. Потом понимаешь, что каждый раз пишешь новый конкретный случай обобщённого кода и либо переползаешь в более предсказуемую предметную область, либо пишешь каждый раз новый конкретный случай конкретного кода. А новый программист обнаруживает, что один твой обобщённый код не протестирован и годится только для пары случаев, другой настолько обобщённый, что уже никто не помнит, как его запустить. Новый программист удаляет твой красивый обобщённый код и пишет свой тупой и конкретный. Ты сидишь и рожаешь свои сто строк по-твоему универсального кода, а он пишет десять строк своего говнокода. Ты обобщаешь, а он вставляет комментарии и пишет новый говнокод. Остаёшься в итоге со взволнованным чувством прекрасного, а он - с деньгами. Он покупает себе скрипку, о которой всегда мечтал.
Проекты, которым вы отдавали силы, загибаются одновременно. И твои 100К строк обобщённого кода, и его 10К говнокода после пары лет правок уже никуда не годятся. Ты спрашиваешь его, как он жил. Он отвечает, что решал задачу. А ты? А ты только ждёшь её и готовишься. Ждёшь свой идеальный день, когда новое требование войдёт в рамки твоего идеального обобщённого кода.
(c) http://govnokod.ru/19503#comment313657