С опытом в голове появляется мысленный компилятор, поэтому достаточно просто тз, что бы уже понимать архитектуру.
Также с опытом начинаешь непроизвольно применять все эти эфемерные паттерны, tdd, контракты, протоколы... Иными словами начинаешь двигаться от интерфейсов к независимой реализации сверху вниз.
Блок схемы, uml диаграммы и прочие бесполезные вещи использую регулярно для отчетов начальству. Разумеется, отчеты никто не читает, но схемы создают иллюзию безопасности и документации.