Pular para o conteúdo principal

Como eu desenvolvo meus projetos?

A pergunta que sempre faço quando vou desenvolver algo, seja pra mim, ou seja no trabalho é: "Eu preciso mesmo disso?". E durante todos esses anos na profissão, muita coisa eliminei da minha rotina, e muita coisa aprendi a dosar, pra não gerar burocracia demais aonde não é necessário.
Aqui, vou me ater apenas à explicar como desenvolvo meus projetos pessoais, pois no trabalho, por conta de processos de desenvolvimento já definidos, fica difícil sair da linha sem que o processo em si seja modificado (Trabalho em uma empresa certificada MPS-Br).
Minha explicação será dividida em tópicos, sendo cada tópico a representação real de um passo no meu processo de desenvolvimento. Sendo assim, vamos ao que interessa!

#1 Concepção da Ideia: quais são meus casos de uso principais?


É fundamental ter ideia do que você quer fazer. Parece primário isso, mas muita gente desiste de uma ideia no meio do caminho por não saber exatamente a "forma" dela. Nesse sentido, sempre penso: Quais são os casos de uso principais? Ou seja, quais funcionalidades realmente geram valor para meu produto? É isso mesmo que quero resolver com esse produto?
Geralmente vejo muitos devs gastando horas desenvolvendo login, recuperação de senha, cadastro, quando na realidade, seu caso de uso principal é a gestão de uma única informação. Oras, porque não começar pelo caso de uso principal?
Sempre faça essa pergunta: Eu preciso mesmo disso? (Eu preciso mesmo de login?; Eu preciso mesmo de um cadastro de perfil completo?). Se precisar, e não for seu caso de uso principal, deixe pra depois. Sem dó!

#2 Projetar as interfaces


É engraçado como para a maioria dos profissionais em início de carreira, o termo interface é entendido apenas como: "As telas do sistema; o layout gráfico". A realidade é que interface é tudo aquilo que propõe uma ligação lógica entre duas entidades - sejam elas humano-computador, ou sistema com sistema.
Vamos supor um cenário aonde Eu tenha uma arquitetura com: Um sistema web; um app mobile; e uma API no backend para lidar com as regras de negócio. Nesse contexto, devo projetar as interfaces gráficas que são aquelas que o usuário terá contato (geralmente uso Balsamiq para protótipos de baixo nível, e quando tenho a oportunidade de ter um designer na equipe, ele se encarrega de fazer os protótipos de alto nível), e de quebra elaboro a interface JSON (geralmente trabalho com esse formato) que o backend deverá servir para os apps web e mobile, já pensando em cada endpoint. Com o JSON definido, fica muito mais fácil os avanços das 3 partes acontecerem em paralelo (quando se tem uma equipe pra isso), pois o "acordo de interface" já existe e o front web e mobile não dependem da API avançar as entregas.

Dica: Se você estiver usando um framework javascript (node que seja), recomendo o uso da lib Json Server, que permite simular um servidor à partir de uma estrutura JSON.

#3 Mãos ao código


Para essa etapa, uma auto-avaliação do que está sendo desenvolvido deve sempre ser feita, tanto pra ir validando a ideia, quanto avaliando se seu código é um código limpo. Se você não conhece esse conceito, recomendo fortemente a leitura do livro de Robert C. Martin, Código Limpo: Habilidades Práticas do Agile Software, pois te garanto que seus ensinamentos serão valiosos para sua carreira. E é claro, se você ainda não é adepto ao uso de testes unitários, essa é uma boa hora para começar a estudar sobre o assunto.

Não tinha a intenção de te oferecer um handbook com este artigo, mas apenas te mostrar um pouco o que Eu tenho feito que tem dado resultado no meu dia-a-dia.

Um forte abraço!

Comentários

Postagens mais visitadas deste blog

Executar uma tarefa em background no Android usando React Native

Pegue um café e se ajeite na cadeira, pois vou contar uma história um pouco longa a respeito de como executar serviços em segundo plano com React-Native e imagino que vai servir mais como um norte na hora de desenvolver esse tipo de funcionalidade. Primeiro, pesquisei na documentação oficial do React, e lá é indicado um recurso chamado Headless JS, que permite criar uma ponte entre o JS e o código nativo, e executar tarefas em background. Em seguida, fiz uma pesquisa sobre como funcionam as tarefas em segundo plano no Android para entender quais são as possibilidades e prós e contras de cada abordagem. Sobre as abordagens, temos: # WorkManager A API WorkManager facilita a programação de tarefas adiáveis e assíncronas que precisam ser executadas mesmo se o app fechar ou o dispositivo reiniciar. Principais recursos: Compatível com versões anteriores até a API 14 Usa o JobScheduler em dispositivos com a API 23 ou posteriores Usa uma combinação de BroadcastReceiver + AlarmManage...

Fui ensinar Promise e acabei construindo um agregador de jogos

Antes que crie alguma expectativa, aqui está o link do  "Fliperama" . Há uns dias atrás, Eu estava conversando com um colega de trabalho, e discutindo sobre como ele poderia melhorar o código que estava escrevendo. Para começo de conversa, passei algumas noções de Clean Code, que aprendi com o livro de Robert C. Martin,  Clean Code , e com a experiência de pôr esses conhecimentos em prática no dia-a-dia. E durante o processo falei da importância de um código não ser repetitivo, conciso, e que sua escrita de fato entregasse valor durante a leitura, sem que fosse necessário minuciosamente ler os detalhes de implementação de uma função para que se soubesse o que ela realmente faz. Foi aí que falei como o uso de Promise em Javascript podem tornar um código mais legível e com maior mantenabilidade. Em essência, Promise é um objeto usado para processamento assíncrono e seu retorno sempre será um callback que precisa ser resolvido. Para que Eu não me alongasse muito, resolvi des...

Como serializar todos os dados de um formulário em um objeto JSON usando jQuery? #fastTip

Um dos pilares de um código bem escrito é: DRY (Dont Repeat Yourself - não se repita). Acontece que muitas vezes nos deparamos com situações que por conta da necessidade de entrega expressa (famoso código miojo - feito em 2 minutos), acabamos deixando de aplicar boas práticas. O que difere um amador de um profissional é a sua capacidade de avaliar o impacto que um código mal escrito causa e identificar os caminhos pra resolver esses impasses. Enfim, vamos ao que interessa: O Problema Desejo criar um objeto JSON à partir de um formulário, para ser enviado em uma requisição assíncrona. Atualmente, o objeto é criado assim: var data = { name: $('input[name="name"]').val(), email: $('input[name="email"]').val(), }; Olhando pra esse código, vemos diversos problemas: Se mudar o name do input, precisará ir lá no código para alterar a atribuição. Se houver um formulário com 20 campos, terá que fazer 20 atribuições, e assim por diante. A Soluçã...