Full Stack vs Full Cycle developer
Full Stack developer
Nos últimos anos o termo full stack developer ganhou destaque na descrição de vagas de emprego, especialmente em startups. Segundo este post, um full stack developer é (tradução minha):
[…] um engenheiro que pode dar conta de todo o trabalho, desde bancos de dados, servidores e a parte cliente da aplicação. Dependendo do projeto, o que os clientes necessitam pode ser uma aplicação mobile, web ou desktop.
E o post segue citando tudo que seria necessário aprender: uma série de linguagens de programação, bancos de dados, backend, frontend, cache, design, usabilidade, etc, etc.
Se isso é complicado para uma pessoa que é desenvolvedora há vários anos, imagine o desespero que pode causar em alguém que está iniciando na carreira. Recentemente fui convidado a participar de um papo sobre desenvolvimento web no podcast/canal do Youtube do Robson Cristian, o Simplificando. Um dos tópicos que comentamos foi exatamente isso: o que uma pessoa precisa aprender para iniciar ou evoluir na carreira web. No episódio eu dei minha opinião rápida sobre o assunto, que estou aprofundando neste post. O que eu acredito é que no início da nossa carreira é natural sermos full stack porque precisamos ganhar mais experiência antes de escolhermos um caminho.
Antes de continuar minha opinião, vamos ver o que é full cycle developer
Full Cycle Developer
O termo ganhou destaque em um post do blog de tecnologia do Netflix, em meados de 2018.
No post o autor conta os problemas que eles estavam enfrentando e os experimentos que realizaram até chegar a este modelo (tradução minha):
[…] nós chegamos a um modelo onde um time, equipado com ferramentas de produtividade, é responsável por todo o ciclo de desenvolvimento do software: análise/arquitetura, desenvolvimento, teste, deploy, operação e suporte.
Ok, ok, nem todo mundo tem os problemas de performance, escalabilidade ou complexidade que o Netflix tem, mas não é este o ponto principal. Substitua “time” por “desenvolvedor(a)” e chegamos ao ponto que me fez escrever este post.
Ao invés de aprender superficialmente todas as tecnologias envolvidas no desenvolvimento de um software (backend, frontend, banco de dados, usabilidade, etc) me parece muito mais eficaz uma pessoa que é capaz de iniciar uma tarefa e conseguir ser responsável por ela até o final do seu ciclo. É o que venho experimentando nos últimos oito ou nove anos, enquanto estava a frente da tecnologia da Coderockr e agora na Codenation. Neste tempo todo sempre trabalhei com especialistas em suas áreas, seja mobile, frontend ou backend, mas que eram capazes, com conhecimento e ferramentas, de serem responsáveis por todo o ciclo de desenvolvimento: definir arquitetura/análise de requisitos, desenvolver o software, testar, fazer o deploy e resolver problemas em produção.
Eu acredito que esta é uma forma mais saudável de evoluir em uma carreira em desenvolvimento de software, pois gera profissionais responsáveis, especialistas em suas áreas, capazes de trabalhar em equipe (junto com outros especialistas) e mais completos.