Как-то вы отдельно записываете логику программы, блок схема может, или в виде теста, что б через некоторое продолжительное время вспомнить что да как и почему именно так, что б не запутаться и в случаи ошибки быстрее найти причину?
примеру из вашей практики буду благодарен
Пока рисуешь блок схему, сразу вылезает много подводных камней, которые на бумаге сразу и решаются.
Это вопрос прямо отсылающий к архитектуре.
Универсальных решений здесь нет.
Но имеются относительно стандартные подходы.
Чтобы грамотно декомпозировать программу нужно иметь представление как минимум о базовых паттернах.
На эту тему рекомендую https://www.ozon.ru/context/detail/id/2457392/
Определяете какие сущности должны быть представлены, как они будут взаимодействовать(интерфейсы), используете паттерны и будет вам счастье.
Но должен предупредить, что прочитать книгу, понять и освоить — это 3 разные вещи.
Между которыми может пройти не один год.
Вспоминать устройство программы гораздо проще, разбирая стандартные конструкции(шаблоны).
Документация и комментарии сами собой разумеются.
Каждый файл отвечает за свою задачу.