Como decidir qual tecnologia utilizar?

Otávio Machado
4 min readOct 9, 2017

--

No mundo da TI, existem diversas vertentes — os conservadores, os hipsters, os aventureiros — e a cada dia uma nova tecnologia é criada, com o objetivo de solucionar um problema de uma forma melhor, ou com uma perspectiva diferente.

Tradução: O que eu escolho? Tem muitas opções!

Antes, um mundo que se resumia a um pequeno punhado de linguagens, com um conjunto restrito de opções de ferramentas e frameworks, hoje são oceanos que geralmente confundem o processo decisório — e o que foi feito pra nos ajudar, no fim das contas acaba sendo algo que nos bloqueia.

Nos últimos tempos, aprendi que algumas características podem favorecer ou desfavorecer minha aceitação de uma tecnologia, de acordo com o contexto onde estou inserido. E, como parte do meu aprendizado, gostaria de compartilhá-lo, como forma de, também, refiná-lo.

Tradução: Poderosa, informação é.

Estas características são:

  1. É uma tecnologia de código aberto?
    Este ponto é o único que considero um deal breaker. Tecnologias proprietárias geralmente demoram um tempo considerável lançar atualizações, e geralmente não disponibilizam material para seu aprendizado de forma aberta.
    Como um desenvolvedor, vejo bastante sentido em ser capaz de fazer parte da construção da tecnologia, caso precise de algo que ainda não foi feito, e de ler o código-fonte que implementa as soluções que estou utilizando.
  2. O quão nova é esta tecnologia?
    Há várias informações por dentro dessa simples pergunta. No desenvolvimento de software, existem sempre várias formas de resolver um problema, e várias tecnologias que te auxiliam neste processo. Ruby ou Go? JMeter ou Gatling? Minitest ou RSpec?
    A ideia é que tecnologia evolui, e aprendemos com os nossos erros. Tudo o que é novo tem a premissa de resolver um problema através de uma nova ótica, ou de forma melhor; isso não significa que seja melhor para o seu problema, ou para todos os problemas.
    Mas ser novo traz consigo também a oportunidade de colaborar com a sua evolução — e também de encontrar defeitos na sua criação. O que tem mais valor para o seu time?
    Você pode estar na crista da onda da evolução tecnológica ou ter que escolher uma nova ferramenta, caso esta seja descontinuada. O ganho vale este risco?
  3. Quantas issues existem abertas hoje?
    Se existe uma tecnologia nova com vários problemas e defeitos já reportados e que não foram solucionados, podem ser indicativos de que ela não tem mais uma comunidade muito ativa, ou está sendo descontinuada pois algo mais novo e mais brilhante nasceu.
    Isso pode ser uma oportunidade de colaborar ativamente com algo que você realmente acredita, ou um sinal forte de que você deveria também procurar sua boia para saltar deste barco furado.
  4. Qual a frequência de atualizações da tecnologia?
    A frequência na qual são lançados releases também é um indicativo de quão ativa a comunidade é, e em quão rápido os problemas são resolvidos. Às vezes tecnologias mais antigas e bem consolidadas têm um ciclo de lançamento mais demorado, já que não há mais muitos erros urgentes a serem corrigidos, mas isso também pode significar que aquele teste específico que a tecnologia não cobre pode demorar a ser suportado.
  5. Qual o tamanho da comunidade?
    Quantos contribuidores o código-fonte tem? Quantas estrelas, forks e watches no GitHub? Parece uma métrica superficial, mas pode mostrar o quão amigável a tecnologia é em relação a contribuições que vêm de fora do círculo comum.
    Quanto maior a comunidade, maior o suporte que você terá em aprender a utilizar, tirar dúvidas sobre e até passar por problemas que já foram documentados na própria ferramenta ou no stack overflow.
  6. O quão complexo é preparar o terreno para utilizar a aplicação?
    Para alguns projetos, isto é crítico. Se você precisa ser capaz de fazê-la funcionar no melhor estilo plug-and-play, pode ser que uma tecnologia muito complexa não seja a melhor opção.
  7. O quão complexo é escrever um código simples?
    Existem tecnologias que, acredite, você precisa fazer um curso para utilizá-las, mesmo que de forma básica.
    Talvez valha a pena tal esforço, se for a solução de um problema crítico para seu projeto, mas quanto mais simples, melhor. Note que complexidade é um termo extremamente dependente de contexto. Para alguém que está confortável com Java, pode exemplo, utilizar uma tecnologia que implementa testes em outra linguagem de programação possa torná-la complexa.
  8. Quão difícil é integrar a tecnologia a uma estrutura de CI?
    Não sei se isso é um ponto comum para você, mas automatizar trabalhos que podem ser automatizados sempre é algo que vale a pena avaliar.
  9. Qual a qualidade do retorno que a tecnologia dá?
    Se você não entendeu direito, tudo bem. Eu quis ser genérico, mesmo.
    No caso de uma ferramenta de testes, por exemplo, gostaria de saber se ela me gera relatórios de simples visualização, ou simplesmente executa sem me retornar um feedback dos testes que falharam ou passaram.
    No caso de uma ferramenta de provisionamento, gostaria de saber se ele ocorreu com sucesso, ou por que falhou.
  10. O que torna esta tecnologia especial?
    Geralmente o que torna uma tecnologia conhecida é a capacidade de resolver um problema novo, ou um problema já resolvido, mas através de uma nova ótica, ou de forma mais fácil.
    Talvez seja uma tecnologia muito difícil de utilizar, mas traga algo muito novo, que faça muito sentido para o seu contexto.

Quais características são importantes para você na hora de escolher uma nova tecnologia para utilizar no seu projeto, ou para aprender? Esta lista te ajudou? Não concorda com algo?

--

--

Otávio Machado

Works in tech for 10+ years, learning to be the best engineer and the best leader I can be as I go. When in doubt, choose to be kind.