Блин я вообще тоже ничего фундаментального не читал если честно. Есть game engine architecture, есть game programming patterns. Есть материалы по реализации рендер графа, аллокаторов, entity component system, системы событий. Как минимум это знать надо
Пока мое мнение таково, что нужно строить архитектуру так, чтобы она была расширяемой и как можно активнее бороться с Зависимостями между элементами (чтобы добавление новых затрагивало изменение как можно меньшего количества частей системы)
Тут кст есть обратная сторона, не знаю насколько часто такое встречается, но можно как бы потерять связность(а ещё бывают проблемы с количеством зависимостей, но тут я не тыкал много), ещё и получить проблемы с перфом в добавок. Наверное это больше проблема плохих абстракций, но я сталкивался с кодовой базой в которой буквально почти каждый метод мог быть отдельным интерфейсом, в итоге код очень неприятно читать и ещё неприятнее писать.