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

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çã...

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...