Equipe exclusiva para operações

Como implementar os conceitos do DevOps na sua empresa?

“DevOps não é time, é cultura”
Essa é uma resposta comum quando se sugere montar um time responsável pelas práticas DevOps. Por um lado a crítica faz sentido, porque para que um projeto tenha práticas DevOps bem implementadas, pessoas de diversas áreas precisam colaborar. Por outro, é uma resposta vaga e não ajuda quem está buscando implementar o DevOps na empresa e não sabe por onde começar.

Considerando que DevOps consiste na união de práticas, processos e ferramentas para se entregar e manter software com mais eficiência em todo seu ciclo de vida, qualquer empresa que produza software, independente da estrutura organizacional, pode implementar algumas das disciplinas dentro dos limites impostos pela organização e tirar proveito disso. Uma empresa pode não utilizar nuvens públicas mas possuir práticas modernas de versionamento de código e CI/CD, por exemplo. Com o tempo, maturidade e a confiança baseada nos resultados positivos dessas práticas, as empresas podem explorar outras disciplinas, ou não.

Dependendo de fatores como criticidade dos projetos, autonomia dos desenvolvedores, estrutura organizacional e grau de burocracia nos processos, diferentes configurações de times e divisões de responsabilidades podem ser mais adequadas.

Equipes multidisciplinares

Equipes multidisciplinares
Equipes multidisciplinares

A princípio, pode-se imaginar uma equipe multidisciplinar, dividindo responsabilidades de desenvolvimento e operações. Isso pode significar em equipes de desenvolvedores com entendimento das ferramentas e plataformas utilizadas, ou equipes mistas, com desenvolvedores e especialistas de plataforma.
Esse cenário é mais simples quando se trata de desenvolvimento moderno com utilização de nuvens públicas. Os produtos desenvolvidos podem já nascer prontos para a nuvem, com os scripts de criação e configuração dos ambientes em que serão publicados. A nuvem pública abstrai boa parte do esforço operacional de manter a solução no ar – com recursos como geo-redundância (em que os produtos são publicados em datacenters com localizações distintas) e configuração automática de elasticidade (mais ou menos instâncias do produto de acordo com a demanda), por exemplo, o time depende de uma alocação menor de pessoas altamente especializadas na plataforma para garantir a disponibilidade dos produtos.

Equipes distintas para o desenvolvimento e operações

Equipe exclusiva para operações
Equipe exclusiva para operações

Para empresas maiores e/ou que provêm soluções críticas, equipes multidisciplinares não eliminam a necessidade de administrar a infraestrutura e os processos de operações como um todo, supervisionando a utilização de recursos e garantindo que as práticas de DevOps estejam sendo bem implementadas.
Além disso, atividades de operações tendem a se repetir. Uma empresa com determinado conjunto de plataformas e tipos de serviço precisará de poucas variações de preparo de ambientes e esteira de deploy. Não é eficiente que as equipes de desenvolvimento também sejam responsável pelas automações operacionais sem algum tipo de colaboração e compartilhamento de soluções. Isso pode acarretar em má administração de recursos de infra e perda de foco do time de desenvolvimento.

Nesse cenário pode-se pensar em uma equipe especializada na administração de recursos das plataformas e ambientes utilizados, com práticas de infraestrutura como código e automações, fornecendo ferramentas para que os times de desenvolvimento tenham o máximo de foco e produtividade para desenvolver os produtos sem se preocupar com as automações de processos operacionais.

Alocações de acordo com a demanda do projeto

Alocações conforme a demanda
Alocações conforme a demanda

Quando a estrutura organizacional separa as equipes de desenvolvimento e operações em departamentos com gerências e prioridades próprias, normalmente a equipe de operações atende vários setores da empresa ao mesmo tempo, dificultando a alocação exclusiva de alguns profissionais para determinado projeto.

Algumas responsabilidades como gerenciar os bancos de dados e ambientes de produção ficam a cargo do time de operações, sem que as equipes de desenvolvimento tenham autonomia para decidirem fatores mais adequados ao projeto – até porque muitas vezes a infraestrutura é compartilhada entre projetos diferentes, e uma mudança em um servidor feita para atender um projeto pode gerar efeitos colaterais em outros.

A não utilização de nuvens públicas ou híbridas pode agravar esse tipo de limitação, já que a empresa demanda uma alocação maior de pessoas especializadas para manter e gerenciar as soluções disponíveis, além das demandas de infraestrutura internas.

Em casos em que os produtos compartilham recursos de infraestrutura entre si, os processos tendem a ser mais burocráticos e menos velozes, afinal, as chances de um deploy de um produto gerar efeitos colaterais em outros é maior. Ainda assim é possível aplicar práticas DevOps, contanto que as gerências estejam de acordo em relação à prioridade de desenvolvimento.

As priorização de atividades de desenvolvimento deve ser transparente ao time de operações. A maioria das funcionalidades de software demanda atividades de operações, como aumento de recursos, configurações nos servidores, liberações de rede, etc. O time de operações deve ter acesso ao que está sendo desenvolvido para se antecipar em relação às demandas de infra subsequentes. Isso pode ser por meio de representantes do time de operações participando das reuniões de planejamento dos times de desenvolvimento e vice versa.

Com isso é possível considerar a disponibilidade dos especialistas de infraestrutura durante o planejamento da entrega. O time de operações também precisa ter a “cultura DevOps” para atender essas necessidades com a maior eficiência possível.

Conteúdo recomendado

Nubank’s experience scaling microservices operations
Nessa palestra, o Renan Capaverde e o Gustavo Barrancos contam como foi o processo de evolução da estrutura organizacional da Nubank para atender o crescimento do produto, e os formatos de implantação de DevOps que foram aplicados desde o início da empresa até o modelo usado hoje.

How IT Operations Can Work Better With Agile Teams
Nesse artigo, Tirrel Payton fala sobre as dificuldades que os operadores enfrentam para atender as crescentes demandas do time de desenvolvimento quando as áreas estão sob gestões separadas, e que tipo de ações podem ser tomadas para reduzir conflitos e aumentar a eficiência de entregas.

E se quiserem conferir a “versão vídeo” deste conteúdo, cliquem no link abaixo!

Publicado por

Grazi Bonizi

Coordeno a trilha de Arquitetura .Net no The Developers Conference, compartilho código no GitHub, escrevo no Medium e no Blog da Lambda3, e participo de Meetups e PodCasts normalmente sobre DevOps, Azure, .Net, Docker/Kubernetes e DDD

Deixe uma resposta