Neste episódio Edu explora quatro mitos comuns na engenharia de software, desmistificando conceitos como a velocidade das linguagens de programação, a comparação entre monolitos e microsserviços, a escalabilidade de bancos de dados SQL e a prática de trunk-based development.
O trabalho de um engenheiro de software é equilibrar velocidade de entrega e estabilidade. Qualquer decisão técnica que ignore esses dois pilares está fadada a falhar.
A ideia de que linguagens como JavaScript ou Python são "lentas" por natureza ignora um ponto crucial: o desempenho real depende do contexto de uso. Aplicações geralmente se enquadram em duas categorias:
Na prática, aplicações web são majoritariamente I/O-bound. Nessas situações, otimizar operações de I/O (como consultas a bancos de dados ou acesso a mensgens em um message-broker) traz ganhos muito maiores do que trocar de linguagem. Linguagens como Go ou Node.js facilitam concorrência para I/O, mas em cenários de CPU intensiva, Rust ou C podem ser mais eficientes. A "lentidão" raramente está na linguagem, mas na arquitetura e falta de otimizações.
Nenhuma abordagem é universalmente superior. A escolha depende do momento e necessidades do negócio:
A chave é começar com um monolito bem estruturado (componentes isolados, contratos claros) e migrar para microsserviços apenas quando houver uma "dor" real, como por exemplo dificuldade de evoluir features ou escalar. A complexidade de sistemas distribuídos (latência, falhas de rede) não deve ser subestimada.
Bancos relacionais como Postgres ou MySQL escalam sim (pelo menos até um certo ponto), mas exigem estratégias adequadas:
A ideia de que bancos SQL não escalam geralmente surge de problemas de configuração (ex.: índices faltantes) ou uso inadequado. Soluções como data warehouses (BigQuery, Snowflake...) complementam casos analíticos, mas o SQL permanece robusto para maioria das aplicações.
A prática de usar branches curtas e integrar código rapidamente à main tem méritos, mas não é isenta de trade-offs:
O foco deve ser entregas menores com valor independente (ex.: uma funcionalidade útil por si só), não apenas quebrar tarefas grandes em pedaços artificiais. Feature flags são úteis para desacoplar deploy de release, mas seu custo de manutenção deve ser ponderado.
Mitos surgem de generalizações, mas a engenharia de software é feita de nuances. Linguagens, arquiteturas, bancos de dados e práticas de desenvolvimento têm contextos onde brilham e outros onde falham. A reflexão crítica e a adaptação às reais necessidades do projeto são sempre melhores guias que "verdades" absolutas.