Архитектура выкристаллизовывается по ходу работы над проектом. Ошибки в архитектуре, допущенные на начальном этапе разработки, очень дороги для исправления в последствии, но жизнь такова, что наперед никогда не знаешь всей предметной области и задач.
На мой взгляд серебряную пулю по части архитектуры до сих пор не изобрели, поэтому тут кто во что горазд. На моем опыте относительно хорошая архитектура получается если переписать проект с нуля 3-4 раза самостоятельно, но такое редко возможно.
Так же спасает автоматизация и кодогенерация, но тут необходим опыт. Я с 2006 года до 2011 собрал много грабель как фуллстэк веб девелопер, с 2009 года присматривался к ряду фреймворков, не срослось - написал свой, с тех пор полет нормальный. Необходимые задачи он решает и по части архитектуры берет на себя примерно 80% нагрузки. За 5+ лет я его потихоньку допиливаю когда возникают новые ситуации.
Но это на бэкенде, а вот по части фронтенда полный ахтунг, да настолько, что пришлось снова перебирать доступные фреймворки. Остановился на реакте. Подумываю на бэкенде с пхп на ноду съехать, нужно будет переписать фреймворк, но там есть ряд сложностей, т.к. другие принципы работы приложения.
В заключение добавлю, что как только появляются принципиально новые задачи, отработанная и отлаженная архитектура, хорошо показавшая себя за годы эксплуатации, может оказаться совершенно непригодной и придется прикручивать костыли и думать. Очень много думать... Снова...