Evoluindo Infraestrutura

Esse post foi traduzido automaticamente do inglês. Se você encontrar algum erro, por favor entre em contato.

Há mais de alguns anos, li Agile Modeling de Scott Ambler, que mudou fundamentalmente como eu abordava desenvolvimento de software. O insight central do livro se mostrou revelador: software poderia evoluir incrementalmente em vez de exigir uma arquitetura exaustiva definida antecipadamente.

O livro enfatiza um princípio que ressoou profundamente:

Sua primeira responsabilidade é fazer o código funcionar para o problema que você está resolvendo agora. A segunda é o problema que você vai resolver em seguida.

Hoje, desenvolvimento incremental de software é quase universal entre organizações competentes. No entanto, o pensamento sobre infraestrutura permanece preso em metodologias waterfall, apesar das ferramentas modernas de DevOps permitirem provisionamento dinâmico e deploys automatizados.

Uma Abordagem Melhor para Infraestrutura

Em vez de predeterminar a arquitetura, a infraestrutura deve evoluir junto com as aplicações:

  1. Faça o deploy da sua aplicação como um único processo em um servidor para usuários reais
  2. Aumente a carga de usuários até atingir gargalos de performance
  3. Resolva os gargalos através de otimização — processos adicionais, servidores ou serviços especializados
  4. Repita iterativamente

Objeções Comuns

“Vamos criar infraestrutura de baixa qualidade”

Isso espelha argumentos ultrapassados sobre software precisar de diagramas UML antes de codificar. Simplicidade não significa baixa qualidade; complexidade desnecessária introduz fragilidade. Soluções simples continuam mais confiáveis e robustas.

“Sabemos nossos requisitos de performance”

Novos projetos de software inerentemente contêm incerteza. Fingir que as necessidades de infraestrutura são predeterminadas ignora a realidade.

“Precisamos atender SLAs”

SLAs se parecem com regulamentações de software — às vezes úteis, às vezes justificativas para gastos desnecessários. Atenda seus requisitos de SLA de forma simples; não adicione CDNs ou outros recursos “por precaução”.

O Princípio Central

Código de infraestrutura é código. Trate-o de forma idêntica ao código da aplicação, aplicando os mesmos princípios evolutivos.

Gostou deste post? Escrevo sobre liderança em times de engenharia de software. Assine para ficar por dentro.