Não faz muito tempo, a infraestrutura de nuvens estava sendo amplamente elogiada por sua incrível simplicidade e capacidade de gerenciamento. Para empresas e equipes sobrecarregadas por uma infraestrutura complexa local, ela apresentava uma alternativa intuitiva, escalável e econômica que prometia transformar a forma como abordamos a infraestrutura de TI como um todo.
Mas, à medida que as ofertas dos principais provedores de nuvens públicas cresceram e se tornaram mais sofisticadas, essa simplicidade caiu por terra. Hoje, os portfólios de serviços de infraestrutura de nuvem são incrivelmente grandes, cada vez mais complexos e mais complicados do que nunca para as equipes de engenharia acompanharem o ritmo.
Hoje, só a Amazon Web Services oferece 175 diferentes serviços de infraestrutura de nuvem em seu portfólio. Não estamos mais lidando com uma seleção pequena e simples de serviços intuitivos que podem ser provisionados rapidamente com apenas alguns cliques.
Em vez de aliviar a pressão das empresas e simplificar sua abordagem de infraestrutura, a nuvem está agora indo na direção oposta – criando novos desafios de gerenciamento, exigindo novas habilidades (virtuais) de data center e aumentando o tempo médio de time to market.
Por que a crescente complexidade da nuvem é um problema de negócio
Quando a infraestrutura baseada na nuvem surgiu, as empresas e suas equipes de TI estavam ansiosas para abraçá-la e obter os benefícios de flexibilidade, escalabilidade e simplicidade de gerenciamento que ela oferecia.
Ela permitiu que desenvolvedores e equipes de infraestrutura fornecessem novos serviços em minutos – melhorando drasticamente o time to market e tornando possível que as organizações ganhassem uma vantagem competitiva importante em mercados concorridos.
Mas, à medida que a complexidade das ofertas de infraestrutura nas nuvens aumentou, esses benefícios diminuíram para muitas organizações. Serviços e decisões mais complexas significam que as equipes que gerenciam a infraestrutura de nuvem precisam de melhores habilidades, e os desenvolvedores precisam de uma profunda experiência apenas para serem capazes de se autosservir – levando a definição de “full-stack” ao limite de se tornar desvantajosa.
Simplificando, a crescente complexidade da nuvem está colocando muitas organizações e suas equipes de infraestrutura de volta ao ponto em que estavam há 15 anos – lutando para acompanhar a demanda por novos serviços e instâncias e para manter-se no topo de uma pegada de infraestrutura cada vez mais incontrolável.
A solução? Comece a visualizar e gerenciar a infraestrutura como um conjunto de produtos de plataforma interna
Os principais prestadores de serviços na nuvem podem ter deixado de fornecer opções de infraestrutura simples e intuitivas que qualquer um pode fornecer por conta própria. Mas isso não significa que você não possa criar plataformas e processos internos para fazer isso você mesmo.
Essa é a essência de uma abordagem de Engenharia de Plataforma. Em vez de ter sua equipe de infraestrutura em nuvem gastando todo o seu tempo constantemente configurando e implantando novas instâncias, ambientes e serviços conforme os desenvolvedores precisam, você faz com que o time crie uma plataforma que ofereça componentes de autosserviço que os desenvolvedores possam facilmente escolher e implantar.
É uma abordagem que começou a ser amplamente adotada em 2020, figurando significativamente no relatório Puppet’s State of DevOps. De acordo com o relatório, 63% das organizações têm pelo menos uma plataforma interna de autosserviço instalada.
Com soluções reutilizáveis e de autoatendimento disponíveis em uma plataforma que é fácil de entender e de se engajar, os times de infraestrutura em nuvem podem gastar menos tempo configurando soluções individuais e providenciar ao negócio um caminho rápido para a comercialização de novos serviços e capacidades digitais.
O diagrama acima mostra como a velocidade de valorização e a velocidade de comercialização aumentam exponencialmente com essa abordagem. À medida que a oferta da plataforma amadurece com a criação de elementos mais reutilizáveis, estes podem ser facilmente combinados para criar novas experiências de produto para os times de produto e, por extensão, para o negócio.
Conforme cada produto ou componente reutilizável é criado, o ciclo de aprendizado se torna menor e mais rápido, oferecendo valor para todos mais rapidamente. Contudo, é necessária uma gestão cuidadosa da plataforma à medida que ela evolui, para garantir que permaneça componível e coesa. Ou, em outras palavras, não se torne complexa de se envolver, ou restritiva na escolha das soluções que oferece.
Por que essa abordagem funciona
Esta abordagem baseada em plataforma para o gerenciamento de infraestrutura de nuvem funciona porque considera as necessidades de todos, e dá a cada grupo o tempo e as capacidades necessárias para se concentrar nas coisas que fazem melhor:
- Os times de desenvolvimento e outros clientes internos não precisam se tornar mestres em novas linguagens ou desenvolver habilidades especializadas em infraestrutura de nuvem para ajudar nos serviços que precisam.
O time de plataforma tem visibilidade de todos os requisitos de infraestrutura de nuvem e pode ampliar sua experiência à medida que as ofertas de nuvem e o panorama da infraestrutura avançam, garantindo que os produtos sejam relevantes e altamente valiosos para a organização como um todo.
Entretanto, é importante notar que ele só pode entregar esses resultados quando planejado, implementado e gerenciado corretamente.
O que pode dar errado?
A Thoughtworks trabalhou recentemente com uma fintech que havia tentado implementar uma abordagem de infraestrutura baseada em plataformas, mas enfrentou muitos desafios que limitaram sua eficácia.
A empresa tinha formado um time chamado Platform Engineering, com algumas novas contratações de engenheiros de nuvem, e alguns dos times existentes de data center que haviam mostrado habilidade em escrever código e vontade de explorar os limites de sua zona de conforto.
O time trabalhou por 18 meses para construir uma plataforma que permitisse aos desenvolvedores fornecer seus próprios componentes de nuvem, entregando a infraestrutura como código através de pull requests para a equipe de Engenharia de Plataforma. O time de plataforma coordenaria e implantaria as aplicações a um conjunto de VMs com um balanceamento de carga, por meio de um pipeline de entrega contínua.
Mas, depois de um ano e meio escrevendo código, apenas 2% dos fluxos de trabalho em produção da empresa estavam fluindo através da nova plataforma. Por quê?
O diagrama acima mostra as dependências cruzadas que esta abordagem criou. Não era uma abordagem real de autoatendimento, porque, em muitos casos, outros times e pessoas tiveram que contribuir e editar um pull request antes que ele fosse liberado. A responsabilidade pelo produto final não era clara.
À medida que os novos times de desenvolvimento apresentavam mais código, essa ineficiência começou a crescer (veja a metade inferior do diagrama). Houve mais pull requests para revisão, mas ainda apenas uma equipe de plataforma para revisar tudo, criando um grande gargalo que diminuiu ainda mais a velocidade de implantação.
O resultado final foi uma plataforma que se esforçou para entregar o valor comercial inicialmente prometido. Backlogs e gargalos atrasaram o tempo de colocação no mercado, novas linguagens e processos tornaram a plataforma interna difícil de engajar e, por fim, não atendeu às necessidades dos desenvolvedores.
Chaves para o sucesso
Para assegurar o sucesso dessa abordagem em sua organização, há três fatores-chave que você deve considerar ao criar e executar uma estratégia de plataforma de infraestrutura de nuvem:
#1) Entender seus clientes (e suas expectativas com a experiência)
Esta abordagem trata a infraestrutura como um conjunto de produtos internos e vê o desenvolvimento – entre outros – da mesma maneira que os clientes. Como qualquer outro produto, uma das maiores chaves para o sucesso é compreender e responder adequadamente às necessidades desses clientes.
Assim como os times de produto e marketing mantêm o foco no fornecimento de experiências intuitivas e harmoniosas para o cliente, os times de infraestrutura em nuvem devem fazer o mesmo para os clientes internos. Eles devem colocar os desenvolvedores no centro de cada decisão para garantir alta aceitação e sucesso a longo prazo.
Se, por exemplo, o engajamento com uma plataforma exige que um desenvolvedor aprenda uma nova linguagem apenas para continuar fazendo o mesmo trabalho que ele já está fazendo, isso não representa uma boa experiência para o desenvolvedor. E, assim como um cliente que está sendo solicitado a passar por muitos obstáculos para comprar um produto em uma plataforma de comércio eletrônico, ele simplesmente se afastará e voltará a fazer o que estava fazendo anteriormente.
#2) Nomear um product owner
Um dos maiores problemas com o verdadeiro autosserviço de infraestrutura em nuvem é que nenhum time de clientes ou líder é incentivado a construir soluções que possam ser reutilizadas por toda a organização. Cada time simplesmente cria o que precisa naquele momento. Isso é bom para eles, mas leva a uma grande duplicação de esforços em toda a organização.
Nomeando um product owner, você pode superar esse desafio e construir produtos de infraestrutura de nuvem com toda a sua organização em mente. Este líder agnóstico do time garantirá que tudo o que for criado entrega o máximo de valor possível para todos.
Há trabalho suficiente envolvido para garantir uma pessoa em tempo integral no papel, portanto, não ceda à tentação de compartilhar as responsabilidades com cada um do time. Dedicar uma pessoa à função cria um senso mais forte de responsabilidade do que simplesmente atribuir tarefas adicionais aos membros existentes do time.
Isso ajudará a chamar a atenção e, ao mesmo tempo, enviará uma mensagem de intenção de mudança, compromisso de melhorar e, por fim, sua intenção de começar a ver e tratar a infraestrutura como um produto.
#3) Reconsiderar como você mede o sucesso da infraestrutura
Uma das maiores barreiras para a abordagem de infraestrutura baseada no produto é uma visão desatualizada do que é um time de infraestrutura bem-sucedido. No passado, os times se esforçavam naturalmente para reduzir os custos e manter os sistemas tão estáveis quanto possível, em vez de buscar mudanças ou capacitação pela empresa.
A abordagem de Engenharia de Plataforma, por outro lado, tem tudo a ver com apoiar e permitir que os desenvolvedores transformem suas aplicações em serviços prontos para o mercado e para os negócios de forma rápida e fácil.
Você não vai ver reduções de custos a curto prazo. O que você deve ver são melhorias de longo prazo em métricas como time to market, produtividade do desenvolvedor e consistência no provisionamento e deploy, levando à redução do Tempo Médio de Restauração (MTTR). Essas são as medidas pelas quais você vai precisar definir o sucesso, e é fundamental que isto seja compreendido pelos stakeholders e pelos tomadores de decisão em todos os níveis da empresa.
Em resumo
O gerenciamento da infraestrutura em nuvem tornou-se uma tarefa extremamente complexa. Se você quiser continuar capacitando desenvolvedores e times de TI com o acesso rápido e autosserviço às soluções de infraestrutura que a nuvem costumava fornecer, você precisará tomar a responsabilidade para si.
Adotando uma abordagem de Engenharia de Plataforma e construindo ‘produtos’ de infraestrutura, você pode restaurar a simplicidade oferecida pelas ofertas de infraestrutura como serviço (IaaS) de primeira geração, enquanto aproveita ao máximo as capacidades e escolhas avançadas disponíveis atualmente.
Esta abordagem exige dedicação e responsabilidade. Requer um profundo entendimento dos clientes internos que estes produtos atenderão. E deve ser baseada em uma nova definição de sucesso do data center que esteja mais bem alinhada com o valor que uma abordagem moderna de infraestrutura pode entregar.
Mas, se você conseguir enfrentar tudo isso, o que te aguarda é uma abordagem mais rápida, enxuta e consistente para a gestão da infraestrutura. Uma abordagem que capacita todos os envolvidos no processo de entrega de software, ajuda os desenvolvedores a lançar novos serviços e soluções mais rapidamente e pode melhorar significativamente tanto o tempo para a comercialização quanto o tempo para a valorização (Time to Value).
Como observação final, é importante reconhecer em tudo isso que a infraestrutura em nuvem fornece a base para todo o seu negócio. Pegar atalhos, assumindo a fragilidade, e não dar a este processo a atenção estratégica que ele merece, tudo isso acrescentará riscos e aumentará os custos mais tarde.