DevOps é um movimento que organiza a maneira de trabalhar, focando em entregas pequenas, rápidas, flexíveis, eficientes e estáveis. Desta maneira, disponibiliza valor às organizações, mudando a maneira de construir e operar as soluções, fidelizando colaboradores e principalmente aos clientes.
Empresas de alta performance têm adotado princípios que norteiam o DevOps, aumentando qualidade, diminuindo desperdícios e fragilidades e trabalhando de maneira altamente adaptativa tanto nas arquiteturas das suas soluções, padronização da infraestrutura em forma declarativa e equipes altamente engajadas e envolvidas no sucesso dos clientes finais.
Quais são estes princípios, como tudo isso acontece. É um verdadeiro paradoxo. Se bem ao longo do tempo tem se publicado e aplicados no mercado, uma serie de boas práticas que orientam e estimulam o trabalho isolado do especialista, com DevOps, tem se obtidos resultados surpreendentes com o estimulo da colaboração de todos na cadeia de valor, não só desenvolvedores e profissionais de operação, senão também, toda a TI junto ao negócio, com foco a atender o cliente.
Existem muitas abordagens, muitos cenários e casos, com configurações distintas que mantem os mesmos pilares e princípios DevOps. Independente destas diferentes abordagens, existe na raiz do DevOps, a necessidade de organizar o trabalho para estabelecer um fluxo de uma peça, que permita através da orquestração das equipes, processos, disciplinas e da automação, realizar pequenos incrementos de mudanças em um fluxo contínuo. Desta maneira podemos reduzir o risco, encurtar tempos de testes ao reduzir o foco das diferenças e aumentar a estabilidade com rollbacks rápidos em casos de falhas.
Inicio do fluxo
Se pensarmos que o início do fluxo é dado por atividades de desenvolvimento, é importante refinar, quais as disciplinas que podem ser adotadas para trabalhar em sintonia a liberar pequenos incrementos, de maneira segura, rápida e estável. Desta primeira etapa, dependem todas as restantes etapas e disciplinas do DevOps. Por isso é tão importante organizar como se constrói o software. Sabemos que a adoção do fluxo de uma peça, prática Lean que permite diminuir o risco, como pequenas entregas de trabalho, exige uma adequação de todos os papéis e processos de TI.
A primeira etapa, denominada de estágio de confirmação, é fundamental neste processo. É necessário poder adotar ações que permitam elevar a qualidade, produzir pequenas entregas que possam ser avaliadas dentro do fluxo até sua implantação. Por isso, uma das grandes dificuldades e restrições na adoção do DevOps é a falta de poder influenciar nesta etapa, como por exemplo, trabalhar com fábricas de software, equipes terceiras, uso de pacotes de mercado.
Etapa de Confirmação e Integração Continua
Agora, vamos mencionar algumas das práticas e disciplinas mais comentadas quando queremos influenciar positivamente os resultados do trabalho dos desenvolvedores. Nesta primeira etapa, a disciplina abrangente é a Integração Contínua, como um grande guarda chuva de um conjunto de alinhamentos necessário para poder incorporar os pequenos incrementos de desenvolvimento de um grupo de desenvolvedores em uma versão consistente e integrada.
A maneira clássica de integrar código, depende de construções completas de funcionalidades, acumulando uma grande quantia de código dos desenvolvedores, derivando em mesclas complexas e laboriosas, para compor a Release que será submetida à mudança. Todo este processo tem altos riscos, fragilidades e desperdícios.
Disciplinas e práticas na Integração Contínua que ajudam à adoção do DevOps
Fortalecer a Integração Contínua é fundamental para estabelecer o fluxo contínuo. Mas para sua adoção é necessário diminuir o tamanho da peça. Ou seja, descontruir a maneira clássica de construir Releases, e focar no fluxo contínuo para Implantações (Deploy) Contínuos. A continuação, serão mencionadas as principais disciplinas na etapa da Confirmação.
1) Desenvolvimento orientado a Trunk
Esta técnica permite aplicar diretamente no repositório de versão, uma construção integrada do código em forma regular, toda vez que é realizado um commit. Mudar e complementar diretamente a versão master do software com estes pequenos incrementos é fundamental para estabelecer um fluxo contínuo. (existem variações híbridas que permitam em curtos períodos de tempo, fazer a integração no trunk, como pull-request, feature-branch, etc.)
2) Desenvolvimento orientado a Testes
Validar o código com testes unitário permite sustentar a disciplina da Integração Continua. O TDD, Test Driven Development, permite contribuir com testes unitários na própria contribuição de código em forma sistemática.
3) Desenvolvimento Seguro e Análise de Código
Integrando práticas da segurança da informação nesta etapa, validando código e calibrando a construção e compilação segura da solução. Um servidor de Integração deve rapidamente, em forma síncrona com o commit, realizar varias checagens, entre elas TU, Analise de de código, etc.
4) Desenvolvimento usando Branching por Abstração
Esconder o código ainda em construção, sem afetar o código que está funcionando, permite que possamos integrar o código em forma frequente com risco controlado. A convivência de ambos códigos é fundamental para transitar e testar em forma mais amplia a solução.
5) Desenvolvimento colaborativo de código
O uso de padrões de codificação, propriedade coletiva do código, programação em pares quando necessário, peer-review, pull-request, revisão de código em grupo, etc. podem ser práticas que podem ser incorporadas para elevar a qualidade do código.
6) Desenvolvimento evolutivo da arquitetura
É importante poder conviver com várias arquiteturas ou eventualmente não ficar preso a só um tipo de arquitetura na solução. Sabemos que podemos aplicar técnicas como o padrão Estrangulamento para evoluir de modelos monólitos para componentes; a componentização permite blindar partes que mudam menos de outras que mudam mais, também substituição tecnológica, evitar dependências implícitas, delimitação de responsabilidade, maior autonomia e seguranças as equipes,etc. Capacidade de otimização e refatoração, para melhorar a arquitetura, aplicar kaizen, pagar dívida técnica.
7) Desenvolvimento orientado a hipótese
Desenvolvimento orientado a hipótese, que permite conviver com várias soluções simultâneas para a escolha de melhor resultado técnico ou de satisfação de condições de usuário.
8) Desenvolvimento usando feature-flag
Desenvolvimento usando feature-flag e outros padrões de implantação, permitem ter a flexibilidade de disponibilizar recursos seletivamente e aplicar um melhor controle de atendimento demanda versus capacidade.
9) Externacionalização parametrizada
Externacionalização parametrizada e disponibilização da monitorização da aplicação, importante para dar recursos à operação controlar parâmetros dinâmicos de comportamento em produção.
Conclusão
Estes são alguns exemplos de técnicas, práticas e disciplinas que permitem elevar a qualidade e sincronizados, permitem adotar a Integração Continua, primeira etapa, condição do fluxo de uma peça. Quando usamos uma ou outra disciplina, quais delas priorizamos, como abordaremos as etapas seguintes nesta evolução, que requisitos devemos cumprir no desenvolvimento para ter uma Entrega Contínua e Operação Contínua eficientes, são pontos a desenvolver na adoção do DevOps.
WEBINAR: PRÁTICAS E DISCIPLINAS PARA DEV, NO CONTEXTO DEVOPS
Sabemos que existe uma grande riqueza de práticas e ferramentas que apoiam DevOps. Neste webinar iremos mostrar um conjunto de disciplinas e boas práticas de DevOps para as equipes de DEV (desenvolvimento de software), quais os motivos de seu uso e o que vieram resolver.
É importante saber usar no contexto de resolver problemas que impedem o fluxo contínuo de uma peça. Discutiremos cenários que permitirão elevar a qualidade e a adoção de práticas DevOps.
O webinar ocorrerá no dia 03/02 (quarta-feira), às 19h em nosso canal no YouTube.