Executando verificação de segurança...
2

Ainda acho que SSR tradicional faz muito sentido. Aliás, faz mais sentido na maioria dos casos.
Com ele, o desenvolvimento é mais ágil: um repo, um build, um deploy. Menos npm e menos dependência de terceiros = menor superfície de ataque e menos CVEs.
A equipe pode ser menor e mais generalista, o que reduz custo e complexidade.

Em performance, SSR aguenta bem com cache, CDN e otimização de banco.
E se o projeto crescer a ponto de precisar de recursos mais avançados (tempo real, offline, UI pesada), é porque ele já dá retorno financeiro e pode bancar uma equipe mais especializada.

Outro ponto que já sofri inúmeras vezes com SPAs, é a regra de negócio ser espalhada pelo front e no back. Um SSR tradicional pode evita duplicar regras em dois lugares diferentes.

SPA faz mais sentido (para mim) quando há interação tipo editores complexos, colaboração em tempo real, ou uso offline.
Pra maioria dos sistemas, SSR já entrega uma UX muito boa. E convenhamos, 95% dos sistemas desenvolvidos no mundo são de pequeno a médio porte e que foram criado por 4, 3 ou até 1 dev.

E hoje em dia, os frameworks já estão bem maduros e trazendo soluções robustas para sanar os gaps dos SSRs. Trabalho com o Laravel e em conjunto com Livewire, Alpine, Inertia ou HTMX e tá sensacional.

Carregando publicação patrocinada...
1

Eu concordo plenamente com isso.

Eu já utilizei React e NextJS para criar alguns WebApps ao mesmo tempo que também tinha que desenvolver o backend com NodeJS, Python ou PHP.

Depois de fazer uma análise profunda, não vi a menor necessidade de construir aplicações com o frontend desacoplado do backend, uma vez que criava as soluções na maioria das vezes sozinho, não era um projeto que iria ter uma alta carga de requisição...

Hoje estou usando uma única Stack (Django completo no backend e no frontend com Django template) estou integrando algumas tecnologias como o AlpineJS e outras libs para dar o mínimo de dinamismo as UI.

Percebo que a minha produtividade aumentou muito, diminui a complexidade do ambiente de desenvolvimento, e o debug do Django integra tanto o frontend quanto o backend.

Claro que sim existirá casos onde o backend será criado para prover endpoint para "N", aplicações, nesse caso uso o Django Rest Framework.

1

Se for ver por esse lado, um low code com uma IA resolve ainda melhor, não precisa nem de programador, nem de modelagem de banco de dados e 1 clique tá publicado. Existe um motivo pelo qual empresas grandes adotam certos padrões e pode ter certeza que não é pelo gosto pessoal do dev. Para as outras, até um wordpress bem configuradinho resolve. Tornar seu trabalho mais fácil não é uma métrica de qualidade, depois a empresa cresce e começa a jornada para refazer o sistema que só o cara que desenvolveu entende o código e os inúmeros puxadinhos e padrões inventados.

1

Tem de tomar cuidado com esses programadores 20 anos mais de carreira kkkkk.
Eu tenho 30 anos de carreira como programador e consigo entender que depende muito de varios fatores para que uma estratégia como SSR, SPA ou outras seja adotada se nao tomar cuidado com esse pessoal daq a pouco vcs vao estar programando em BASIC com MSDOS de novo hahahahah. Sucesso a todos.

0
  • "o desenvolvimento é mais ágil: um repo, um build, um deploy." Não entendi a lógica de como ter um build e um deploy deixa o desenvolvimento mais ágil. Não é como se em um sistema com back e front separados toda atualização em um implicasse em atualização no outro (exceto especificamente para mudanças nos acordos de API). Na verdade, como eu disse no post, nestes cenários, ter duas pipes separadas que possam rodar em paralelo faz o deploy mais rápido pois cada pipe executa apenas em cima do código que deve assegurar a qualidade. Em um mono repo, uma mudança na camada de view vai triggar uma pipe que vai analisar (SAST, DAST, testes, etc) ela e todo o resto do sistema desnecessariamente, consumindo mais tempo e dinheiro.
  • "Menos npm e menos dependência de terceiros = menor superfície de ataque e menos CVEs." De acordo. Entretanto, fico pensando em quão grande realmente seria essa diferença. Um projeto Angular, por exemplo, em 90% dos casos vai necessitar apenas de uma lib de UI além dele próprio. Ter um mar de deps de terceiros é algo característico do React.
  • "A equipe pode ser menor e mais generalista, o que reduz custo e complexidade." De acordo. Porém, isso não é válido apenas para monorepos SSR. Mesmo que os backenders de plantão torçam o nariz pra essa realidade, muitos projetos hoje nascem tendo o front/UX como centro do produto e necessitam de apenas um CRUD básico, então ao invés de terem um time de backend eles simplesmente plugam o firebase e supabase pra ter toda API pronta. Ou seja, esse mesmo argumento hoje já vale também a favor do SPA sem um repo pra backend.
  • "SSR aguenta bem com cache, CDN e otimização de banco." As 3 práticas são válidas pra qualquer sistema web e beneficiam igualmente um SPA. Se anular o efeito destes 3 e isolar apenas o comportamente específico de SPA vs SSR, o SSR ainda vai ter mais latência para servir conteúdo, já que o SPA já tem tudo carregado localmente e busca apenas informações de forma granular (ainda mais granular se estivermos considerando GraphQL).
  • "SSR tradicional pode evitar duplicar regras em dois lugares diferentes." De acordo. Existem casos específicos onde vejo vantagem nisso, mas no geral é um impecilho, de fato.

Enfim, meu ponto todo no post foi tentar mostrar duas coisas:

  1. É errado dizer que monorepos SSR satisfazem as necessidades de todos projetos modernos;
  2. Dizer que um projeto é possível de ser realizado em monorepo SSR é diferente de dizer que ele vai ser melhor por isso.
1

Sobre o deploy, quando digo velocidade de desenvolvimento, estou falando sobre a velocidade de entrega e não do tempo do deploy. Há casos de que verifico a API e ela está ok e o front está com erro de type no build, ou a API não passou nos testes - Preciso retornar a tesk pro dev para que ele ajuste.

Gosto de alguns pontos de vista que você expõe, porém, nos projetos em que eu participai e participo como Tech Lead tenho mais tração e validação rápida nos projetos com stacks monorepo SSR. Pode ser uma particularidade das skills da minha equipe maaaaaas, olhando para o mercado, em que temos que desenvolver, validar produto, em pouquíssimo tempo, monorepo SSR é mais vantajoso.

E na real, RARAMENTE um projeto nasce com necessidades robustas no UI. RARAMENTE um projeto já nasce com a nescessidade de integração de APIs com várias interfaces (Web, App, Desktop e outros).

Não acredito que o SPA é lento, ele tem a possibilidade de entregar uma melhor usabilidade, bate menos em rotas como o "/me" tem mais versatilidade. Mas como falei, projetos de empresas pequenas e médias são CRUDs em sua grande maioria, e pra mim, nesse cenário um framework backend já brilha.