O Princípio do Propósito Específico na Prática
Quando alguém me pergunta como escolher uma tecnologia para um projeto novo, a primeira coisa que eu respondo é: todas as tecnologias são desenvolvidas com um propósito específico. Não é um conselho filosófico bonito, é um fato operacional que salva horas de dor de cabeça. A maioria dos problemas que vejo em projetos de software, infraestrutura ou até hardware começar quando as pessoas tentam encaixar uma ferramenta no lugar errado apenas porque ela está na moda ou parece promissora. Eu trabalho com isso todo dia. No início da minha carreira, eu vi um time inteiro tentar usar um banco de dados orientado a grafos para uma aplicação que basicamente fazia CRUD simples e relatórios. O banco era incrível para queries relacionais complexas, mas para o que eles precisavam, um PostgreSQL rodando em uma instância básica fazia o mesmo trabalho com metade da complexidade e um terço do custo. Levou três meses para eles perceberem isso.
todas as tecnologias são desenvolvidas com um propósito específico
O conceito em si é simples: cada tecnologia existe para resolver um tipo concreto de problema. Kubernetes foi criado para orquestrar containers em escala, não para substituir um script bash que você usava antes para iniciar serviços. Redis foi feito para cache e mensagens rápidas, não para ser seu banco de dados principal se você não precisa das propriedades específicas que ele oferece. TensorFlow e PyTorch servem para machine learning, mas se você precisa fazer uma integração web simples, usar um deles é como usar um caminhão freteiro para ir à padaria. O que as pessoas geralmente não consideram é que o propósito original de uma tecnologia pode não cobrir todos os cenários que aparecem na prática. Eu tive um caso recente em que uma equipe queria usar Apache Kafka para um pipeline de processamento de dados em tempo real, mas o volume era de poucas milhares de mensagens por segundo. O Kafka funciona perfeitamente bem nesse cenário, mas a sobrecarga de manter um cluster ZooKeeper, a configuração dos brokers, o gerenciamento de tópicos e partitions — tudo isso adicionou complexity desnecessária. Um simples Redis Stream resolveu o mesmo problema com uma fração da infraestrutura.
Outro ponto que ninguém ensina: o propósito de uma tecnologia muitas vezes se expande com o tempo. O Slack começou como uma ferramenta interna de comunicação para a empresa de jogos Slack Technologies. O Git foi criado por Linus Torvalds porque estava frustrado com as limitações do BitKeeper para desenvolver o kernel Linux. Quando você entende de onde veio uma tecnologia, fica mais fácil saber até onde ela chega e onde ela começa a falhar. Para aplicar isso na prática, eu recomendo um processo de avaliação de cinco passos que uso em praticamente todos os projetos:
Primeiro, defina o problema concreto que precisa ser resolvido. Não comece pensando na tecnologia. Anote o que você precisa que aconteça, quais são os requisitos funcionais, as restrições de desempenho e os limites orçamentários. Eu costumo escrever isso em um documento de uma página que chamo de "problema vs. solução" — se não consigo descrever o problema em três frases, provavelmente não entendi direito o que preciso resolver. Segundo, pesquise quais tecnologias existem para esse fim e, mais importante, por que elas foram criadas.Leia a documentação original, os papers, os issues mais antigos do repositório. Às vezes você descobre que algo que parece uma feature genérica era originalmente uma solução para um problema muito específico. Isso te ajuda a entender até onde a tecnologia se sente confortável.
👉 Clique no botão abaixo para saber mais sobre o assunto!
Terceiro, faça um teste prático com dados reais. Não confie em benchmarks de documentação. Eu monto um ambiente mínimo, insiro dados que se parecem com o que vou ter em produção e vejo como a tecnologia se comporta. Numa ocasião, precisei escolher entre Elasticsearch e um banco relacional com full-text search para indexação de conteúdo. O Elasticsearch ganhava em velocidade de query bruta, mas para o volume e a complexidade das consultas do nosso caso, o PostgreSQL com tsvector era suficiente e eliminou toda a necessidade de manter um cluster extra rodando. Quarto, avalie o custo operacional escondido. Toda tecnologia traz consigo uma carga de manutenção. Um framework popular pode ter uma comunidade ativa, mas se o seu time não tem expertise no assunto, o tempo de aprendizado e os bugs específicos daquela stack vão pesar. Eu já vi projetos inteiros engasgarem porque adotaram uma tecnologia new e shiny sem considerar que o pessoal da equipe ia levar semanas para produzir na mesma velocidade.
Quinto, tenha um plano de saída. Isso significa saber exatamente quais são os pontos de acoplamento com a tecnologia escolhida e quanto tempo levaria para migrar se ela não funcionasse como esperado. Isso não é pessimismo, é planejamento. Tecnologia muda, suporte acaba, licenciamento pode ser revisto. Se você não sabe como sair, vai ficar preso. Um exemplo bem concreto do meu dia a dia: recentemente precisei lidar com um sistema de notificações que usava filas próprias de mensageria. O propósito original era processar milhões de eventos por segundo para alertas em tempo real. Mas conforme o produto crescia, começaram a exigir funcionalidades que fugiam do escopo original — agendamentos, filas de prioridade, retry inteligente. A tecnologia não era más, mas estava sendo usada além do seu propósito natural. Migramos para uma solução híbrida que manteve o processamento rápido no núcleo e adicionou uma camada de orchestration por cima para as funcionalidades extras. Levou duas semanas de implementação e reduziu em 40% a taxa de falhas que tínhamos.
O risco maior de ignorar esse princípio é o que eu chamo de "solutionism tecnológico": a tendência de achar que qualquer problema pode ser resolvido com a ferramenta certa, sem considerar que às vezes o problema é de processo, de arquitetura ou simplesmente não merece uma solução complexa. Um relatório mensal que leva cinco minutos para gerar manualmente não precisa de um pipeline ETL automatizado com Apache Airflow. E um chatbot simples que responde perguntas frequentes não precisa de um modelo de linguagem grande rodando em GPU dedicada. Se você está no início de um projeto novo, eu diria que passe pelo menos um dia inteiro apenas mapeando problemas e possíveis soluções antes de escrever qualquer linha de código. Anote os critérios de sucesso. Identifique o que realmente importa. A tecnologia que você escolher deve ser a que melhor atende ao propósito específico que você definiu, não a mais popular, a mais recente ou a que tem mais posts no Medium.
No fim das contas, a regra é simples mas difícil de seguir na prática: entenda o problema antes de escolher a ferramenta, e nunca esqueça que toda tecnologia tem um limite natural do que ela faz bem. Respect those limits and you will save yourself a tonelada de dor de cabeça.