Neste estudo vamos começar a entender um pouco melhor a atuação de um desenvolvedor backend e suas areas de estudo.
Para desempenhar o papel como um bom backend é importante entender muito alem do backend, é preciso entender que oque estamos desenvolvendo não é apenas código isso vai impactar as pessoas e por isso precisa de atenção desde a ideação, e durante toda sua vida.
Para entender qual o ciclo de vida de um software existem diversos métodos eles são usados para guiar uma aplicação durante sua vida desde a sua concepção, até operação e manutenção.
Um deles é o ALM este é focado em olhar para o ciclo de vida de um software como um todo existem outros focados apenas no desenvolvimento como SDLC (software development life cycle), porem é muito importante ter uma visão ampla do produto que esta desenvolvimento.
1️⃣ Ideação é a primeira parte do ciclo nela temos a ideia e precisamos trabalhar nela até este momento.
Dentro da ideação tab
2️⃣ Planejamento é onde verificamos as possibilidades e a viabilidade levantando os riscos, custos e recursos necessarios.
3️⃣ Definição é o primeiro passo do desenvolvimento onde levantamos os requisitos de quem idealizou.
4️⃣ Modelagem é onde definimos e documentamos a arquitetura, e tomamos algumas decisões relacionadas a tecnologia.
5️⃣ Desenvolvimento é onde realmente codificamos a aplicação, documentamos tudo e tomamos pequenas decisões que surgiram durante o desenvolvimento. É aqui onde temos a maior atuação.
6️⃣ Teste é onde validamos oque foi desenvolvido pode ser feito antes do desenvolvimento como quando trabalhamos com TDD durante o desenvolvimento ou até mesmo durante a implantação como é feito com canary deployment.
7️⃣ Implantação é onde nosso software entra em atividade, quando o usuario esta usando inicia o uso da aplicação.
8️⃣ Manutenção é quando começamos a monitorar e observar o uso afins de implantar melhorias e correção de possiveis erros.
Tudo isso para que 3 partes fundamentais governança, desenvolvimento e operação estarem sempre alinhadas e seguindo um fluxo.
É muito importante para você como desenvolvedor tentar participar de todo o ciclo de vida do software do qual você contribui, porem como sabemos nem sempre é possivel, oque podemos fazer neste caso é o tentar trilhar o caminho inverso e entender o que levou a aplicação estar como ela esta estruturada hoje.
Vamos seguir o ciclo de desenvolvimento do software vamos passar pelos principais pontos de atuação por isso vamos acabar pulando alguns.
Essa parte pode ser feita pelo time de desenvolvimento ou não. Aqui geralmente temos um time de designers que estudam e definem os melhores caminhos para o produto em conjunto com o Product Owner que tambem pode ser Project Manager.
Com base nas definições podemos inciar a modelagem, nesse ponto escolhemos algumas tecnologias, desenhamos a arquitetura escolhendo modelos de representação para auxiliar na documentação.
Como por exemplo diagramas de caso de uso, sequencia, classe, entidade e relacionamento, transição de estados para partes especificas do software para uma visão mais completa C4model ou como pode acontecer muitas vezes não ter a parte de ideação muito clara e precisar documentar essas parte de negocios podemos usar um bpmn.
Nesta parte de modelagem é sempre bom ter pessoas que já tiveram forte atuação em outras criações e sustentações de outro software similar.
Existem muitas ferramentas para isso como:
Para Bpmn:
Diagrama de sequencia:
Diagrama de banco de dados:
Para todo tipo de documentação:
Com essas ferramentas documentamos a arquitetura escolhida do software, e de cada componente dele tambem podemos documentar os processos envolvidos.
Neste ponto tambem escolhemos se nossa aplicação vai usar um iaas com uma maquina virtual, ou em um saas como serveless para tomar essas decisões precismos entender o cenario da aplicação.
essas decisões impactam diretamente:
- No custo de uso, desenvolvimento e manutenção da aplicação
- Na dificuldade de mudanças de tecnologia, cloud providers etc...
Por este motivo é uma das partes que sempre voltamos e devemos avaliar se tudo esta como planejado ou se precisamos tomar novas decisões.
Esta é a parte mais importante para o desenvolvedor, aqui ele vamos desenvolver e documentar nosso código baseado no que documentamos, é muito importante que cada mudança durante o desenvolvimento tambem seja atualizada nas documentações existentes.
Neste momento como desenvolvedor backend você precisa sempre se preocupar com alguns pontos muito importantes:
Escolha das tecnologias aqui tomamos o restante das tecnologias se iremos usar um framework ou usar um biblioteca ou um framework:
Frameworks:
Bibliotecas:
A principal diferença entre os dois esta em como escrevemos nosso código e nas funções que cada um realiza.
Quando optamos por um framework ele geralmente dita a forma como escrevemos nosso código enquanto em bibliotecas temos a liberdade de escolher diferentes implementações.
Um framework tambem costuma ter tudo que precisamos para executar nossa solução isso causar um overlap de funções do framework com o nosso Cloud Provider.
Setup do projeto como outra pessoa consegue executar o projeto na maquina dela, mesmo que você seja o o unico desenvolvedor sempre tenha esse ponto em mente afinal existem muitas possibilidades como atuar em varios projetos, mudar de tecnologia, ficar um longo tempo sem executar o projeto ou até mesmo o fator onibus.
Para garantir que outra pessoa consiga fazer o setup podemos:
- Escrever uma boa documentação.
- Usar ferramentas para facilitar o setup.
- Simplificar ao máximo o setup do projeto.
Qualidade de código para isso temos muitas ferramentas, filosofias aplicadas para programação e design patterns que podemos estudar e usar para melhorar ou otimizar nosso código porem essa tarefa é fundamentalmente nossa não existe mágica.
Linters esses dependem muito da sua linguagem abaixo alguns de NodeJs:
Design patterns:
Documentação existem muitas coisas que precisam ser documentadas como APIs, código, setup do projeto entre outras, para cada uma delas existe uma ferramenta mais adequada.
APIs:
Código:
- Comentarios no código podendo usar ferramentas como JsDoc, TsDoc
Setup do projeto:
Essa é a parte onde validamos oque escrevemos, como disse antes pode ser feita antes durante o desenvolvimento.
Tambem conseguiriamos testar após porem quando testamos durante ou antes isso ajuda a manter a qualidade do nosso código.
Podemos testar nossa aplicação de muitas formas diferentes, com testes funcionais que pode ser dividida em 3 partes:
- Testes unitarios que testa as menores parte do nosso código como funções e declarações tudo individualmente usando mocks.
- Testes de integração que testa como nosso código se conversa dentro da aplicação sem mocks.
- Testes e2e que testa toda nossa aplicação desde o frontend até o backend simulando um usuario.
Ou com testes não funcionais que existem possibilidades:
- Testes de carga que valida ou entende quantos usuarios em simultaneo seu backend consegue suportar.
- Testes de performance que valida em quanto tempo seu backend esta respondendo.
Para realizar esses testes existem muitas ferramentas como.
Testes unitarios:
Neste momento é onde temos contato com o cloud provider escolhido, por este motivo temos que pensar nele antes do desenvolvimento pois aqui nosso código já estara preparado para o ambiente em que será executado.
Para fazer a implantação é muito importante pensar automatizar usando algum CI/CD desde de o primeiro deploy.
Sem setup para usar:
Self-hosted:
Analise de código estatica:
Cloud Providers:
Neste passo acompanhamos como nossa aplicação esta se comportando durante o uso real, aqui pegamos falhas e pontos de melhoria.
Quando estamos falando sobre acompanhamento um termo muito comum é observabilidade que é baseado em 3 pilares:
-
Logs são como os saidas que a aplicação da de acordo com a necessidade do desenvolvedor geralmente a cada ação importante executada. Pense que são os
console.log
que deixamos para ajudar a entender o comportamento da aplicação. -
Métrics são medidas usadas para medir o desempenho da aplicação seja em tempo de resposta, consumo de cpu, consumo de memoria, quantidade de erros etc...
-
Tracing são como logs porem que acompanham todo o ciclo de vida de uma ação iniciada em alguma parte do sistema.
Para isso temos muitas ferramentas cada uma para atender um tipo de necessidade.
Os objetivos deste estudo são entender que o existem outras partes alem do código no desenvolvimento de um backend e que elas são tão importantes quanto o desenvolvimento, ter uma breve introdução sobre algumas ferramentas, tecnologias e processo de cada passo do ciclo de vida de um software.
Tome nota dos pontos que ainda não tinha conhecimento, e levante alguns pontos de duvidas.