9 etapas: escolhendo uma pilha de tecnologia para seu aplicativo da web

Planejar seu novo aplicativo da web pode ser difícil (Foto de Luca Bravo no Unsplash).

Você é um fundador, CEO, CTO, consultor ou outra parte interessada que precisa decidir como criar um produto de software? Está tendo problemas para decidir sobre a pilha de tecnologia para seu aplicativo da web? Você deve usar Python ou Java como linguagem? O node.js ou o Flask / Django é a escolha certa para o framework da web? Qual é a melhor opção de front-end: Angular, React ou VueJS? E o banco de dados - MySQL, Postgres ou MongoDB? Você deve se auto-hospedar com Apache ou Nginx no DigitalOcean, ou apenas ir com o Amazon AWS? Talvez você prefira trabalhar com um PaaS como o Heroku?

Se você tem um milhão de perguntas e não sabe por onde começar, este artigo pode ajudá-lo a tomar sua decisão.

1. Mantenha as coisas simples. Seja ágil!

Muitas vezes, a tecnologia que você escolhe nunca acaba importando, porque o produto em si falha. Muitas startups usam uma tecnologia de escala e gastam tempo e energia em uma construção robusta, apenas para descobrir que não há mercado para seu produto.

Sempre que você quiser criar um produto do zero, a melhor opção é seguir a solução mais fácil. Uma página de destino com Wordpress ou Unbounce poderia muito bem ser suficiente. Talvez até uma página estática fingindo o que você está tentando resolver funcione. É importante avaliar o interesse no seu produto antes de você ter problemas para construí-lo. Tudo bem se a tecnologia para a prova de conceito acabar sendo diferente da que você usa no final.

Assim que souber que seu conceito funcionará, você poderá avançar na criação do produto. Mantenha-se ágil durante esta fase. Você nunca deve passar vários meses compilando uma especificação de sistema de 100 páginas (“Pflichten- und Lastenheft” em alemão) para os desenvolvedores, especialmente se ela exigir 6 ou 12 meses para a realização do produto. Provavelmente resultará em um produto obsoleto ou entregue muito tarde.

Pense: as primeiras coisas primeiro. Execute uma página básica, seu primeiro recurso e seu segundo. As vantagens de fazer as coisas dessa maneira são que você pode avaliar o progresso em tempo real e mudar de direção conforme necessário. Você minimiza seu risco porque seu sistema já está em execução. Você ainda não pode ter todos os recursos que imaginou, mas está em execução!

2. Pense em suas necessidades pessoais

Mantenha o espaço do problema em mente. A tecnologia que você escolher deve depender do problema que você deseja resolver. Algumas coisas são melhores em um idioma do que em outro - por exemplo, o Python é ótimo para computação e estatística.

Usuários antes da tecnologia

Os produtos devem ser criados para seus usuários. Qual produto você deseja construir? Como você pode criar a melhor experiência do usuário? Pense em quem usará seu sistema. Eles funcionarão em desktops ou tablets? Eles acessarão as coisas por meio de uma conexão móvel (como atualmente 60% de todos os usuários)? Deve haver um aplicativo no estilo de área de trabalho? Quais navegadores serão usados ​​com mais frequência?

Velocidade e desempenho

Você tem critérios (excluindo)? O software estará sendo executado em sua intranet? Nesse caso, os tempos iniciais de carregamento podem ser inferiores ao ideal.

R Novamente, sempre pense em agilidade quando possível. O desempenho é realmente um problema com o qual você precisa lidar agora? Se você pretende ser grande, sempre pode começar com a Plataforma como Serviço (como o Heroku) antes de melhorar o desempenho com sua própria infraestrutura. Em vez de gastar tempo e dinheiro quando você ainda é muito pequeno, pode se preocupar com o desempenho depois de ultrapassar o limite de tamanho apropriado.

Migrações e sistemas legados

Você possui bancos de dados e / ou dados que precisam ser migrados? Você tem sistemas legados que precisam ser transferidos para o novo sistema? Essas e outras considerações semelhantes precisam ser examinadas e avaliadas.

Segurança

A segurança nunca deve ser negligenciada. Dependendo do tipo de dados com que você trabalha, a segurança pode até ser o fator mais importante. Determine por que você precisa proteger algo antes de decidir como protegê-lo. Mas lembre-se, a tecnologia não é tudo - lembre-se de que a segurança depende principalmente do conjunto de habilidades de seus desenvolvedores, do ambiente de trabalho e das políticas que você implementa.

3. Escolha tecnologias de código aberto

Ao criar um novo software, você deve procurar soluções de código aberto. Eles impedem que você precise construir tudo do zero; economizará muito tempo e provavelmente é mais seguro (muitas cabeças são melhores que poucas). Você também poderá se concentrar no lado comercial e destacar seu produto. Lembre-se de retribuir à comunidade de código aberto!

Depois de selecionar uma tecnologia em potencial, você deve executar uma lista de verificação. Que tipo de licença possui? O idioma ou a estrutura possui os recursos que você ou seus desenvolvedores precisam? Quantos desenvolvedores principais existem? Você pode conferir os colaboradores ou estrelas no repositório do Github e como eles evoluíram com o tempo. O código-fonte é fácil de entender se você precisar se aprofundar e verificar o algoritmo sob o capô? A documentação é abrangente, a tecnologia é exaustivamente testada e existem boilerplates para você começar rapidamente?

Outra questão importante: como a equipe por trás da tecnologia lida com problemas de segurança? Existe um endereço de email para relatar vulnerabilidades de segurança?

4. Verifique o ecossistema

Toda tecnologia possui um ecossistema composto por pessoas e ferramentas.

Qual é o tamanho do ecossistema por trás da linguagem ou estrutura? Quantas perguntas sobre o Stackoverflow, conferências e tutoriais on-line (por exemplo, Udemy) existem? O que o Google Trends diz? O interesse pelo software ainda está crescendo? Quantos pacotes (npm, PyPi etc.) existem e eles têm licenças com as quais você pode trabalhar?

Você conhece as listas impressionantes? Eles ajudam a cavar o ecossistema de um idioma ou estrutura. Você pode verificar tutoriais, artigos e pacotes importantes relacionados a uma determinada tecnologia. Existem listas para Django, node.js, React, Angular e muito mais.

Também importante: a comunidade está recebendo novos membros e quão ativa é a comunidade? Como é o suporte para usuários e desenvolvedores? Existe uma lista de discussão, um canal de bate-papo, uma sala Slack ou um sistema de emissão de bilhetes? As pessoas estão blogando sobre a tecnologia?

5. Tendências e suporte a longo prazo

Ciclos de vida do mercado

Toda tecnologia tem um ciclo de vida. Você deseja escolher tecnologias maduras porque elas são confiáveis. Você deve verificar o Radar de Tecnologia mais recente para ter uma idéia de como são as tecnologias à prova de futuro; isso pode ajudá-lo a decidir se deve adotá-los ou colocá-los em espera. O Radar Tecnológico é gratuito e separa as tecnologias nas categorias de Técnicas, Plataformas, Ferramentas e Idiomas e Estruturas. No entanto, você deve usar o recurso com cuidado, pois as informações fornecidas não estão definidas.

Outra idéia é verificar as pilhas de tecnologia favoritas do setor com stackshare.io ou techstacks.io. Confira o que o Airbnb está usando ou o que as pessoas gostam no AngularJS e quem está usando. Se você não tiver certeza sobre uma tecnologia, pode procurar alternativas. Aqui está uma lista de alternativas para Angular JS em alternativeto.net.

Suporte a longo prazo do fornecedor

Parece que o fornecedor de tecnologia estará disponível por um tempo? As grandes empresas estão patrocinando o desenvolvimento da tecnologia em questão? O Google está por trás do Angular e o Facebook está por trás do React. Isso significa que deve haver algum progresso, até que a empresa decida desistir do suporte (sim, isso pode acontecer). Mas quanto maior a comunidade, maior a chance de as coisas permanecerem por algum tempo.

Alguns aplicativos têm versões com suporte a longo prazo. As versões especificadas são fornecidas com correções de bugs por um determinado período de tempo. Você também deve verificar a página da tecnologia: como as atualizações são tratadas? Quão fácil é o processo de atualização / migração? Houve versões particularmente incompatíveis (como Angular 1 e Angular 2)?

6. Recursos humanos e recrutamento

Quais desenvolvedores você tem do seu lado? Se você precisar decidir sobre uma tecnologia front-end e tiver três desenvolvedores Angular fortes, provavelmente deverá trabalhar com eles. Mover-se rapidamente pode ser importante, e é uma grande vantagem ter pessoas que estão em sua zona de conforto, em vez de aprender uma nova tecnologia. Além disso, o conhecimento existente do ecossistema é um benefício adicional.

Em relação ao recrutamento, verifique o seguinte: você pode encontrar desenvolvedores de qualidade suficientes para a tecnologia desejada? Quanto você precisa pagar? As grandes empresas estão trabalhando com as mesmas tecnologias e adquirindo todos os bons desenvolvedores? Os desenvolvedores que você encontra na maior parte são profissionais estabelecidos ou é difícil diferenciar entre eles e as crianças do script? Um bom desenvolvedor Java pode ser mais fácil de encontrar do que um bom desenvolvedor Ruby on Rails ou PHP. Para sua pesquisa, você pode verificar os portais XING, LinkedIn ou de busca de emprego. Você também pode verificar as tendências do trabalho (por exemplo, comparando Angular com React).

A tecnologia é fácil de aprender? Uma linguagem fácil pode ajudá-lo a encontrar e treinar desenvolvedores juniores, e todo o ecossistema pode atrair mais pessoas.

Por último, mas não menos importante: um ótimo recurso em RH é a pesquisa do Stackoverflow Developer. Ele fornece uma excelente visão geral dos tipos de desenvolvedores, tecnologias utilizadas e relatórios salariais. Dar uma olhada!

7. Você será flexível o suficiente?

Granularidade do serviço

As coisas estão mudando muito mais rapidamente do que há 20 anos. Por um longo tempo, as pessoas trabalharam principalmente em computadores desktop e com Windows. Provavelmente não será esse o caso daqui a dez anos. A tecnologia escolhida provavelmente ficará com você por 5 a 10 anos: isso é muito tempo e você não pode ter certeza de como as coisas evoluirão. É por isso que você precisa estar preparado para alterar as tecnologias quando necessário.

Pense granular, pense em pequenos pacotes e pense na separação de preocupações. Você deve separar serviços, back-ends e front-ends em aplicativos e microsserviços menores. Você poderá trocar facilmente as tecnologias quando as existentes não funcionarem mais para você. Confira conceitos como arquitetura orientada a serviços (SOA) e design orientado a domínio (DDD).

Você pode fiança? Será que vai escalar?

Você sempre tem acesso aos dados? Sempre é possível exportar seus dados se você precisar alterar as tecnologias? A tecnologia possui uma API para permitir flexibilidade do outro lado? Talvez você queira abrir seu aplicativo para seus clientes ou clientes, ou queira criar aplicativos móveis, aplicativos de desktop ou outros sistemas sobre a tecnologia escolhida.

8. Como se sente?

Peça aos desenvolvedores que analisem a tecnologia ou faça você mesmo. Quais são as suas primeiras impressões? Faça uma pequena configuração piloto, experimente boilerplates existentes ou (se possível) faça um pequeno projeto de teste. Se você optar por serviços granulares, poderá criar um novo pequeno serviço com uma determinada tecnologia e ver como ele funciona.

Também existem aplicativos do mundo real que podem lhe proporcionar uma melhor compreensão das diferenças. TodoMVC é um ótimo projeto - um aplicativo Todo simples é realizado com diferentes estruturas Javascript, e você pode conferir a arquitetura do código-fonte. Existem todos os tipos de exemplos, e você pode comparar Angular com React ou Vue com Ember.

O incrível projeto RealWorld vai ainda mais longe: é um aplicativo de pilha completa do tipo Médio que utiliza Django ou node.js para o back-end e Angular ou React para o front-end. Você pode ler um artigo introdutório sobre Eric Simons.

9. Comece

Se você é uma pequena startup, chegar ao mercado é mais importante do que ter a tecnologia perfeita. Concentre-se nos seus negócios e marketing, em vez de ter toda a pré-otimização tecnológica necessária para lidar com a quantidade de usuários que o Facebook possui. Você provavelmente não terá todo o conhecimento necessário em um estágio inicial, mas poderá ajustar e otimizar as coisas ou alterar as pilhas de tecnologia à medida que cresce (e tem o orçamento necessário).

Como empresa, as coisas podem ser diferentes. De qualquer forma, a decisão será política - as pessoas da sua empresa precisam concordar com a sua decisão. A gerência (e espero que os desenvolvedores internos / potenciais) sejam provavelmente as partes mais importantes a ter em conta.

É importante ter em mente que qualidade é uma questão de fazer as coisas corretamente. A tecnologia não é a única coisa que importa: você precisa do design certo, dos requisitos certos, dos procedimentos de teste e assim por diante. O mais importante é garantir que você não se limite em termos de escala ou migrando para uma tecnologia diferente no futuro.

Mais recursos:

  • Como escolher as tecnologias certas para o seu projeto de software (uma lista de leitura rápida de tópicos)
  • Como escolher a pilha de tecnologia certa para o seu aplicativo (bom artigo discutindo a decisão dependendo do tamanho / status da empresa)
  • 5 dicas para escolher a pilha de tecnologia da sua startup (boa listagem e um aviso dos agitadores técnicos)

Obrigado pelo seu interesse. Esqueci algo importante? Você tem uma opinião diferente? Sempre fico feliz em receber feedback.

Siga-me no Twitter para atualizações e muito mais: @jensneuhaus -