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