Правильная архитектура - это высший пилотаж. К этом идут, и не все доходят.
Для начала советую взять на вооружение следующий принцип. Хоть какая-то архитектура начинает появляться, когда код разделяется на независимые блоки с неизменными хорошо описанными интерфейсами. Вот сидишь, пишешь программу абы как и тут понимаешь, что этот блок пишешь уже десятый раз - пора его выносить в отдельную функцию. Со временем такие куски с первого раза видишь и начнёшь обрастать своими библиотеками, строительный запас которых сделает твой код лаконичным и гибким.
Этого было бы достаточно, чтобы быть хорошим программистом в 20 веке. Увы, дальше придётся учиться:
1. "Чистая архитектура" Мартин
2. "Совершенный код" Макконнелл
3. Паттерны ООП
https://refactoring.guru/ru