Как эффективно работать с программистом?
Программист — это исполнитель прежде всего. В этой роли его и используйте. А нагружая его «дедлайнами» и прочей управленческой чепухой вы заставляете его делать несвойственную ему работу, фактически перекладывая на него свою ответственность.

Хотите выполнения в сроки и в должном качестве? Разбивайте задачу на возможно более мелкие итерации таким образом, чтобы результаты каждой итерации вы могли бы реально проверить и ставьте точные технические задания на каждую из них. Так и вы быстро сможете понять, насколько разработчик справляется с делом, и по отношению к разработчику поступите честнее. В остальном придётся полагаться на разработчика.

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

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