Внесу свою лепту (или теперь надо говорить евроцент

):
- общение между программистом и пользователями считаю полезным, т.к. на этапах подготовки задания и его разработки очень часто всплывают подробности, которые по простоте душевной пользователь утаил от консультанта;
- основную работу, если это не мелочовка, должен проделать консультант или программист, очень хорошо знающий бизнес-процессы и функционал. Ибо хороший программист, как бог, может сделать почти все, забывая в запале продумать, а как аукнется новая функциональность на работе смежных модулей и подразделений не этого пользователя.
Хорошая связка: программист-оптимист, генерящий идеи после общения с пользователем, и консультант-оптимистопессимист, который умеет генерить идеи и продумывать варианты "а что если" и "почему нельзя"