Кому как, основным преимуществом, но в тоже время проблемой фреймворков является их универсальность, как следствие куча лишних абстракций, которые не бесплатны + усложнённый код (в какой-то момент появится необходимость что-то поправить внутри, и без бутылки и такой-то матери это будет не столь тривиально). Более того, общие решения, как правило, в какой-то момент не покрывают моего уникального случая или же выясняется что то же самое можно было бы сделать _проще_ и получить более эффективное решение, но в ущерб универсальности.
И где-то здесь мы придём к пониманию того, что универсальность нужна и полезна в одном случае из 10 (а то и 100), а в остальных она избыточна и стоит денег (железа, человеческих усилий, etc). В случае 1+ серверов - эту проблему можно заткнуть железом. В случае когда кол-во серверов идёт на сотни и более приходится бороться за миллисекунды и лишние вызовы. Привет переписывание большей части условного симфони/ларавеля. Поэтому, как написал выше клин, однозначного ответа тут нет, но выбирая готовый фреймворк, нужно быть готовым к тому, что вместе с ростом проекта придётся переписывать стандартные решения на специализированные, заточенные только под ваши задачи и данные, без оверхеда абстракций созданных ради себя самих (выкинуть орм, и пр)