На своем опыте скажу, что даже небольшую программу на заказ трудно написать без ТЗ так, что бы она понравилась заказчику с первого раза, без переделок и доделок. А в случае с крупными программами, ситуация, когда заказчик упустил описание какой либо детали, почти обязательно выльется в то, что уже в почти готовом продукте придется менять какой то базовый функционал, а то и архитектуру приложения. Страдают оба - и заказчик, ему приходится ждать, и исполнитель, ему приходится делать двойную работу.
Имею большой опыт общения с заказчиками, у которых вместо технического задания - просто идея, концепция будущей программы. Задавая много вопросов, предлагая различные пути реализации, показывая примеры скринов и наброски будущего интерфейса, прихожу к пониманию, что же в итоге хочет видеть заказчик. Судя по отзывам у меня на странице - у меня это не плохо получается.
В итоге мы получаем техническое задание на разработку, по которому можно начинать работать. Причем, не обязательно что разработчиком Вы выбирали именно меня - техническое задание поймет любой другой специалист, которому приходилось заниматься разработкой ПО.