OpsFirst: workflow de desenvolvimento com foco em "ops"

Nos últimos 10 anos, a forma que desenvolvemos e fazemos deploy de aplicações mudou bastante. A popularização de ferramentas de controle de versão e também ferramentas de "configuration management" tiveram um papel importante nessa mudança, criando novos processos e workflows que levaram deploy de servidores e aplicações para outro nível. Apesar disso, alguns desenvolvedores ainda preferem continuar usando métodos ultrapassados, por várias razões. Esse post explica de uma maneira sintetizada porque é importante se dedicar à parte de "OPS" antes mesmo de começar a desenvolver a sua aplicação.

Written by Erika Heidi on Wednesday April 15, 2015 - Permalink -

Nos últimos 10 anos, a forma que desenvolvemos e fazemos deploy de aplicações mudou bastante. A popularização de ferramentas de controle de versão e também ferramentas de "configuration management" tiveram um papel importante nessa mudança, criando novos processos e workflows que levaram deploy de servidores e aplicações para outro nível. O fato de que grande parte dos desenvolvedores atualmente não são apenas responsáveis por código - tendo que assumir também responsabilidade do deploy e confguração de servidores em produção - influenciou igualmente essa evolução. Hoje em dia temos muitas ferramentas para facilitar a manutenção de servidores, automatizando todo o processo de instalação e deploy de aplicações de uma maneira programática (do jeito que os programadores adoram). 

Esse progresso não se limita apenas a ambientes em produção. Finalmente temos as ferramentas e o poder de processamento necessários para criar ambientes que são de fato isolados e podem ser usados de maneira transparente para desenvolvimento. Apesar disso, alguns desenvolvedores ainda preferem continuar usando métodos ultrapassados, por várias razões. A desculpa mais comum é que dá muito trabalho - ter que fazer o setup e automatizar a criação de um ambiente de desenvolvimento (uma VM por exemplo) apenas para começar a desenvolver a aplicação, antes mesmo de saber com certeza quais as dependências que serão necessárias no futuro - e ninguém tem tempo pra isso. Bom, se você pensa dessa maneira, esse post é pra você.

Ao invés de começar diretamente com código, na minha experiência pessoal considerar a parte de "ops" primeiro provou ser extremamente produtivo, porque quando a aplicação está finalizada eu já tenho tudo pronto para fazer o deployment. Quando eu uso o termo "ops" não estou falando de instalar um LAMP / WAMP ou coisa do tipo na minha máquina local. Estou falando de realmente planejar e preparar um ambiente de desenvolvimento que de fato simula o que teremos em produção, onde você pode facilmente fazer modificações e desfazê-las caso necessário. Também é importante garantir que o processo de criação desse ambiente seja facilmente replicável, porque na fase de desenvolvimento o ambiente deve ser descartável e fácil de compartilhar com colaboradores. Para sintetizar e facilitar a memorização, vou chamar esse tipo de ambiente de DRIVE - Disposable, Replicable, Isolated and Versioned Environment.

Eu chamo essa metodologia de opsFirst (ops primeiro), e a idéia é não deixar a preocupação com configuração do ambiente e deploy para última hora, o que é bastante comum. Sei que quando iniciamos um projeto novo queremos ir diretamente mexer com código (e depois a gente resolve o resto, não é verdade?) mas quando você chega no final do projeto, depois de meses de desenvolvimento, é muito pior ter que parar pra resolver tudo isso. A ansiedade pra lançar o projeto novo acaba levando o desenvolvedor a não se dedicar em resolver a parte de deploy e configuração do servidor de maneira adequada, o que certamente trará problemas no futuro.

Quando você dedica um tempo inicial à parte de OPS, preparando um provisionamento para automatizar a configuração do servidor, ao final do projeto você já resolveu os pequenos bugs que podem aparecer devido ao ambiente, e para colocá-lo em produção é apenas uma questão de pequenas adaptações, usando o "DRIVE" como base.

Resumindo tudo em um gráfico:

comments powered by Disqus