Engenharia de plataforma e DevOps
Engenharia de plataforma e DevOps são práticas de TI que usam princípios ágeis para acelerar o lançamento de versões e atenuar obstáculos ao desenvolvimento. No entanto, cada prática tem o momento certo para ser usada e se concentra em um conjunto diferente de problemas. Quando você conhece essas diferenças, fica mais fácil escolher a abordagem para alcançar seus objetivos. O DevOps é uma abordagem adotada pelas organizações para integrar as funções de desenvolvimento de software e operações de TI em fluxos de trabalho iterativos. Já engenharia de plataforma é mais voltada à criação de plataformas e ferramentas internas para viabilizar esses fluxos de trabalho.
O que é DevOps?
O DevOps combina as áreas de desenvolvimento e operações, utilizando ferramentas e processos para unir equipes que, antes, ficavam isoladas dentro das organizações. O DevOps usa princípios ágeis, uma metodologia de desenvolvimento que conta com equipes autogerenciadas e iteração rápida. Como sua implementação exige colaboração entre equipes, multifuncionalidade, construção de confiança e coesão, o DevOps é geralmente visto como uma transformação organizacional, e não apenas uma simples alteração no processo. A cultura da organização precisa mudar para viabilizar o DevOps.
As abordagens de DevOps e os princípios ágeis surgiram como resposta às críticas aos métodos tradicionais de desenvolvimento de software em cascata, que supostamente diminuem o ritmo da inovação e criam barreiras e obstáculos organizacionais. No sistema em cascata, os requisitos de código passam por testes de funcionalidade, eficiência, padronização e documentação antes de serem integrados em uma aplicação. Testar esses aspectos com antecedência pode prolongar a fila de processos, dificultando a execução do projeto dentro do escopo, prazo e orçamento, especialmente quando os projetos estão indefinidos ou sofrem mudanças constantes.
Por outro lado, o DevOps utiliza automação e processos cíclicos que permitem às equipes levar o software do desenvolvimento à produção rapidamente, implementando melhorias enquanto ele ainda está em produção. O DevOps exige comunicação e colaboração entre as equipes, com a adoção de práticas que promovam o compartilhamento de expertise. Essas práticas permitem que as melhorias no produto sejam integradas e desenvolvidas em iterações, em vez de serem planejadas com antecedência e lançadas em ciclos mais longos. O DevOps permite que as organizações aprimorem sistematicamente o software ao longo do tempo. Assim, as equipes podem se adaptar às mudanças e experimentar novas abordagens de um jeito que os modelos tradicionais de desenvolvimento frequentemente não permitem.
O que é engenharia de plataforma?
A engenharia de plataforma expande as práticas de DevOps, pois oferece ferramentas, serviços e fluxos de trabalho padronizados para que as equipes de desenvolvimento possam criar soluções de software com mais eficiência. Engenharia de plataforma é um termo mais recente, que descreve a prática de organizar serviços e recursos internos para que as equipes de desenvolvimento criem soluções sem a necessidade de gerenciar diretamente os recursos subjacentes. Os engenheiros de plataforma selecionam e mantêm as diversas ferramentas, serviços e documentações de que as equipes de desenvolvimento precisam para que todos na organização de TI possam trabalhar com eficiência, sem precisar configurar e gerenciar tudo manualmente, utilizando processos automatizados conhecidos como golden paths. (caminhos dourados). Com a crescente adoção do DevOps, a engenharia de plataforma ganhou destaque por fornecer os componentes essenciais que suportam os fluxos de trabalho de DevOps e ajudam a escalá-lo em organizações empresariais.
Em sua apresentação na conferência DevOpsDays London, Abby Bangser usou a culinária como metáfora para descrever a função da engenharia de plataforma no DevOps. Se você “cozinha” um software (a refeição) e precisa de uma ferramenta (panela) ou um ingrediente (salsinha), pode até fazer uma solicitação, mas talvez não consiga exatamente o que precisa. Quem se encarrega de provisionar talvez não consiga fornecer o ingrediente exato que você deseja ou talvez não tenha acesso ao que você solicitou. Em um modelo de DevOps, você pode evitar a frustração de fazer uma solicitações e confiar no provisionamento, mas teria que criar o ingrediente ou ferramenta necessários por conta própria. Segundo a analogia de Bangser, isso seria como forjar sua própria panela de metal ou plantar salsinha no seu jardim, ou seja, opções difíceis e ineficientes.
Com esse modelo self-service, as equipes de desenvolvimento acabam sobrecarregadas com tantas tecnologias disponíveis para realizar suas tarefas diárias. Lidar com diferentes conjuntos de ferramentas pode ser trabalhoso, reduzir a eficiência e aumentar a carga cognitiva das equipes. Além disso, também surgem desafios de onboarding, como a dificuldade de integrar novos membros, já que os recém-contratados precisam se adaptar a diversas ferramentas e sistemas, enquanto os membros mais experientes, que os auxiliam, se desviam de suas tarefas principais, resultando em perda de produtividade. A engenharia de plataforma tem como objetivo auxiliar os fluxos de trabalho de DevOps reduzindo essa sobrecarga. Assim, as organizações de TI podem priorizar a inovação enquanto os engenheiros de plataforma centralizam as práticas recomendadas e padronizam as experiências self-service para todos.
A diferença entre engenharia de plataforma e DevOps
A engenharia de plataforma ajuda o DevOps a escalar, afinal, as equipes de DevOps não precisam fazer tudo sozinhas. A engenharia de plataforma ajuda a estabelecer ferramentas, conhecimento, serviços e processos padrão capazes de atender a diversas equipes de desenvolvimento na organização. Plataformas padronizadas permitem às equipes de desenvolvimento criar, implantar, gerenciar e oferecer suporte aos seus próprios componentes, enquanto o time de plataforma faz o mesmo com a infraestrutura subjacente. Isso permite que ambas as equipes concentrem seus esforços e entreguem com mais rapidez. As equipes de plataforma oferecem XaaS (Everything as a Service, ou "tudo como serviço" em português). Assim, as equipes de DevOps não precisam criar soluções cada finalidade específica.
Mas se as equipes de plataforma entregam componentes para as equipes de desenvolvimento, a engenharia de plataforma não pode acabar criando os mesmos problemas e dependências internas que o DevOps tentou mitigar anteriormente? Se a equipe de aplicações estiver esperando a equipe de plataforma fornecer o que precisa, isso não criará obstáculos no processo?
Teoricamente, sim. Mas as equipes de plataforma também têm o potencial de reduzir redundâncias e esforços duplicados, evitando desperdício de tempo para a organização como um todo. Várias equipes de desenvolvimento podem utilizar uma mesma plataforma self-service, sem a necessidade de cada uma criar sua própria plataforma com as mesmas funcionalidades. Isso mantém a consistência ao longo do tempo, mesmo que a equipe de desenvolvimento não seja mais responsável pelo projeto em questão. Além disso, essas equipes de plataforma tratam as equipes de desenvolvimento como clientes, com a consciência de que, se não atenderem às necessidades dos usuários, esses clientes internos usarão outro tipo de infraestrutura ou mecanismo de implantação. Por isso, há incentivo para a entrega ser rápida. Práticas recomendadas e soluções estabelecidas podem ser aplicadas à plataforma para que as equipes compartilhem o conhecimento com mais eficiência.
Onde entra a engenharia de confiabilidade de sites?
Quem conhece a engenharia de confiabilidade de sites (SRE) verá que o termo engenharia de plataforma parece familiar. SRE é um termo que o Google lançou no setor para descrever sistemas que executam soluções com automação, como uma alternativa ao trabalho manual que, originalmente, seria feito por administradores de sistema. As equipes de SRE desenvolvem processos e automação para garantir a integridade de sua infraestrutura e manter o tempo de atividade. As metas são compartilhadas entre profissionais de SRE e engenheiros de plataforma. Entretanto, a SRE prioriza o desempenho, a confiabilidade e a escala do software, enquanto a engenharia de plataforma se concentra em sistemas voltados a aprimorar a experiência do desenvolvedor.
Casos de uso de engenharia de plataforma e DevOps
É comum as equipes usarem a engenharia de plataforma para criar suas próprias plataformas de desenvolvimento interno (IDPs), ferramentas, serviços e documentação em um portal self-service. Os engenheiros de plataforma podem projetar e disponibilizar um IDP com base nas necessidades do usuário e práticas recomendadas, e depois iterá-lo por meio de pesquisas e testes de usabilidade. Considerando as equipes de desenvolvimento como usuários-alvo, os engenheiros de plataforma podem disponibilizar IDPs que viabilizem o self-service e ajudem as equipes de desenvolvedores a reduzir a carga cognitiva.
Organizações que desejam estabelecer integração e entrega contínuas (CI/CD) no ciclo de vida de desenvolvimento de software precisam adotar práticas de DevOps. A CI/CD automatiza a compilação e os testes de códigos, o que minimiza o impacto de bugs e falhas, pois o ciclo de desenvolvimento e atualização de software é integrado continuamente. Com a integração e a automação dos pipelines de CI/CD em todo o ciclo de vida do desenvolvimento de software, as organizações têm a visibilidade necessária para criar plataformas seguras e de alta qualidade, entregando aplicações com mais rapidez.
A Red Hat pode ajudar
As soluções e serviços da Red Hat® se integram para auxiliar na produtividade dos desenvolvedores e oferecer a flexibilidade de que as empresas precisam para aumentar a eficiência das equipes, enquanto ampliam o self-service, aceleram o onboarding e reduzem tarefas repetitivas entre os times.
O
Red Hat Developer Hub é um portal interno do desenvolvedor de nível empresarial que se baseia no projeto Backstage da Cloud Native Computing Foundation (CNCF). O Red Hat Developer Hub ajuda as organizações a consolidar as opções de tecnologia, expandir o self-service e a integração e incrementar a produtividade. Com o Red Hat Developer Hub, as organizações podem usar um portal interno do desenvolvedor para consolidar elementos do processo de desenvolvimento, simplificar fluxos de trabalho e promover a colaboração interna.
Integrado ao Red Hat Developer Hub, o Red Hat OpenShift® permite que os desenvolvedores utilizem as ferramentas em que confiam em uma variedade de aplicações, sejam nativas em nuvem, legadas ou modernizadas, onde quer que estejam implantadas: on-premises, na nuvem ou na edge.