Fazer um app é muito mais difícil hoje em dia do que antigamente... mas, será que é ruim?

Fazer um app é muito mais difícil hoje em dia do que antigamente... mas, será que é ruim?

Sim sim, precisamos de muitas coisas pra fazer um app hoje em dia, mas será que realmente isso é errado?

Acho que não sou o único que já escutou que fazer um app é muito mais difícil hoje em dia do que antigamente, já que, como dizem, era só abrir um index.html e um index.js e é isso aí. Mas, será mesmo que era tão mais fácil do que hoje em dia?

Ultimamente eu tenho pensado bastante nisso. Como sou tech lead, agora sinto que tenho a liberdade de decidir coisas que não só eu, mas como a minha equipe vai usar. Nunca tive medo de testar coisas, então estamos usando bastante coisas novas, como GraphQL, GraphQL Code Gen, tudo isso no NextJS, também vamos começar a usar GRPC com NestJS, e vamos fazer o NextJS falar com o NestJS via GRPC, então tem muuuuita coisa uhsaduhsda. Não só tecnologias assim, mas também temos storybook pra documentação dos componentes, MirageJS (ou msw, ainda ta pra definir) pra interceptação de requests, e talvez tenha uma coisa ou outra que eu tenha esquecido.

Sim, muita coisa, mas será que essas coisas fazem ser muito mais difícil de fazer um sistema? Porque que estamos usando tanta coisa? É só pra parecer bonito?

Bem, além de testar, essas coisas estão aí por um motivo, que eu particularmente gosto muito: DevX. Sim, DevX, ou Developer Experience, é o que eu mais procuro em uma ferramenta, e é um dos principais motivos (se não o principal) que me faz escolher ela ou não.

Developer Experience, basicamente (e quase uma tradução literal), é a experiência que a ferramenta da ao programador quando ele ta usando ela. Tentando ser mais objetivo, eu gosto de algumas coisas, como se a tecnologia me da uma boa experiência de debug (erros legíveis), se a API é boa de usar, se ela abstrai coisas que eu acho importantes, coisas assim.

Developer Experience, além de fazer o desenvolvedor trabalhar melhor, faz ele ser bem mais produtivo. Um exemplo que eu tive foi com o Prisma, me dando uma mensagem de erro super clara sobre porque a propriedade nova precisava estar como opcional na declaração da entidade (só faltava ele fazer isso pra mim sozinho), enquanto o TypeORM me permitia colocar uma propriedade nova como not null, e aí quebrava o banco todo quando eu tava rodar uma migration.

Essas tecnologias, também nos dão processos novos que antes não eram possíveis, como o Storybook, que junto com o Chromatic, a gente permite o time de UX/UI visualizar os componentes e ter um feedback loop muito mais rápido. Não só feedback mais rápido com time de UX/UI, mas agora todos os componentes tem uma documentação apartada, que faz com que a gente possa fazer uma espécia de inner source na Mobly, e ofereça os nossos componentes pra outras squads.

Nem me faça falar sobre testes de integração com cada vez menos mocks. MirageJS e MSW interceptam as requisições e retornam direto o resultado como a gente definir. Finalmente chega de mockar axios ou apollo client, e agora testes de integração são ainda mais fáceis de fazer (e eu particularmente sou muito enviesado a fazer muito mais testes de integração do que unitários ou e2e).

GraphQL como BFF, tirando a necessidade do front de orquestrar requisição e tirando overfetching e underfetching, quem que não quer isso? Ah, é chato escrever as queries em formato de string? Não precisa! GraphQL Codegen, além de exportar toda a tipagem a partir do seu endpoint graphql, cria hooks a partir dos seus arquivos .graphql. Pronto, nunca mais mexa com graphql queries como strings, apenas use os hooks gerados automagicamente e corre pro abraço.

GRPC ainda to me acostumando, mas só a possibilidade de aplicações conversarem através de métodos, e não por requisição que pode ter um campo ou outro zoado, já ganha meu coração. Sem contar a performance que ele dá, qualquer um gosta de performance.

Claro, antigamente era só abrir um index.html, index.js, importar o jquery e o bootstrap e começar a codar. Mas projetos desse tipo, em quanto tempo ficam insustentáveis, difíceis de manter, de escalar, de documentar e de testar? Não existia buildstep, né? Mas eu não me imagino mais sem um babel, webpack, vite, ou coisas desse tipo. Era só usar xmlhttprequest, ou ajax do jquery né? Sim, me resolveria muito, até porque, me resolve até hoje, mas nada tira o tooling que o GraphQL nos oferece! Eu nem preciso escrever requisição mais!

Sim, fazer um projeto hoje em dia é bem mais complexo, mas colocamos complexidades para que nos permitam ter uma experiência melhor, e que essa experiência boa para os devs se transforme em experiências cada vez melhores para os usuários.