Mais do que uma nova tecnologia, o DevOps pode ser interpretado como uma nova cultura que influencia diretamente a estrutura organizacional e de TI de uma empresa.
Patrick Debois, considerado o pai do DevOps, criou o evento DevOpsDays em 2009 com objetivo de compartilhar experiências e soluções para integrar desenvolvedores e administradores de sistema. O objetivo desse encontro era discutir, enfrentar e encontrar formas de superar os problemas culturais nas áreas de TI doss mais diversos tipos de organizações.
Em 2010 durante a edição Mountain View do DevOpsDays, John Willis e Damon Edwards criaram o acrônimo CAMS que define 4 eixos para o DevOps: cultura, automação, avaliação e compartilhamento.
O que é DevOps?
Em relação às premissas técnicas, um ambiente influenciado pela cultura DevOps normalmente possui as seguintes características:
- Infraestrutura como código
- Orquestração de servidores
- Deploy Automatizado
- Gerência de configurações
- Provisionamento dinâmico e automatizado de ambientes
- Controle de versões compartilhado entre infraestrutura e desenvolvimento
- Múltiplos ambiente para sistemas (desenvolvimento, teste, produção)
- Ambientes de entrega e integração contínua (CI/CD);
- Publicação de novas versões de software passando por um pipeline de testes automatizados que aceitam ou não a versão (TDD/BDD/ATDD);
- Coleta, Processamento, Armazenamento e visualização de dados dos serviços e sistemas;
- Monitoramento do ponto de vista do negócio com processamento adequado dos eventos e métricas
- Capacidade de resposta rápida a incidentes e problemas utilizando automação
- Backup e restauração confiáveis
Infraestrutura x Desenvolvedor
Infraestrutura deve participar do desenvolvimento desde o início
O desenvolvedor precisa envolver o time de infraestrutura nos projetos desde o seu início, ou seja, um representante da equipe deve participar das reuniões técnicas e do desenho do projeto desde o dia inicial. Sem os recursos de infraestrutura não há projeto, portanto a visão sistêmica de quem vai garantir disponibilidade, segurança, desempenho e monitoração tem que estar presente desde o início. O especialista em infraestrutura deve ter uma voz ativa, participar das tomadas de decisão e ajudar na escolha das tecnologias deste projeto.
Quanto mais falhas forem resolvidas durante o período de desenvolvimento do projeto menor é a possibilidade de problemas serem expostos aos clientes. Quando os times trabalham junto,s o produto tem maior qualidade e desempenho pois ambos agregam valor e conhecimento ao projeto.
Infraestrutura deve participar das reuniões de desenvolvimento
A infraestrutura também precisa observar quais são as metas da empresa a longo prazo, principalmente aquelas ligadas ao desenvolvedor. Ao entender onde o setor de desenvolvimento quer chegar, ela pode se programar melhor para ter certeza que a infraestrutura tecnológica estará preparada para atendê-los quando necessário.
Desenvolvimento deve participar das reuniões de infraestrutura A infraestrutura precisa envolver o desenvolvimento em suas reuniões, deve haver sempre um representante acompanhando as reuniões técnicas para que o desenvolvedor entenda e tenha ciência da realidade de infraestrutura. Dessa maneira, é possível enxergar suas qualidades, atribuições, planos de melhorias, atualizações programadas e agendas de manutenção, além de conhecer os recursos disponíveis e as limitações da equipe (técnicas ou materiais). Além disto, o desenvolvedor pode ser um grande aliado da infraestrutura na solução de problemas, afinal o conhecimento que o desenvolvedor traz pode ajudá-los a melhorar a forma com que administram seu ambiente, tornando o processo mais eficiente, principalmente na parte de automação.
Ambiente de entrega contínua
O desenvolvimento precisa adotar alguma metodologia de entrega ou integração contínua para facilitar o trabalho de ambos os times. A infraestrutura também precisa entender esse processo para que juntos criem os ambientes com as ferramentas certas que vão ajudar a agregar valor a organização e aos times.
Entrega automatizada
Uma vez criado um pipeline de entrega, todo o processo de deploy passa a ser automatizado – isto inclui a partes dos testes que farão parte do pipeline. Com a ajuda dos testes, quem define se um software está apto ou não para ser publicado é o próprio pipeline. Ele pode ter todo o tipo de testes integrados: carga (stress), funcional e aceitação (tdd/atdd), compartamento (bdd). Se o software passar em todos os testes, ele pode ser publicado diretamente, passar ainda por uma equipe de QA ou pela aprovação final de algum setor. A infraestrutura nesse caso não interfere na publicação – ela apenas mantém o pipeline funcionando e todo o controle está na mão das equipes que criam a ferramenta.
E os valores humanos?
Para a adoção da cultura DevOps funcionar, a equipe precisa observar e exercitar os seguintes valores:
- Confiança no trabalho de sua equipe
- Compartilhamento das responsabilidades
- Respeito pessoal e profissional por todos da equipe
- Sinceridade sobre eventos e incidentes ocorridos
- Honestidade sobre as causas dos incidentes (não esconda nada da sua equipe)
- Entendimento de que o problema é responsabilidade de todos
- Entendimento de a solução é responsabilidade de todos
- Entendimento de que os resultados são o reflexo do trabalho de toda a equipe
- Comunicação efetiva e dinâmica
- Postura construtiva sempre
- Espírito de colaboração
Também é recomendável que a equipe:
- Internalize e adapte métodos ágeis como KABAN, DOJOS, SCRUM, HACKATONS, para seu dia-a-dia fluir melhor
- Aprofunde estudos em entrega e integração contínua
- Aprofunde estudos em gerência de configurações e orquestração
- Aprofunde estudos em coleta de dados e processamento de métricas, sem métricas não há administração eficiente
Como a cultura DevOps é aplicada?
Startups
A cultura DevOps combina muito com startups, pois nesse tipo de empresa normalmente já se trabalha o desenvolvimento utilizando metologias ágeis. Foi inclusive nesse nicho no qual a discussão sobre infraestrutura ágil – a precursora do movimento DevOps – foi iniciada. Não há grande dificuldade para absorção da cultura DevOps nas startups: elas conseguem compreender os conceitos de colaboração e feedback pois eles já fazem parte do seu dia-a-dia.
Um grande facilitador para a implementação da cultura DevOps em startups é que normalmente a equipe não tem as amarras e vícios da corporação. Não é necessário nenhum tipo de intervenção para internalizar a cultura: a partir do estímulo de um líder as pessoas começarão a estudar e aplicar DevOps naturalmente. A falta de divisões e departamentos também é um facilitador, pois não existem barreiras para a comunicação interna.
Ambiente corporativo
A corporação não funciona como a startup, pois há mais burocracia e o uso vicioso de métodos ultrapassados. Dessa forma, não bastará o estímulo da alta hierarquia para que equipes de infraestrutura e desenvolvimento comecem a vivenciar a cultura DevOps. A estratégia mais eficiente é trazer um profissional externo que conhece DevOps para que esta pessoa passe a contaminar os demais. Esse processo é lento, mas se o especialista tiver os meios e o apoio do alto escalão, mudanças fantásticas poderão ocorrer.
Quais as vantagens de adotar a cultura DevOps?
Para a infraestrutura
- Infraestrutua como código (equipe para de administrar e passa a desenvolver a infraestrutura)
- Infraestrutura mais eficiente e rápida usando métodos ágeis
- Equipe de infraestrutura mais organizada
- Equipe de infraestrutura se comunica melhor
- Infraestrutura fazendo mais em menos tempo com menos gente
- Ambientes de gerência de configuração, orquestração e provisionamento implantados
- Implementações de infraestrutura (novos ambientes) mais rápidos e seguros => entrega rápida
- Ambiente padronizado e sob controle
- Feedback rápido em todas as atividades de infraestrutura
Para o desenvolvimento
- Desenvolvimento tem ambiente mais adequado para trabalhar (dev/teste/prod)
- Desenvolvimento passa a contar com ambiente de entrega e integração contínua
- Desenvolvimento passa a contar com testes automatizados
- Desenvolvimento de apps (novas versões) mais rápidos e seguros => entrega rápida
- Feedback rápido em todas as fases de desenvolvimento
- Benefícios mútuos entre Infraestrutura e Desenvolvimento
- Acaba a divisão Infraestrutura vs Desenvolvimento
- Infraestrutura participa dos projetos e acompanha de perto tudo o que acontece
- Infraestrutura participando resulta em melhor planejamento do ambiente de produção
- A participação da infraestrutura resulta em monitoramento mais eficaz da aplicação
- Desenvolvimento começa a compreender melhor a infra e isso resulta em um produto melhor
- Equipes trabalhando em conjunto para aumentar o valor do negócio
Para a empresa
- Melhor comunicação entre desenvolvimento e infraestrutura (diminuição de conflitos)
- As soluções funcionam com maior estabilidade e desempenho
- Entregas mais rápidas
- Menor tempo de paradas
- Diminuição de incidentes
- Diminuição de custos
- Diminuição de riscos
- Aumento do valor do negócio