Neste artigo, compartilharemos como a revolução da IA mudou o desenvolvimento de software na Irya Solutions. Vamos explorar como era nosso dia a dia antes desse boom, quais ferramentas e práticas adotamos, e o impacto direto que sentimos em projetos e na relação com clientes. Além de casos práticos, discutiremos as habilidades que se tornaram essenciais para devs neste novo contexto e nossa visão sobre o que vem pela frente.
Fundada em meados de 2018, a Irya Solutions começou suas atividades em um período pré-pandemia, no qual o uso de inteligência artificial diário e para diversas finalidades parecia uma realidade distante. Nossa rotina consistia em abrir o Gitlab, retomar uma tarefa não finalizada no dia anterior ou iniciar a próxima de maior prioridade, atualizar os branches e começar a programar.
Nos casos em que iniciávamos uma nova tarefa, separávamos um tempo para arquitetar a solução, levando em consideração critérios funcionais (se a solução produziria o comportamento esperado pelo cliente) e não funcionais (se a solução atendia aos nível de qualidade que exigimos na Irya). Era comum procurarmos na documentação das ferramentas utilizadas no projeto por funcionalidades que, por si só ou combinadas com outras, alcançariam os objetivos.
O plano B era procurar na Internet por bibliotecas de código aberto que já implementavam o que precisávamos, pois problemas comuns, como autenticação de usuários, possuem soluções bem conhecidas. Caso ambas abordagens falhassem, passávamos a procurar por artigos, tutoriais escritos ou vídeos que ensinassem a resolver um problema parecido.
A última opção era partir para uma solução totalmente artesanal. O motivo para esse procedimento era entregar mais rapidamente uma tarefa e seguir padrões de desenvolvimento da comunidade. O primeiro garante que estamos focados em resolver o problema específico do cliente e não estamos gastando tempo reinventando a roda. Esse último serve a um dos principais valores da Irya: transparência. Ao seguir padrões conhecidos, garantimos que o cliente tenha a liberdade de continuar um projeto conosco porque confia na nossa qualidade e não porque está preso a nós através de uma solução que é dificilmente compreendida por outras pessoas. Porém, mesmo nos casos em que encontrávamos soluções que podíamos reaproveitar, dificilmente elas vinham "prontas": era preciso alterar a lógica para atender a requisitos específicos do cliente. Algumas vezes era possível resolver com configuração, mas em outras as mudanças necessárias eram mais complexas.
A maioria dos casos se enquadra nesse tipo de solução artesanal direcionada. Quando encontrávamos dificuldades de implementação, partíamos para buscas na Internet. Muitas vezes encontrávamos as respostas mas, em quase todas precisávamos fazer alguma adaptação e cuidar para que a qualidade do código se mantivesse alta: tem muita solução por aí que na verdade é uma grande gambiarra.
Quando encontrávamos a solução que atenderia o nosso caso, se soubéssemos com alto grau de certeza de como tudo funcionaria, partíamos para a implementação com Desenvolvimento Guiado por Testes (TDD, em inglês). Se tivéssemos alguma dúvida ou precisássemos experimentar algo antes de partir para a solução final, era comum os testes virem em um segundo momento.
No final, passávamos a maior parte do tempo pesquisando, estudando e pensando na melhor solução para o problema.
Como gostamos de nos manter atualizados, começamos a testar o Github Copilot como assistente de programação. Em meados de 2024, assim que tivemos maior garantia de que código confidencial de clientes não seria usado para treinamento de modelos de IA, assinamos o plano empresarial.
O Copilot sugere trechos de código por meio da função de auto completar dos editores de texto. Nesse contexto, nosso procedimento se mantinha praticamente o mesmo até a etapa de configuração e implementação, quando de fato começamos a escrever código. Para nós, o Copilot foi útil para
De fato, nessas situações em geral, o Copilot acelerava bastante a entrega de código.
Em contrapartida, com o Copilot:
Na busca de uma ferramenta que pudéssemos usar apenas quando sentíssemos necessidade e que nos trouxesse mais ganhos, encontramos o Claude. Ele é um programa que você roda na raiz do seu repositório, abrindo uma linha de comando. Ele analisa os arquivos por meio de comandos bash e expressões regulares e produz um diagnóstico do código com detalhes da arquitetura, ferramentas utilizadas, organização dos diretórios, etc. A partir daí, você pode usá-lo como um assistente interativo.
Essa abordagem mudou alguns dos nossos procedimentos. Agora, o assistente não entra mais apenas na fase de implementação, mas também na arquitetura das soluções. Para nós, o Claude tem sido útil para
Usá-lo para provas de conceito ajuda a mostrarmos diferentes opções de solução para o cliente, reduzindo o ciclo de feedback. Outro benefício é a entrega mais rápida de código mantendo padrões de qualidade.
O que percebemos de principais limitações do Claude:
Ferramentas de IA no desenvolvimento de software, sem dúvidas, podem ser grandes aliadas para ganharmos em rapidez na entrega de soluções, testando ideias e delegando a implementação de trechos mais "braçais" de código. Porém, para obter os melhores resultados, ainda é preciso que programadores entendam bem as tecnologias, o sistema e as regras de negócio. Com essas informações, potencializamos as ferramentas de IA para produzirem soluções razoáveis. Sem elas, é praticamente inevitável que o sistema não se sustente no longo prazo. Além do mais, ainda é preciso um olhar técnico para avaliar as soluções sugeridas, realizar ajustes e, as vezes, recomeçar, exigindo maior domínio de abstrações, padrões de código e experiência em identificar erros comuns. Continuamos, por isso, usando a maior parte do nosso tempo como programadores: pesquisando, estudando e pensando na melhor solução para o problema.
O que imaginamos para um futuro próximo com o uso de IA na Irya será: