Первая сложная часть - это общение. Если вы используете традиционную предписывающую модель разработки, это означает, что ваши требования и спецификации документов являются правильными. И под правильным я подразумеваю, что и команда разработчиков, и заказчик согласны («Но я хотел функцию Y!»). Используя более гибкий подход (когда вы на самом деле не пишете формальные документы с требованиями), вы должны поддерживать постоянный контакт с клиентом и заинтересованными сторонами (маркетинг, менеджмент и т. Д.). Agile может сойти с рук, не имея огромных документов по требованию, постоянно находясь в постоянном общении.
После общения я бы сказал, что следующая сложная часть - это тестирование. Никто не любит писать тесты. Это скучно. Это повторное. Но это означает, что вы можете проводить автоматическое регрессионное тестирование всякий раз, когда код добавляется или изменяется в вашем проекте, И хорошие тестовые модули могут служить отличными документами API для других разработчиков в вашей команде (как работает метод X? Прочитайте тест).
После тестирования я бы сказал, что планирование будет следующим. Вы, возможно, не будете так подвержены этому, если вы не менеджер проекта, но придумать хороший график разработки, который имеет достаточно места для маневра (на случай, если что-то запаздывает и т. Д.), Может быть проблемой.