Если у клиента пылает синим племенем уже все что только можно, тогда логика пишется в шаблоне, редактируются файлы ядра CMS-ки, втыкается какой-нибудь комбайн ради 2-3 фишек и т.д. Главное тут скорость, клиенту нужно чтобы что-то работало на утро. Изменять или поддерживать такое ПО слишком дорого и геморно, поэтому при необходимости что-то допилить или справить - эта версия выкидается.
Более правильный подход - создавать модули и/или компоненты, которые добавляют на сайт какую-то конкретную фишку. Основное правило: одна фишка = 1 плагин. Посмотри в Википедии про GRASP и SOLID, я всегда исхожу из них про проектировании чего-то более менее серьезного и долго живущего. Это подход применяется, если сайт клиента будет долго жить либо если у сайта будет большое количество инсталяций на разных машинах под разным окружением, с не всегда всеми установленными модулями(имею ввиду модули PHP, например, libxml) т.д.
По своему опыту могу сказать, что обычно всегда идет что-то среднее, причем в зависимости от квалификации разработчика больше смещено в сторону п.1 или п.2 при одинаковом времени.