Ну смотрите... Разработчик и пользователь зачастую говорят на разных языках, для пользователя выглядит как яблоко - для разработчика - как набор нано-частиц собранных в определенной последовательности.
Если простым языком - то чем менее детальное ТЗ - тем больше шансов встрять в ситуацию, когда разработчик будет говорить "это не входило в стоимость изначальных договоренностей" - и будет собственно прав на самом то деле, а вам будет казаться, что вас "нагревают". Не спорю, бывают и такие, кто нагреть заранее планируют, но такие не все...
Соответственно, чтобы разработчик мог хоть как-то ориентироваться в стоимости и объеме тех работ, которые ему предстоят - необходимо ТЗ.
Чем подробнее вы опишете ТЗ - тем меньше вероятность, что вы столкнетесь с какими-то трудностями и недоразумениями.
В части опенкарта тоже довольно всё просто на самом деле. Можно делать подходы итеративно:
1) выбираете шаблон и набор модулей, которые реализовывают функционал, который вы хотите видеть. Соответственно в ТЗ пишете - хочу, чтобы это было установлено. Разработчик говорит "ОК" и озвучивает ценник. Если всех устраивает - приступаете к работе.
2) После того как данная конкретная часть выполнена - ищете баги и собираете в ТЗ новые "хотелки" - согласовываете ценник с разработчиком и опять же если всех все устраивает - продолжаете работу уже по обновленному ТЗ.
3) и т.д.
Наверняка встает вопрос о том, типа почему если я как заказчик нашел баги, то почему разработчик не хочет чинить их бесплатно?! - Потому что модули это некое универсальное решение и всегда существует вероятность того, что можно поставить модуль, а работать он будет не всегда идеально и в первую очередь это связано с тем, что чем больше модулей наставлено - тем больше вероятность того, что они будут друг с другом конфликтовать. И это НЕ кривота рук разработчиков, а данность, потому что невозможно предугадать совокупное множество устанавливаемых модулей.
Как альтернативный вариант - писать все индивидуально под ваш сайт, но это в разы дороже и дольше.