Crie uma conta gratuita ou Faça login
Podcast
Tech Leadership Rocks
Episódio 233

Complexidade em desenvolvimento de software com Edu Matos

• 37 minutos

Neste episódio, Edu Matos fala sobre de onde surge tanta complexidade no desenvolvimento de software e como um possível caminho para simplificá-lo. Ele reflete sobre a rapidez com que Linus Torvalds criou o Git e compara isso com a lentidão comum em entregas de software.

Reaja nos momentos marcantes
Curti
Boa ideia
Amei
Engraçado
Parabéns
Mind blown

O desejo natural de aprender pode nos levar a escolher tecnologias por interesse pessoal, não por resolver o problema. Cuidado: simplicidade gera valor; ego gera dívida técnica.

— Eduardo Matos

Resumo deste episódio

A criação de ferramentas como o Git pelo Linus Torvalds em apenas 10 dias ou do JavaScript por Brendan Eich no mesmo período parece desafiar a lógica. Enquanto isso, equipes de desenvolvimento podem levar semanas ou meses para entregar funcionalidades aparentemente simples. A diferença não está apenas na competência técnica, mas na complexidade contextual que envolve o dia a dia do desenvolvimento.

1. A raiz da complexidade

O tempo gasto em projetos muitas vezes não está ligado à dificuldade técnica, mas a fatores como:

  • Desconhecimento do código existente: Sistemas legados ou grandes codebases exigem tempo para entendimento.
  • Falta de documentação: A necessidade de "adivinhar" ou perguntar a colegas consome recursos.
  • Tecnologias novas: A curva de aprendizado de ferramentas não dominadas pela equipe.
  • Decisões motivadas por interesses pessoais: A tentação de usar tecnologias "da moda" ou de interesse individual, mesmo que não sejam a melhor escolha para o projeto.

O pulo do gato é priorizar simplicidade e resolução direta de problemas, em vez de buscar soluções "perfeitas" ou academicamente elegantes.

2. Os 5 pilares para simplificar o desenvolvimento de software

Pilar 1: Coleta de requisitos

  • Entenda o problema real: Converse diretamente com os usuários ou stakeholders para evitar suposições. Exemplo: Se um relatório demora 1 hora para ser gerado, pergunte se seria desejável gerá-lo em 10 minutos antes de investir em otimizações complexas.
  • Evite extremos: Nem sempre é necessário criar uma solução minimalista ou superdimensionada. Foque no mínimo viável que resolve o problema.

Pilar 2: Codificação

  • Use ferramentas familiares: Linguagens exóticas ou tecnologias de nicho aumentam a complexidade. Dê preferência a opções dominadas pela equipe ou com amplo suporte da comunidade.
  • Clean Code (sem fanatismo): Código legível, com nomes descritivos e funções curtas, facilita a manutenção.
  • Abstrações inteligentes: Encapsule recursos como filas (SQS, RabbitMQ) ou armazenamento (S3) em interfaces simples. Isso reduz o acoplamento e torna o código mais modular.
  • Screaming Architecture: Estruture pastas e arquivos de forma que qualquer desenvolvedor entenda o propósito do projeto apenas olhando a estrutura de diretórios.

Pilar 3: Testes

  • Evite complexidade desnecessária: Ferramentas como LocalStack ou TestContainers são úteis para desenvolvimento local, mas tornam testes lentos. Prefira mocks ou fakes em memória.
  • Cuidado com bancos de dados: Mockar consultas SQL pode ignorar regras de negócio embutidas. Em alguns casos, usar SQLite para testes é mais seguro se você estiver usando um banco de dados relacional.

Pilar 4: Arquitetura

  • Fuja da "melhor ferramenta para o problema": Escolher tecnologias só porque são "ideais" tecnicamente, sem considerar o conhecimento da equipe, gera dívida técnica.
  • Desenhe, avalie riscos, itere:
    1. Crie um esboço inicial da arquitetura.
    2. Identifique pontos de risco (ex: alta carga, dependências críticas…).
    3. Adicione complexidade apenas onde é necessária para mitigar riscos.
    4. Simplifique componentes que não exigem sofisticação.

Pilar 5: CI/CD

  • Mantenha pipelines enxutos: Automatize etapas essenciais (lint, testes, build, deploy…) e elimine passos manuais.
  • Velocidade é prioridade: Se um pipeline demora mais de 10 minutos, repense sua estrutura.

A importância da simplicidade

Entregas rápidas não são apenas uma métrica de produtividade, mas um diferenciador competitivo. Software simples reduz retrabalho, facilita a manutenção e permite adaptação ágil a mudanças.

A complexidade, quando inevitável, deve ser justificada por riscos reais (ex: escalabilidade, segurança etc.), nunca por preferências pessoais ou modismos.

Para ler todo o resumo Crie uma conta grátis ou Faça login