Impulsionando a Inovação: A Importância da Prototipação e Validação Rápida no Desenvolvimento de Software

Thiago Cerutti
Ship It!
Published in
7 min readJun 30, 2023

Errar é humano, mas nos dias de hoje, dependendo do contexto, errar é necessário. Não é sobre o erro pelo erro, mas pela descobertas de caminhos para fazer algo novo, que poucos ou ninguém ainda fez.

Inovação é a criação de soluções novas e criativas para desafios e necessidades, mas para chegar em uma solução final, caminhos tortuosos geralmente precisam ser percorridos e erros fazem parte do percurso. Porém onde uns vêem erros, outros veem aprendizado.

Protótipos do Google Glass — Fonte: TecMundo

Validando hipóteses antes de investir alto

A prototipação de soluções é uma técnica fundamental em diferentes áreas, desde a construção de produtos e serviços até a resolução de problemas complexos em diferentes contextos. No livro “The Lean Startup”, o autor Eric Ries apresenta o conceito de ciclo “Build-measure-learn” como uma abordagem eficiente para a prototipação.

A abordagem de criar um Produto Mínimo Viável (MVP) permite testar rapidamente soluções com os usuários e coletar dados para análise. Com base nos resultados, ajustes e melhorias contínuas devem ser realizados, aumentando a eficiência e eficácia das soluções a cada ciclo de aprendizado. A prototipação é uma estratégia eficaz para validar ideias e reduzir riscos pois permite testar hipóteses antes de investir em soluções completas e definitivas, reduzindo tempo e custo de desenvolvimento.

Prototipação em desenvolvimento de software

Enquanto desenvolvemos software como pessoas engenheiras é normal escrevermos métodos, classes e serviços que podem ou não ser utilizados no futuro. Estamos testando a viabilidade de uma possível solução. Escrevemos, apagamos e reescrevemos o código até que o problema que estamos tentando resolver seja solucionado da maneira mais eficiente possível.

Subindo um pouco de nível, dependendo da necessidade, precisamos escrever um software ou serviço em nuvem especializado para resolver determinado problema, seja um processamento de imagem, uma análise automatizada de logs ou ainda tarefas mais complexas que podem depender de outros produtos ou serviços. Mas a pergunta que precisamos resolver ainda é a mesma: “esta proposta de solução resolve o problema proposto? E se resolve, é suficiente para validar ou refutar a hipótese?

Prototipação no final das contas é exatamente sobre isso: validação de uma hipótese da maneira mais rápida e barata possível.

Uma necessidade de casa: inovação em ferramentas de internacionalização

Aqui na RD Station temos a missão de entregar soluções de automação de marketing digital para que nossos clientes possam vender mais e de forma mais eficiente. Temos um enorme número de clientes que já utilizam nossas soluções no Brasil, mas o potencial do mercado internacional ainda é imenso.

Para que nossos produtos sejam internacionalizados de forma apropriada e escalável, precisamos prover ferramentas aos demais times da RD Station para que estes possam desenvolver nossos produtos e soluções já pensando no mercado internacional. É o que chamamos de “global first”, e atualmente nossos produtos devem estar disponíveis nos idiomas Português, Inglês e Espanhol.

Para que este objetivo seja cumprido, não podemos usar textos fixo nas nossas telas, precisamos usar chaves de tradução que serão substituídas em tempo de execução pelo respectivo texto no idioma escolhido pelos nossos clientes nas configurações do sistema.

Validando uma necessidade real

A provocação que nos fez pensar fora da caixa foi “eu como gestor quero saber qual o percentual de internacionalização das nossas plataformas”. A nossa primeira pergunta foi: “e isso é pelo menos possível?”. Mas de acordo com Walt Disney, "se você pode sonhar, você pode realizar", e assim partimos para a validação da hipótese.

A grosso modo pensamos em uma rotina que rodasse no nosso ambiente de integração contínua (CI) que verificasse automaticamente se algum texto foi inserido diretamente no HTML das nossas telas ou se foram usadas chaves de tradução. Cada vez que encontrássemos um texto fixo em Português do Brasil (“pt-BR”), precisaríamos saber qual foi o projeto que gerou este débito técnico e registrar essa informação para futuramente auxiliar os times a resolver essas questões.

Já tínhamos uma rotina que fazia esta checagem de strings “hard coded” usando regras do ESLint. O que precisávamos agora era que esses warnings fossem mandados para um banco de dados (ou quase isso 😎).

Olhando para o custo de uma instância de banco de dados no nosso serviço de nuvem, a complexidade de manutenção de um banco de dados e mesmo a necessidade de um banco de dados (ainda estamos na fase de validação da hipótese, lembra?), contra o custo financeiro zero de armazenar essas informações em uma planilha do Google Sheets, não tivemos muita dúvida. Vamos validar a hipótese da forma mais enxuta e rápida possível, e a nossa arquitetura inicial ficou mais ou menos assim:

Basicamente nosso MVP rodava no CI existente que já executava os passos de checagem sempre que um novo commit era feito em determinada branch. Assim, colocamos mais um passo no nosso CI para que os warning de internacionalização fossem gerados. Implementamos um pacote Node.js que era chamado em um step seguinte à geração dos warnings no CI, e que postava esses warnings para a API do Google Sheets. E uma vez que os dados brutos eram inseridos na planilha, poderíamos agregá-los da melhor forma para transformá-los em inteligência de negócio.

Nossa primeira hipótese foi validada, e sim, conseguimos inferir o percentual de internacionalização de um projeto de forma automatizada! 🎉

Coisas que a vida nos ensinou no processo

Um MVP serve pra validar a hipótese, dizendo se aquilo que se está testando é ou não viável. Um MVP não deve ser considerado como o produto final.

Você descobrirá o que fazer enquanto estiver fazendo. Não existe um processo rígido de especificação, depois validação, depois codificação e depois testes, assim de forma linear e imutável. As vezes implementamos um código em um dia pra jogar fora em outro, absorvendo apenas o conhecimento daquele processo. Precisamos falar com pessoas, entender de negócio e manter muito claro o objetivo final do experimento. Lembre-se de que você está buscando um fim, e não um meio.

Erre rápido, aprenda rápido. No momento da prototipação sua solução não precisa ser a mais rápida ou escalável, ela precisa validar uma hipótese de forma rápida e barata. Se alguma parte da implementação do MVP estiver dando muito trabalho, é possível que você esteja fazendo algo além do necessário. Banco de dados pode ser substituído por planilhas ou arquivos texto; uma tela de formulário a ser desenvolvida pode ser substituída por um Google Forms; a implementação de um serviço pode ser substituído pro chamadas à APIs. Apaixone-se pelo problema, não pela solução.

Evite overengineering a todo custo. Lembre-se que o que você está construindo é um estudo de viabilidade, não um produto final. Quanto mais complexa for a solução, mais tempo será necessário para encaixar novas funcionalidades a ela.

Pense na arquitetura do MVP de forma modular, onde peças de funcionalidade possam ser encaixadas, "plugadas", onde a saída de processamento de uma "peça" seja a entrada de dados da próxima peça. Assim melhorias podem ser aplicadas localmente sem impactar tanto nas demais funcionalidades.

Quebre problemas grandes em problemas menores, e resolva um dos problemas menores por vez.

Ferramentas para prototipação

Dependendo da necessidade, algumas ferramentas serão mais adequadas que outras. Mas determinadas ferramentas tem um uso genérico e podem ser utilizadas pra resolver uma gama maior de problemas.

Desenvolvida pensando em IoT mas podendo ser utilizada para outras finalidades, o NodeRED é uma ferramenta de prototipação baseada em fluxos, onde a saída (output) de um processo é a entrada (input) para o próximo processo.

Exemplo de fluxo no NodeRED para captação de leads
Tela de exemplo de captação de leads feita com NodeRED

Esse fluxo acima exemplifica a facilidade de criar um MVP de um formulário de captação de leads, onde o usuário informa nome e email. Ao clicar em enviar é mostrada uma mensagem de confirmação visual, e ao mesmo tempo é iniciado o fluxo de registro. No fluxo acima, caso o email fornecido já exista na "base de dados" é enviado um email de boas vindas, e caso ainda não exista na base, o lead é registrado e em seguida o email é enviado.

Simples assim, MVP feito em pouco mais de 10 minutos e (quase) sem código!

Resumindo

Prototipação é uma abordagem valiosa para validar hipóteses, explorar soluções viáveis e aprender rapidamente ao longo do processo de desenvolvimento de software. É essencial apaixonar-se pelo problema em vez de se apegar excessivamente a uma solução específica. Ao adotar uma abordagem modular e quebrar problemas complexos em partes menores, é possível alcançar resultados mais eficientes e evitar o “overengineering”. Ao abraçar a mentalidade de aprendizado contínuo e priorizar a validação rápida das hipóteses, as pessoas engenheiras de software podem impulsionar a inovação e obter insights valiosos para o desenvolvimento de produtos mais robustos, inteligentes, inovadores e eficazes.

Happy prototyping! 😉

--

--