Devemos pensar no DevOps como uma metodologia?

23 de maio de 2022 // 14 min read

image

Há uma palavra que descreve perfeitamente o sucesso do DevOps: fluidez. Como indivíduos, vivenciamos um estado de fluidez quando tudo em nosso trabalho se encaixa naturalmente e no momento certo. O DevOps permite esse tipo de fluidez em nível organizacional, por meio de uma combinação de ferramentas, cultura e processo.

Embora o DevOps às vezes seja chamado de metodologia, ele é melhor entendido como um conjunto de práticas, ideias e metodologias que compartilham uma filosofia em comum: fornecimento contínuo de valor. Simplificando, não existe uma abordagem única para o DevOps, e exemplos de sucesso de DevOps podem parecer muito diferentes de uma organização para outra.

No GitHub, projetamos ferramentas para organizações de DevOps e trabalhamos com equipes e empresas líderes. Ao fazer isso, identificamos vários pontos problemáticos comuns que as pessoas enfrentam ao adotar o DevOps.

Neste guia, responderemos às seguintes perguntas:

  • O DevOps é uma metodologia ou um processo?
  • Qual é o objetivo do DevOps?
  • Por que as organizações estão adotando o DevOps?
  • Como fazer a transição bem-sucedida para o DevOps?
  • Por que algumas empresas também estão adotando o DevSecOps?

O DevOps é uma metodologia ou um processo?

Se você pedir a 10 pessoas que definam DevOps, provavelmente receberá pelo menos cinco respostas diferentes. Algumas pessoas podem se concentrar na implementação prática do DevOps (CI/CD, automação de testes e assim por diante) e chamam isso de processo. Outros podem chamar o DevOps de uma metodologia com um conjunto de processos que funcionam juntos sob uma filosofia coerente.

Descubra como definimos DevOps no GitHub >

Porém, essas duas definições ignoram o ponto principal: o DevOps consiste em um conjunto de práticas que são adaptáveis a cada empresa que as adota.

No GitHub, acreditamos que é melhor entender o DevOps como uma estrutura para pensar em como agregar valor por meio de software. Ele é mais do que uma única metodologia ou coleção de processos. É fundamentalmente um conjunto de práticas, tanto culturais quanto tecnológicas. Vamos detalhar isso.

Estrutura de DevOps

Reconhecimento do DevOps como uma estrutura

Durante décadas, as pessoas promoveram ideias bem definidas de como cada etapa do ciclo de vida de desenvolvimento de software deveria funcionar. No entanto, o que parece genial em um whitepaper muitas vezes não funciona na prática, pois cada organização é diferente.

O DevOps reconhece isso. Em vez de prescrever todos os detalhes, o DevOps reúne um conjunto de práticas, ideias culturais e ferramentas que funcionam sob uma estrutura que é maleável para as necessidades de uma determinada equipe e organização.

Basicamente, o DevOps busca colocar softwares de alta qualidade nas mãos dos usuários finais o mais rápido possível. Esse compromisso com a entrega contínua de alto valor é fundamental para qualquer organização de DevOps bem-sucedida, e essa entrega é feita de três maneiras:

  • Melhoria contínua: Pequenas mudanças são mais fáceis de gerenciar e agregam valor aos usuários com mais rapidez do que lançamentos grandes, que podem demorar mais para serem entregues. Em uma prática de DevOps, melhoria contínua significa entregar mudanças iterativas rapidamente. Também significa procurar maneiras de melhorar o software subjacente com mudanças futuras e o próprio SDLC para facilitar a entrega mais rápida de valor.

  • Posse compartilhada: Todos que trabalham em um produto compartilham a responsabilidade por ele e por sua qualidade, não apenas por sua área pessoal de especialização. Isso significa que cada um compartilha a responsabilidade e a posse do produto final que entrega aos usuários finais.

  • Automação: Qualquer coisa que possa ser automatizada deve ser automatizada em todo o SDLC em uma prática de DevOps para agregar valor aos usuários finais com mais rapidez por meio de novos lançamentos. A automação também ajuda as organizações a maximizar o tempo gasto na criação do produto, ao mesmo tempo em que minimiza a chance de erros humanos.

Como o DevOps difere da metologia Agile e semelhantes

A programação Agile, extrema, bem como outras metodologias de desenvolvimento semelhantes, foram reações ao conflito entre a programação tradicional e a distribuição de softwares pela Web.

Antes que essas ideias se tornassem populares, uma das metodologias de desenvolvimento mais difundidas era a metodologia de cascata altamente sequencial. Nesse sistema, cada etapa tinha que ser concluída antes que a próxima pudesse começar. Isso geralmente significava que muitos documentos e planejamentos precisavam ser feitos antes que uma única linha de código pudesse ser escrita.


Em 16 meses, passamos de mais de 30 grupos de engenharia de software em pontos de isolamento para uma equipe amplamente coesa em toda a McKesson.

Denis Canty, vice-presidente de serviços para desenvolvedores e laboratórios de tecnologia da McKesson


Os criadores dos princípios de desenvolvimento de software Agile reconheceram que o planejamento excessivo sufocava a criatividade dos desenvolvedores de software e que, sem um código em funcionamento, ninguém poderia saber se os planos funcionavam. O Manifesto Agile, por exemplo, dizia que softwares funcionais eram mais importantes que uma documentação excessiva. Ser responsivo às mudanças era mais valioso do que seguir um plano.

Na prática, os conceitos por detrás do Manifesto Agile foram revolucionários. Ele reconheceu que o código em funcionamento era a melhor maneira de entender e atender às necessidades dos clientes. Porém, esse foco no código também significava que havia menos a dizer sobre o restante do SDLC.

Se a metodologia Agil foi uma reação contra os métodos antigos, o DevOps se baseia nas ideias centrais dessa metodologia e as aplica a todo o ciclo de vida do desenvolvimento de software. De fato, algumas pessoas no início dos anos 2010 chegaram a chamar o DevOps de a segunda década do Agile.

Para entender a diferença entre DevOps e Agile, é útil comparar seus princípios fundamentais:

  • Falhar rapidamente versus melhorias contínuas: O Agile se concentra em iterações pequenas e rápidas, em que falhas são aceitas porque mostram que o processo está funcionando. No DevOps, a ênfase está na iteração, automação e colaboração profunda ao longo de todo o SDLC para melhorar as velocidades de entrega e a qualidade do software.

  • Centrado no desenvolvedor versus centrado na equipe: O Agile analisa como os desenvolvedores de software podem atender melhor aos clientes, mas tem pouco a dizer sobre como o código é testado, implantado ou mantido. Por outro lado, o DevOps reúne todos no SDLC sob a responsabilidade compartilhada de agregar valor para os usuários finais.

  • Pensamento nos recursos versus nos sistemas: O Agile se concentra no aqui e agora de um recurso específico, enquanto o DevOps analisa de forma holística o software como um sistema.

  • Centrado no projeto versus centrado no produto: O Agile adota uma abordagem mais centrada em projetos ao desenvolvimento de softwares, dividindo grandes lançamentos em pequenas partes do trabalho executável. Por outro lado, o DevOps adota uma visão do software mais centrada no produto e redefine o foco de projetos individuais para produtos holísticos, em que cada decisão se resume a como ela afeta o sistema a longo prazo como um todo.

Qual é o objetivo do DevOps?

O objetivo do DevOps é combinar a forma como criamos softwares com a forma como a nuvem nos permite usá-los. A nuvem nos levou de uma era de barreiras (servidores individuais, datas de lançamento de software, pontos de isolamento baseados em funções) para um mundo aberto onde os softwares são onipresentes.

No passado, o desenvolvimento de software tinha estágios distintos e um produto final que podia ser comparado com uma linha de produção. Isso era compreensível: na era da mídia física, o desenvolvimento de softwares era um processo muito mais regulamentado e linear. Afinal de contas, uma versão final, na verdade, era definitiva, já que distribuir atualizações significava reiniciar o processo de produção linear do zero.

Porém, o SDLC moderno não é uma linha de produção. O software como serviço e outras inovações em tecnologias e plataformas baseadas na nuvem tornaram lançamentos distintos tão relevantes hoje em dia quanto cartões de pontos e calculadoras do tamanho de uma sala.

Então, como o DevOps aproxima o SDLC das expectativas de uma nuvem sempre ativa e atualizada?

  • Colaboração em todo o SDLC: Em vez de pensar em termos de projetos únicos, o DevOps adota uma visão holística centrada no produto ao longo de todo o SDLC. Na prática, isso significa remover a divisão rígida baseada em funções do desenvolvimento tradicional de software e, em vez disso, priorizar equipes multidisciplinares que assumem a responsabilidade contínua pelo sucesso de um produto. Todos são responsáveis pela qualidade e por outros aspectos, como a segurança, desse software, independentemente de sua especialidade específica.

  • Melhor qualidade do software: Cada aspecto do DevOps tem como objetivo produzir softwares de melhor qualidade. Testes automatizados e verificações de segurança ajudam a evitar que os problemas cheguem à produção. Melhorias contínuas e práticas como CI/CD garantem que as correções de bugs e outras atualizações cheguem rapidamente aos usuários finais. E as opções de arquitetura, como microsserviços, facilitam a criação de sistemas distribuídos que podem responder rapidamente à demanda em tempo real, além de minimizar o impacto dos problemas em um serviço específico.

  • Lançamentos de software mais rápidos: O DevOps incentiva mudanças pequenas e iterativas que são mais rápidas de criar e codificar, apresentam uma área alvo menor para testes, divergem menos da produção e têm menos consequências indesejadas quando implantadas. Isso também pode afetar as escolhas arquitetônicas, com algumas organizações optando por aproveitar a arquitetura de microsserviços para limitar o risco de atualizações em uma parte do sistema.

Por que precisávamos do DevOps

Houve um tempo em que publicar software significava distribuir mídia física. Quer fosse em uma caixa embrulhada nas lojas ou por meio de um administrador de sistema que atualizava cada estação de trabalho em um escritório, os lançamentos de software exigiam planejamento avançado.

Em uma época em que o desenvolvimento de software era regido por prazos de fabricação e distribuição, métodos sequenciais, como cascata, eram a escolha natural. Porém, essa rigidez teve um custo. As datas de lançamento eram fixas, e perder um prazo poderia significar perder tempo na fábrica, caminhões vazios e varejistas dando espaço nas prateleiras aos concorrentes. Os produtores de software tinham uma escolha: poderiam enviar software de alta qualidade lentamente a um custo maior ou sacrificar a qualidade para cumprir o prazo.


Desde que adotei o GitHub, é como se fosse noite e dia. É a colaboração, é o compartilhamento, é a comunidade — tudo por causa do GitHub."

George Swan, diretor sênior da Build Platform na Autodesk


A mudança para a distribuição baseada na Web deveria ter libertado as equipes desse dilema. Porém, muitas empresas e equipes de tecnologia eram organizadas em torno de datas de lançamento fixas com ferramentas, processos e estruturas de equipe para apoiar esse modelo de desenvolvimento e entrega de software. Houve uma oportunidade perdida de melhorar a qualidade e agregar valor aos usuários com mais rapidez.

Porém, essa não foi a única mudança que a Web trouxe. De repente, a segurança passou a ter importância de uma forma que raramente teve antes. A qualidade deixou de ser apenas uma questão de detectar bugs, mas também de proteger os dados de todo e qualquer malfeitor que possuísse uma conexão com a Internet.

O desenvolvimento de software teve que mudar. O caminho que levou ao DevOps foi uma reação ao atrito entre a distribuição de softwares pela Web e a forma como esses softwares eram criados.

O DevOps fornece uma estrutura para desenvolvimento de software que se encaixa na essência dos aplicativos de nuvem modernos, o que significa que os profissionais não precisam mais sacrificar a qualidade pela velocidade ou pelo custo.

Por que as organizações adotam o DevOps

Organizações em todo o mundo estão adotando o DevOps, porque isso as ajuda a entregar softwares mais confiáveis com mais rapidez. Muito do seu sucesso se deve à sua flexibilidade. Em vez de exigir mudanças radicais, o DevOps oferece várias práticas culturais e tecnológicas que podem e devem ser adaptadas às circunstâncias individuais de cada organização.

No entanto, mesmo que a implementação individual mude de uma empresa para outra, as organizações que adotam o DevOps com sucesso compartilham vários benefícios comuns. Esses incluem:

  • A colaboração melhora a qualidade: Todos que trabalham em um ambiente DevOps compartilham uma participação no sucesso de um produto. O trabalho de um indivíduo não termina quando ele conclui sua tarefa específica, mas sim quando seu código está em produção e, mesmo assim, há espaço para pensar em como melhorá-lo. Isso significa que todos estão colaborando continuamente em todo o SDLC e pensando em como melhorar continuamente a qualidade e agregar valor com mais rapidez aos usuários finais.

  • A automação reduz a incerteza: O DevOps incentiva a automação sempre que possível. Isso permite que as pessoas passem mais tempo se concentrando em criar e melhorar o software e a infraestrutura em que ele é executado. Também facilitam um pipeline de entrega mais rápido por meio de práticas básicas, como CI/CD, que permitem aos profissionais de DevOps automatizar a integração e a entrega de alterações de código.

  • A medição contínua impulsiona melhorias contínuas: Em um ambiente de DevOps, ferramentas geralmente são usadas para medir e monitorar cada estágio do SDLC para fornecer feedback rápido sobre a integridade do sistema, a demanda em tempo real e o impacto de mudanças individuais. Os profissionais de DevOps usam essa visão para melhorar o processo e fazer alterações com base nos dados.

  • Qualidade aprimorada: Os profissionais de DevOps buscam continuamente melhorar a qualidade do software que entregam. Isso é parcialmente realizado por meio da automação, que ajuda a melhorar a consistência dos testes e das verificações de segurança. Isso também é realizado por meio de versões iterativas e mudanças de código que são mais fáceis de criar, entregar e gerenciar, ao mesmo tempo em que reduzem a chance de consequências imprevistas. A colaboração em todo o SDLC entre equipes anteriormente em pontos de isolamento, como desenvolvimento e operações, também é um componente essencial para melhorar a qualidade do software em uma prática de DevOps.

  • Ciclos de lançamento mais rápidos: O DevOps ajuda as organizações a obter valor na produção com mais rapidez e maior qualidade, priorizando alterações menores no código, que são mais rápidas de escrever, testar e implantar. O DevOps também defende o uso da automação em todo o SDLC para criar um pipeline de CI/CD que agrega valor, desde o planejamento até a codificação, o teste e a produção.

Pirâmide cultural

Como sua organização pode adotar o DevOps

A adoção bem-sucedida do DevOps pode exigir grandes mudanças. Porém, em vez de reformular todos os seus processos e ferramentas da noite para o dia, você pode dar passos relativamente pequenos para começar. Isso pode implicar fazer mudanças culturais na frequência com que sua equipe de desenvolvimento integra seu código ou automatizar pequenas partes do SDLC na sua organização.

Não importa onde você esteja na sua jornada de DevOps, há seis etapas principais que você deve seguir para adotar o DevOps com sucesso:

  1. Mude a cultura: o sucesso no DevOps começa com uma colaboração profunda entre todos os responsáveis por criar, testar, operar e enviar um produto. E isso começa com a garantia de que todos estejam unidos e trabalhem juntos em todos os estágios do SDLC. Isso pode ser uma grande mudança para organizações que têm pontos de isolamento baseados em funções entre equipes diferentes. Em uma prática de DevOps, todos se reúnem para oferecer softwares de alta qualidade com mais rapidez aos clientes, e isso exige uma colaboração profunda entre diferentes pessoas para garantir que o código seja otimizado para operar em ambientes de produção e que esses ambientes de produção sejam otimizados para executar o software.

  2. Concentre-se em construções incrementais: o DevOps favorece pequenas mudanças que podem ser entregues rapidamente aos clientes, o que significa dividir os recursos em pequenos blocos que são mais fáceis de testar, minimizam o impacto de bugs e podem ser enviados para produção o mais rápido possível. Não há regras rígidas no DevOps sobre quantas vezes por dia os desenvolvedores devem integrar novas alterações de código, mas as práticas de DevOps mais bem-sucedidas integram e enviam várias alterações de código por dia.

  3. Adote as ferramentas certas: no DevOps, não existe uma abordagem única para o uso de ferramentas. Na verdade, "ferramentas de DevOps" é um termo genérico com muitos produtos e plataformas que se enquadram nessa categoria. Escolher as ferramentas certas e criar a toolchain de DevOps certa começa com a identificação de quais problemas você está tentando resolver e em quais recursos de DevOps precisa investir. Porém, há várias áreas comuns nas quais você precisará de ferramentas. Falando nisso…

  4. Automatize tudo o que puder: os melhores ambientes de DevOps pensam criticamente sobre seu SDLC e procuram locais em que a automação possa ser aplicada para eliminar a necessidade de intervenção humana, como tarefas repetitivas, como integrar, testar e empacotar código. Ao automatizar tarefas repetitivas, o DevOps ajuda as pessoas a usarem melhor seu tempo e reduz os riscos de erro humano (ou de pessoas se esquecerem de executar testes, importar as bibliotecas certas etc.). Como regra geral, tudo o que pode ser automatizado deve ser automatizado em uma prática de DevOps.


Temos um slogan em nossa equipe: não deixe um humano fazer o trabalho de uma máquina. O GitHub nos ajuda a conseguir isso.

Gabriel Kohen, engenheiro-chefe de software na Blue Yonder


  1. Crie um pipeline de CI/CD: um dos exemplos mais comuns de automação de DevOps, a CI/CD aplica automação a cada etapa do SDLC para facilitar a entrega mais rápida de software de alta qualidade aos usuários finais. Por exemplo, um desenvolvedor fazendo uma pull request pode acionar uma série de testes automatizados para evitar a introdução de problemas na branch principal. E, se for feito o merge da pull request, um pipeline de CI/CD poderá aproveitar a automação para iniciar o processo de criação da nova versão do software. Cada pipeline de CI/CD terá uma aparência diferente dependendo das necessidades da organização em questão. Porém, o objetivo é aplicar o máximo de automação possível ao SDLC para melhorar a qualidade do software e aumentar o tempo de implantação.

  2. Avalie e ajuste: uma cultura de DevOps bem-sucedida busca oportunidades de melhoria. Monitorar o desempenho do aplicativo e do sistema, bem como a velocidade do SDLC, é essencial para encontrar processos ineficientes. Boas métricas ajudam todos que trabalham em um produto a ter uma visão do seu trabalho como parte de um todo maior, facilitando a visualização de como as mudanças que elas causam impacto em outros lugares.

Desafios comuns que as organizações enfrentam ao adotarem o DevOps

Antes de começar a migrar para o DevOps, você deve observar alguns dos desafios comuns que as organizações enfrentam ao fazerem a mudança. Esses incluem:

  • Ferramentas sem a cultura: O uso de ferramentas geralmente é o aspecto mais visível do DevOps. Porém, as ferramentas podem ter um impacto limitado sem adotar uma cultura que enfatize a colaboração, a responsabilidade compartilhada e as melhorias contínuas.

  • Substitua pontos de isolamento antigos por novos: Os ambientes de DevOps mais bem-sucedidos substituem as equipes baseadas em funções por uma colaboração profunda e multidisciplinar. Um erro comum é criar uma equipe dedicada de DevOps que atue como guardiã das ferramentas, das práticas e dos processos de DevOps. Essa abordagem corre o risco de substituir barreiras antigas por novas barreiras.

  • Os sistemas legados resistem aos modelos de DevOps: A integração de sistemas e arquiteturas mais antigas com ferramentas mais recentes pode custar caro. O tempo de compilação de um sistema monolítico legado, por exemplo, pode torná-lo impraticável para um sistema de CI/CD, em que ele será compilado várias vezes ao dia.

A adoção do DevOps começa com algumas pequenas mudanças, crescendo até que cada estágio do seu SDLC siga a estrutura do DevOps. Mesmo assim, sempre há oportunidades de melhorar.

A mudança em direção ao DevSecOps

Como um conjunto de práticas, o DevOps está sempre evoluindo, e uma das evoluções atualmente mais aparentes é por meio da mudança para o DevSecOps. Embora o DevOps originalmente tratasse de compartilhar a responsabilidade pelo desempenho do código na produção, o DevSecOps se baseia nisso e busca responsabilizar todos pela segurança desse código.

Em nosso mundo conectado, a segurança do software é fundamental, e o DevSecOps estabelece processos robustos para incorporar a segurança em cada etapa do SDLC. Adaptando a ideia de melhoria contínua do DevOps, o DevSecOps torna a melhoria da segurança um processo contínuo que começa o mais cedo possível no SDLC.

SDLC

O DevSecOps leva a segurança o mais longe possível até o início do SDLC, ou o mais para esquerda possível. A segurança começa na fase de design, com ferramentas como testes estáticos de segurança de aplicativos que verificam automaticamente as vulnerabilidades antes que o código chegue à produção. Muitas vezes, esse movimento para considerar a segurança no início do SDLC é chamado de shift left.

Saiba mais no nosso guia sobre DevSecOps, shift left e GitOps >

Crie sua prática de DevOps no GitHub

O GitHub é uma plataforma integrada que leva as empresas da ideia ao planejamento, à compilação e à produção, combinando uma experiência de desenvolvedor focada com uma infraestrutura poderosa e totalmente gerenciada de desenvolvimento, automação e teste.

Compare os Planos de Preços >

Compare as Soluções de DevOps >


A disponibilidade de integrações prontas para uso com nossas ferramentas existentes é uma grande parte do apelo do GitHub. O GitHub realmente ajuda a dar vida ao DevOps

Danilo Suntal, líder de Agile e DevOps na P&G


Passe do planejamento para a criação Aumente a velocidade dos desenvolvedores
Crie planos de roadmap junto à sua base de código e atribua tarefas aos membros da equipe rapidamente com quadros e tabelas de projeto poderosos que se integram totalmente ao seu projeto.

Saiba mais sobre o GitHub Issues >
Reduza o tempo de commit. Elimine o gerenciamento do ambiente e a alternância de contexto para seus desenvolvedores. Simplifique a aquisição e a manutenção de TI com um espaço seguro e gerenciado na nuvem.

Explore o Codespaces >


Automatize tudo Proteja seu código enquanto o escreve
---------- ----------
Automatize todos os seus fluxos de trabalho de desenvolvimento de software com o GitHub Actions. Escale de maneira confiável e segura com uma poderosa infraestrutura de desenvolvimento, teste e automação, totalmente gerenciada pelo GitHub.

Saiba mais sobre o GitHub Actions >
Proteja seu código, dependências, tokens e dados confidenciais durante todo o ciclo de vida de desenvolvimento de software e resolva vulnerabilidades automaticamente.


Veja como ajudamos você a manter a segurança >

Tags

Quer saber como o GitHub pode ajudar sua empresa?

Fale mais sobre suas necessidades

octocaptcha spinner