Concrete Devops Fundamentals

Já ouviu o termo mas não sabe o que ele quer dizer? Vamos aprender juntos.

Matheus Dias
Dec 15, 2020 · 7 min read

Esse texto foi escrito a muitas mãos, de uma parte do time de DevOps da Concrete. Então, antes de começar, vamos dar os créditos a quem ajudou a juntar todas essas informações por aqui: Alex Baptista, Leonardo Contini, Lincoln Romais, Luiz Honda, Matheus Dias e Talita Bernardes Pereira.

Feitas as apresentações, vamos ao aprendizado!

O que é DevOps?

Atualmente, DevOps tem sido sinônimo para cargos e ferramentas, mas na verdade é muito mais que isso. O conceito DevOps surge a partir da necessidade de gerar valor, eliminando processos manuais e unindo os times em prol de um bem maior. Além disso, o termo está relacionado à garantia de qualidade, monitoramento, rastreabilidade e alta disponibilidade na hora de gerar as entregas.

Bastante coisa, né? É aí que entra a confusão com uma caixinha de ferramentas que auto-rotulam o termo e que, apesar da definição incorreta, nos auxiliam no dia a dia e permitem que os processos que ocorrem sejam rastreados, monitorados e automatizados, o que gera software entregável e funcional para a esteira de produção, mesmo que em partes. Esses pedaços ou softwares completos vão, então, melhorar a experiência de quem utiliza e espera algo de um aplicativo, site, plataforma e etc.

É um tanto difícil definir algo abstrato, que é não só intangível, mas também cheio de significados. Pensando em uma analogia e que particularmente ilustra muito bem o termo: imagine um artesão que antigamente precisava produzir a matéria-prima, esperar seu processo de maturação para só depois produzir algo e gerar uma venda. Esse processo levava bastante tempo e muitas vezes era bastante repetitivo.

Com o surgimento das indústrias, esse tempo foi gasto com coisas que de fato importavam, pois a parte de produção já estava automatizada e as mais diversas pessoas se uniram em times para pensar em velocidade, redução de custos, qualidade e disponibilidade do produto, além de uma série de outros fatores que geram não só uma venda, mas uma ótima experiência em escala.

Basicamente, isso é DevOps: gerar experiências em escala unindo as pessoas em times coesos usando a tecnologia como base.

DevOps é Cultura

O termo DevOps vem de Desenvolvedores (Dev)+ Operações (Ops). E existem diferenças entre as atividades de desenvolvedores e as relacionadas à operação, mas isso não gera uma confusão de fato. Contratar uma pessoa especializada em DevOps também não significa contratar um profissional faz tudo ao invés de contratar duas pessoas com bases de conhecimento diferentes.

Na prática, consultando a literatura chegamos ao seguinte trecho no livro DevOps na Prática: entrega de software automatizada:

Inspirado no sucesso dos métodos ágeis, um novo movimento surgiu para levar a mesma linha de raciocínio para o próximo nível: o movimento DevOps. Seu objetivo é criar uma cultura de colaboração entre as equipes de desenvolvimento e operações, o que permite aumentar o fluxo de trabalho completado — maior frequência de deploys — ao mesmo tempo em que aumenta a estabilidade e a robustez do ambiente de produção.

Cultura representa a nossa forma de trabalhar e de agir em um ambiente corporativo. Quando falamos de cultura DevOps estamos falando de descentralização de conhecimento, harmonia nos fluxos de trabalho e atenção à qualidade, usando o que existe de melhor tanto tecnologicamente quanto aos processos. Além disso, também estamos falando de respeito às particularidades de cada cenário, pensando em garantir uma esteira de desenvolvimento autossuficiente para que o trabalho flua da melhor maneira possível, eliminando processos manuais e repetitivos sem comprometer a entrega.

Agilidade e automação

Como já falamos algumas vezes neste texto, o objetivo de DevOps é trabalhar de forma ativa para automatizar e agilizar processos e, assim, gerar cada vez mais software pronto para produção sem diminuir a qualidade. Neste contexto, entram alguns conceitos primordiais como:

  • Continuous Integration (Integração Contínua): tem como premissa etapas customizáveis para garantir software confiável disponível no final da esteira. Ou seja, quanto tivermos código desenvolvido ele deve passar por uma esteira que garanta sua qualidade, bem como por automatização de processos e testes. Assim, a partir de múltiplos códigos desenvolvidos por múltiplas pessoas geramos um entregável único, testado, qualificado e apto para produção por meio de um mesmo processo que permite confiar no software ou pedaço de software desenvolvido pelo time. Algumas ferramentas nos auxiliam nesse processo, por exemplo Jenkins, GitlabCI, Drone, Bitbucket Pipeline, CircleCi, AWS Code Pipeline e etc.
  • Continuous Delivery (Entrega Contínua): tem como objetivo gerar artefatos prontos que necessitam de uma aprovação manual para ir à produção. O objetivo é gerar artefatos aptos para produção a partir de ciclos curtos. A entrega contínua garante que os artefatos, bem como seu ecossistema, estejam prontos para serem consumidos e utilizados e que o resultado final já esteja minimamente testado, validado e funcionando com os outros componentes. Assim, podemos entregar software com mais frequência a um clique de aprovação. A partir desse processo é possível garantir mais segurança, melhor trabalho em equipe e maior satisfação para o cliente, que tem sua experiência melhorada com novas features, além de melhor rastreabilidade de código entre outros benefícios.
  • Continuous Deployment (Implementação Contínua): por sua vez, tem como objetivo gerar artefatos prontos que são automaticamente mandados para produção.

Cada um desses itens está relacionado com garantir processos bem definidos para entrega de software produtivo, incluindo testes, tolerância a falhas, alta disponibilidade, confiabilidade e etc., bem como a participação de todos os componentes do time de forma autocolaborativa, autosuficiente e autogerenciável.

C.A.L.M.S.

A sigla C.A.L.M.S refere-se a Culture, Automation, Lean, Measurement e Sharing. O termo foi definido por Jez Humble, um dos autores do livro “The DevOps Handbook”, e representa as cinco características principais de DevOps. Vamos falar um pouco de cada um dos tópicos nos próximos parágrafos.

Cultura
A cultura está relacionada à mudança de mentalidade dos membros do time, em direção a colaboração e entrega de valor. Para atingir os objetivos da Sprint precisamos que, independentemente do papel exercido, todos os membros do time se envolvam e contribuam ativamente com a entrega, compartilhando a responsabilidade. Com isso, a cultura DevOps visa melhorar o relacionamento interpessoal do time e, consequentemente, a entrega, aumentando a aceitação de mudanças e o nível de experimentação.

Automação
A automação elimina trabalhos manuais repetitivos e evita erros. Combinada com testes automatizados, gera respostas rápidas identificando bugs e falhas de segurança antes da implantação (deploy) em produção. Infraestrutura como código e entrega contínua estão relacionadas com automação.

Lean (magro, enxuto)
O conceito de Lean está relacionado a evolução incremental, além de separar o trabalho em pequenas tarefas. Pequenas tarefas são mais fáceis de colocar em produção e, quando uma falha ocorre, o time deve focar em elaborar um modo de evitar que essa falha ocorra novamente no futuro. Desse modo, a evolução do processo de geração de valor evolui, evitando desperdícios de tempo e esforço.

Measurement (medição)
Como podemos confirmar se as nossas ações geram melhoria contínua? Com as métricas, ganhamos visibilidade das melhorias, comparando as mais diversas grandezas, tais como número de bugs resolvidos nos sprints, monitoramento da performance geral de um website, porcentagem de code coverage (cobertura de testes), crescimento do número de usuários, velocidade de resposta do banco após criação de índice, etc. A aplicação das métricas e seus benefícios é bastante ampla.

Sharing (compartilhamento)
O compartilhamento de responsabilidade e informação elimina a distância entre os papéis de desenvolvedor e operação. Deste modo, um membro do time não fica isolado tentando resolver um problema sozinho, pois outros membros podem ajudar na resolução devido ao conhecimento compartilhado.

As três maneiras (Three Ways)

Para terminar esse post inaugural sobre o que é DevOps, temos mais um conceito que nos ajuda a definir os princípios da nossa cultura: as três maneiras. Delas, deriva grande parte dos comportamentos e padrões que esperamos de quem é adepto a essa forma de trabalhar.

1ª Maneira — Fluxo

A primeira maneira é o fluxo de trabalho, descrito como unidirecional, ou seja, nenhum defeito do estágio atual (de desenvolvimento) deve ser passado para o próximo estágio (de operação). O fluxo deve também ser contínuo, com work-in-progress limitado e, consequentemente, com maior frequência de evolução. Entre as práticas resultantes deste princípio estão integração e builds contínuos, testes e processos de implementação.

2ª Maneira — Feedback

A segunda maneira complementa a primeira com um canal de feedback constante entre operação e desenvolvimento, com o intuito de prevenir que as falhas conhecidas ocorram novamente e de garantir que eventuais problemas sejam rapidamente identificados e tratados. Feedbacks constantes também promovem o mapeamento e execução de melhorias. Essas práticas maximizam as oportunidades de melhoria e aprendizado contínuos, que é a terceira maneira.

3ª Maneira — Aprendizado Contínuo

A terceira maneira adiciona ciclos, quase que diários, de experimentação, nos quais a evolução baseada em fatos é constante e acertos e erros são insumos para potencializar o aprendizado e criar um ambiente no qual não é saudável atribuir culpa (blameless). O aprendizado contínuo busca transformar descobertas locais em melhorias globais a partir de toda a iteração realizada durante o trabalho, sempre mantendo o fluxo unilateral e os feedbacks constantes.

E por enquanto é isso! Deu para entender em princípio o que faz parte da Cultura DevOps e como é trabalhar com isso? Se ficou alguma dúvida ou tem algo a colaborar, é só deixar um comentário. E se você quiser trabalhar desta forma, temos várias vagas abertas na Concrete. É só dar uma olhada aqui e se candidatar. Vamos aprender juntos!

Concrete

Nós desenvolvemos produtos digitais com inovação, agilidade…

Concrete

Nós desenvolvemos produtos digitais com inovação, agilidade e excelentes práticas, para que o mercado brasileiro e latino-americano acompanhe a velocidade do mercado digital mundial.

Matheus Dias

Written by

LinkedIn: https://www.linkedin.com/in/matheus-duarte-dias-a3b812113/ Github: https://github.com/matheusdias0211

Concrete

Nós desenvolvemos produtos digitais com inovação, agilidade e excelentes práticas, para que o mercado brasileiro e latino-americano acompanhe a velocidade do mercado digital mundial.