Некоторые разработчики полностью проектируют свои проекты на UML, прежде чем приступать к написанию кода, а другие просто сразу же приступают к работе. Я видел хорошие проекты в обоих направлениях. Я думаю, что ключ в том, чтобы быть открытым для редизайна и рефакторинга на любой стадии разработки. Красиво спроектированный проект, задуманный в 300-страничном документе с требованиями и нарисованный стопкой диаграмм состояний и последовательностей, может быть полным мусором при кодировании.
Будьте готовы выбросить свою работу, когда это необходимо. Подготовьте тесты, чтобы доказать, что ваш дизайн после рефакторинга работает так же правильно после внесения изменений, как и раньше. Наличие тестов, которым вы доверяете, придаст вам смелости измениться.
Рекомендую посмотреть эти видео для лучшего погружения в вопрос: