Fala, galera do mal! Bem, após assistir o homem-aranha longe de casa e, sabendo que a saga invasão secreta provavelmente terá início (vi na pós-créditos e quem não viu toma o spoiler :D.)
Vamos falar um pouco sobre uma nova categoria: desenvolvedor full cycle. Na verdade nem é tão nova assim, porém hoje ela recebeu um nome específico e mais “nutella”.
Esses caras são chamados de Full Cycle e estarão presentes na nova formação dos Avengers, ao lado dos mais experientes Full Stack e o conhecido DevOps.
Aí vocês me perguntam:
“Bruno, que viagem é essa de Full Cycle, mano? Já inventaram outro termo? Toda semana mudam e criam uma subcategoria nova?”.
Então, minha resposta é sim, mas calma, calma jovem padauã, não priemos cânico. Vou contar um pouco mais dessa história abaixo e, no final, vocês descobriram que todo mundo é ou já foi full cycle nessa vida.
O que é um Desenvolvedor Full Cycle?
Este é um termo novo, que foi cunhado há pouco mais de um ano pela Netflix, em um post. No contexto, significa um time responsável por todo o ciclo de desenvolvimento do software, que se preocupa por todas as fases do produto.
O ideal, portanto, é que um desenvolvedor consiga entender todo esse ciclo e consiga melhorar as performances também nos testes.
Testes são o mínimo que um desenvolvedor deve fazer. Ele tem que entregar o software funcionando
Vantagens
Tornar-se expert em uma determinada área. Treinar as pessoas para fazerem desenvolvimentos. Aproveitar a experiência já adquirida no mercado. Poder melhorar o software e fazer coisas novas.
Desvantagens
Dúvidas como “o que escolher” e “por onde começar”. Por isso, é importante ser Full Stack no começo da carreira.
>>Leitura Recomendada:
Dicas para aprender programação e evoluir na carreira
Desenvolvedor full cycle: o início
Tudo começou com uma postagem no Blog de Tecnologia da Netflix, que compartilhou a história da jornada da sua equipe de Engenharia com abordagens para a construção e operação de serviços.
Isso culminou na criação de “Desenvolvedores Full Cycle”, ou no aportuguesado: Desenvolvedores de todo o ciclo.
Essa abordagem está se mostrando promissora com a Netflix, onde os desenvolvedores são responsáveis por determinados aspectos operacionais da prestação de serviços e são suportados por meio de treinamento e uma variedade de ferramentas de autoatendimento.
Equipes centralizadas criam e mantêm plataformas e ferramentas, mas cada equipe dentro da organização tem a liberdade de se desviar da “pista“.
Os autores do blog, Philip Fisher-Ogden e Greg Burrelle, afirmam que o objetivo do ciclo de vida de entrega de software é otimizar “tempo para agregar valor”, a fim de converter efetivamente ideias em produtos e serviços para clientes.
Isso é semelhante à proposta de Dan Northe e Jessica Kerr de que o desenvolvimento moderno de software deve ser focado em
“trabalhar para minimizar de maneira sustentável o lead time para o impacto nos negócios“.
Desenvolver e executar um serviço de software envolve um conjunto completo de responsabilidades, assim como acontece com os super heróis. Não basta ter os poderes, mas sim saber como e quando utilizá-los (coitado do Shazan).
>>Leitura Recomendada:
Como ser um bom programador: 7 comportamentos para evitar
A relação do FullCycle com DevOps
Em nosso foco, o Full Cycle deve: Projetar, desenvolver, testar, implantar, operar e dar suporte.
O famoso “Severino” do desenvolvimento. Lembrei até quando fazia os projetos na faculdade que viravam os produtos vendidos no mercadinho perto de casa :D.
Tradicionalmente, essas responsabilidades foram segmentadas e implementadas como “subequipes” dentro de uma organização. Isso é tipificado no clássico livro de DevOps “The Phoenix Project“.
Essas funções especializadas criam eficiências dentro de cada segmento, mas potencialmente criam ineficiências em todo o ciclo de vida (não esqueçam as premissas de ciclo de vida de software).
A equipe de engenharia da Netflix, responsável pela primeira camada de serviços da AWS (necessária para o streaming de vídeo), repensou sua abordagem tradicional de entrega de software, inspirando-se nos princípios desenvolvimento DevOps.
Em particular, as “Três Maneiras de DevOps“, popularizadas por Gene Kim, descrevem a importância do pensamento sistêmico, ampliando os ciclos de retroalimentação e cultivando uma cultura de experimentação e aprendizado contínuos.
A nova abordagem da equipe Engenharia focada em “operar o que você constrói” (muito parecido com o famoso CTO da Amazon, Werner Vogelagora), e colocar os princípios de DevOps em ação.
Tendo, assim, a equipe que desenvolve o sistema também responsável por operar e apoiá-lo na produção.
“Distribuir essa responsabilidade para cada equipe de desenvolvimento, em vez de externalizá-la, cria feedback direto e alinha incentivos. As equipes que sentem a dor operacional, têm o poder de remediar a dor alterando o código ou o design do sistema; eles são responsáveis e responsáveis por ambas as funções.”
Os desafios da abordagem FullCycle
O desafio com essa abordagem é que a propriedade do ciclo de vida completo do desenvolvimento criou uma sobrecarga adicional para os desenvolvedores e, muitas vezes, exigiu que novas habilidades fossem aprendidas.
Houve também um potencial de “burnout” para ocorrer, ja que as responsabilidades eram montadas em indivíduos e equipes.
Para mitigar esses problemas, as ferramentas podem ser aproveitadas para simplificar e automatizar os requisitos operacionais e de desenvolvimento associados.
A Netflix criou equipes de suporte centralizadas — como “Cloud Platform“, “Performance & Reliability Engineering” e “Engineering Tools” — que têm a missão de desenvolver uma plataforma e ferramenta comum (“Paved Road“) para resolver problemas da equipe de desenvolvimento.
Muitas dessas ferramentas foram lançadas como código aberto, fazendo parte do movimento Netflix OSS, como a plataforma de entrega contínua da Spinnaker.
Então galera, combinar a mudança de mentalidade e a criação de infra-estrutura, assim como ferramentas comuns, levou à criação de “Desenvolvedores Full Cycle“.
Afinal, o que faz o dev Full Cycle?
Espera-se que os desenvolvedores de “ciclo completo” sejam informados e efetivos em todas as áreas do ciclo de vida do software.
Migrar para este modelo requer uma mudança de mentalidade; este desenvolvedor pensa e age como um engenheiro de software (SWE), engenheiro de desenvolvimento de software em teste (SDET) e engenheiro de confiabilidade de site (SRE).
Nem todos chegam à Netflix, por exemplo, com o conjunto de habilidades relevantes . Consequentemente, um treinamento extensivo é fornecido. Além disso, nem todos os desenvolvedores querem trabalhar assim.
Segue abaixo o modelo do fluxo proposto pela Netflix para a base dessa nova categoria:
Nem tudo são benefícios
Apesar de todos esses benefícios, tanto para o profissional quanto para a empresa, existem pontos de advertência para a aplicação deste modelo em demais instituições.
Para que funcione corretamente, serão necessários alguns esforços.
Principalmente para impedir a cultura de metodologia simplesmente como ”cópias cegas” de práticas dos populares, os chamados “unicórnios de software“.
Isso é ecoado por líderes da indústria levando-se em conta que há uma ampla gama de abordagens e estruturas organizacionais que foram criadas para solucionar os requisitos de desenvolvimento e operações.
Com isso, podemos chegar às seguintes conclusões e respostas relacionadas ao tema abordado:
Para as organizações que desejam adotar esta forma de trabalho, os próprios autores do blog da Netflix sugerem começar com uma análise do valor potencial e dos custos associados, seguidos pela mudança de mentalidade.
Há muitas informações associadas disponíveis no blog da Netflix e na Web em geral, e também existem soluções de software livre e SaaS para plataformas e ferramentas que podem atender às necessidades de muitas empresas.
Uma palavra importante do conselho conclusivo concentra-se em abraçar a simplicidade:
“Avalie o que você precisa e tenha em mente trazer a menor complexidade necessária“.
>>Leitura Recomendada:
[Hacks e dicas] Como ser um bom programador
Em conclusão
À luz desta discussão, podemos concluir que (parágrafo inicial das minhas redações no período do vestibular :D), se você deseja ser um desenvolvedor full cycle e percebeu que sua abordagem e seus benefícios são realmente importantes, como premissa, devem conhecer e participar ativamente das seguintes etapas do desenvolvimento de software:
- ELABORAÇÃO: levantamento, modelagem e especificação
- PLANEJAMENTO: definição de estratégias, formas, métodos e técnicas a serem utilizadas e como serão utilizadas, assim como ferramentas
- CONSTRUÇÃO: não só desenvolvendo como também testando e otimizando
- IMPLANTAÇÃO: configurando e colocando o produto em produção para liberação e uso
- MONITORAMENTO/CONTROLE/MANUTENÇÃO: manter o software e identificar possíveis pontos de falha, usabilidade, manutenibilidade etc. Neste ponto, você usa o sistema como usuário final e, assim, consegue identificar pontos de dificuldades e “entra na pele” do operador, estando assim melhor preparado para identificar o que realmente interessa e torna o sistema agradável e que atende a real necessidade do cliente.
Gostou do artigo? Compartilhe com seus colegas desenvolvedores e descubra mais sobre o mundo do Full Cycle!