Если заказчик компетентный и уже знает, что такое разработка и четко может перечислить требования, то техническое задание составляет он, но при нашем участии. Это не значит, что мы стоим над душой, пока продакт-оунер сформирует документ. Тут идет речь о командной работе. Мы объясняем, что и зачем важно сделать, показываем примеры реализации, обсуждаем их с клиентом.
Спасибо, описано доступным языком. Хотелось бы уточнить, является ли ТЗ для вас единственным проектным документом или уточняющие спецификации в процессе проектирования все же тоже готовите? У нас, как правило, ТЗ приходит от Заказчика и очень верхнеуровневое. Если мы понимаем, что нужно более подробное ТЗ, то стараемся заключить отдельный договор на написание, т.к. с данным ТЗ заказчик может впоследствии обратиться в другую компанию и трудозатраты на "помощь" хотелось бы возместить. При этом, в любом случае, в ТЗ все детали невозможно учесть, поэтому уже на проекте стараемся писать более подробные проектные решения/спецификации.
У нас основной упор на долгосрочное сотрудничество и большие проекты, но да мы используем дополнительную спецификацию, которая применима на небольшие проекты.
Например у нас ведётся расширенный бэклог с небольшими кейсами и приоритетами. Благодаря этому документу формируется спецификация работ на месяц, которая идёт в приложение к договору.
Помимо документации перед началом работ, активно используем выгрузки ответов из таск менеджеров, на ретро срезаем некоторые часы, которые по каким то причинам были потрачены зря, чтобы клиент платил за «эффективно потраченное время».
Четкое и понятное ТЗ, это идеализированная модель взаимодействия с заказчиками. Для того, чтобы написать хорошее техническое задание нужно хотя бы поверхностное понимание в этой области.
Часто на практике техническое задание не описывает все детали проекта, если даже оно объемное. Разработчик может добиваться от заказчика более конкретной информации, задавая уточняющие вопросы. Но это тоже полностью не спасает ситуацию, потому что разработчик не сможет угадать все требования заказчика к функционалу.
Если ТЗ совсем непонятное, тогда заказчик должен быть готов к срыву сроков и дополнительной оплате.
Думаю, что всегда возникают дополнительные требования во время разработки, просто важно их количество. Поэтому подрядчик всегда должен рассчитывать бюджет и сроки учитывая все риски.