Construindo uma ferramenta em público

Olá pessoal, tudo bem?

Me chamo Thiago, tenho 31 anos e sou gestor de algumas áreas (aproximadamente 90 pessoas) em uma empresa de tecnologia. Estou aqui para compartilhar um pouco de uma jornada de aprendizado que venho trilhando. Eu não sou programador, não trabalho diretamente com tecnologia e não pretendo trabalhar (acredito que trabalhar diretamente com programação tiraria um pouco da 'paixão' que tenho pelo assunto hoje).

Tenho estudado desenvolvimento web e análise de dados para aplicar ao meu trabalho e facilitar minha vida há uns 3 anos, mais ou menos. Isso já me ajudou muito no trabalho, inclusive. Fiz várias integrações entre plataformas, automações, análises e mais. Com isso, recentemente resolvi juntar um pouco de tudo que estudei ao longo dos últimos tempos e construir uma ferramenta para alguns dos times que gerencio.

Então, sou apenas um entusiasta interessado por tecnologia e programação, que gosta de construir coisas e que talvez, no futuro, possa transformar isso em uma fonte de renda adicional - mas a ideia inicial não é necessariamente essa. Recentemente, comecei a construir uma ferramenta com dois intuitos:

  • Tentar resolver uma dor latente minha e de 4 times meus;
  • Tentar aprender o máximo na jornada sobre o que é desenvolver um software de verdade;

O que estou construindo? Estou construindo um pequeno software que "monitora" pipelines do Hubspot. Basicamente ele faz algumas análises de tempo, dá as estatísticas principais em um dashboard e notifica (via notificações e/ou e-mails) o proprietário de negócios ou tickets parados há muito tempo (de acordo com o histórico dos últimos 12 meses desse pipeline).

Quais tecnologias estou usando? Estou usando Django como framework de desenvolvimento web, por dois motivos principais:

  • Meus conhecimentos em outras ferramentas era precário ou inexistente;
  • Facilita o uso de bibliotecas do Python que já domino;

Além disso, como banco de dados estou usando o PostgreSQL. Porque? Porque sim. Não sei se foi a melhor opção, mas não tenho habilidade técnica para decidir. Só foi o tutorial mais fácil e interessante que encontrei por aí.

Em qual estágio está a construção? Atualmente estou trabalhando nas análises. Essa parte está bastante adiantada porque eu já fiz a maioria dessas análises no trabalho do dia a dia. Além disso eu já deixei "pronto":

  • A autenticação (login/logout/registro/mudança de senha/login social com Google)
  • A conexão com o Hubspot e extração de dados

Quais os próximos passos (na minha visão)? Eu gostaria de ter um MVP funcional até o final do ano, para colocar na mão dos meus times e aprender. Para isso, ainda preciso aprender muito sobre:

  • Como fazer deploy de uma aplicação dessas em produção;
  • Como fazer isso de forma barata e escalável;
  • Como cuidar das tarefas assíncronas (estou começando a aprender sobre Celery e RabbitMQ) Fora todo o resto que eu nem sei que ainda não sei.

Enfim, quis compartilhar um pouco dessa jornada aqui para criar um certo comprometimento comigo mesmo e com terceiros de terminar esse projeto e claro, receber conselhos e ajuda de profissionais que já são infinitamente mais experientes do que eu. Pensei até em criar algum tipo de canal para compartilhar essa jornada periodicamente, mas, ainda não sei se vou fazer. Pelo menos por enquanto, acho que vou compartilhando o andamento por aqui - se vocês acharem legal acompanhar.

E aí pessoal, alguma dica ou conselho para pessoas que, como eu, ainda nunca tiraram um projeto do papel e estão loucos de vontade de aprender?

Ola Thiago. Gostaria dar algumas sugestões, se me permite, sobre os pontos que levantou como proximos passos. Para simplificar o processo, pode criar um script de build e rodar ele diretamente da sua máquina. A ideia é ele ser o mais desacoplado possível da sua máquina, ou seja, ao executar ele conseguir buscar e resolver as próprias dependências. Como está usando python acredito que basta gerar um requirements.txt. Dessa forma será mais simples integra-lo a um pipeline de build no futuro usando o Jenkins ou alguma integração da sua ferramenta de versionamento, como o Github actions. Pelo que descreveu, você vai ter uma base de usuários de umas 90 pessoas então acredito que possa manter sua estrutura simplificada. No lugar de trabalhar com o RabbitMQ, pode trabalhar gravando e lendo dados do bd, em resumo usar o bd como fila. Existem diversos artigos e referências que condenam essa prática, mas, sugiro isso para manter sua arquitetura simples. Abstraindo esse acesso usando uma classe é possível deixar isso gerenciável e evitar que se torne um problema posterior. Mas se seu desejo é aprender sobre o uso da ferramenta RabbitMQ, então siga em frente. Também acredito que no ponto que está você ja possa implementar um processo de build, mesmo que ninguém va usar o sistema no momento visto que não está pronto, e ja ir integrando ele no seu processo de desenvolvimento.

Nossa Adoniram, excelentes dicas. Muito obrigado! Vou levá-las em consideração. O requirements.txt eu já criei. Sobre o RabbitMQ é muito sobre aprender realmente sobre as complexidades de construir um software de verdade... Em breve trarei as atualizações!