{"id":38747,"date":"2019-10-31T22:25:42","date_gmt":"2019-10-31T19:25:42","guid":{"rendered":"https:\/\/prohoster.info\/blog\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp\/"},"modified":"2019-10-31T22:25:42","modified_gmt":"2019-10-31T19:25:42","slug":"infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp","status":"publish","type":"post","link":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp","title":{"rendered":"Infrastructure as Code: como superar problemas com XP","gt_translate_keys":[{"key":"rendered","format":"text"}]},"content":{"rendered":"<p>Ol\u00e1, Habr! Antes, eu reclamava sobre a vida na paradigmas de Infraestrutura como C\u00f3digo e n\u00e3o oferecia solu\u00e7\u00f5es para a situa\u00e7\u00e3o. Hoje, estou de volta para compartilhar quais abordagens e pr\u00e1ticas podem ajudar a sair do abismo do desespero e direcionar a situa\u00e7\u00e3o para o caminho certo. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: como superar problemas com XP\" src=\"\/wp-content\/uploads\/2019\/10\/e23fbf20980e731ae1cdb4719c97eb00.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<noindex><a rel=\"nofollow\" name=\"habracut\"><\/a><\/noindex><br \/>\nNo artigo anterior <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/465137\/\">Infraestrutura como C\u00f3digo: um primeiro contato<\/a><\/noindex> Eu compartilhei minhas impress\u00f5es sobre este campo, tentei refletir sobre a situa\u00e7\u00e3o atual nesta \u00e1rea e at\u00e9 sugeri que as pr\u00e1ticas padr\u00e3o, conhecidas por todos os desenvolvedores, poderiam ser \u00fateis. Pode ter parecido que havia muitas reclama\u00e7\u00f5es sobre a vida, mas n\u00e3o havia propostas para sair da situa\u00e7\u00e3o. <\/p>\n<h2>Quem somos, onde estamos e quais s\u00e3o nossos problemas<\/h2>\n<p>\nAtualmente, estamos na Equipe de Onboarding SRE, composta por seis programadores e tr\u00eas engenheiros de infraestrutura. Todos n\u00f3s estamos tentando escrever Infraestrutura como C\u00f3digo (IaC). Fazemos isso porque, em princ\u00edpio, sabemos escrever c\u00f3digo e temos um hist\u00f3rico como desenvolvedores de n\u00edvel \"acima da m\u00e9dia\". <\/p>\n<ul>\n<li>Temos um conjunto de vantagens: um certo background, conhecimento de pr\u00e1ticas, habilidade em programar e vontade de aprender coisas novas. <\/li>\n<li>E h\u00e1 uma parte deficiente, que \u00e9 a desvantagem: a falta de conhecimento t\u00e9cnico sobre infraestrutura. <\/li>\n<\/ul>\n<p>\n<b class=\"spoiler_title\">Conjunto de tecnologias que usamos em nosso IaC.<\/b><\/p>\n<ul>\n<li>Terraform para criar recursos.<\/li>\n<li>Packer para construir imagens. Essas s\u00e3o imagens do Windows e CentOS 7.<\/li>\n<li>Jsonnet, para fazer uma poderosa compila\u00e7\u00e3o no drone.io, assim como para gerar JSON do Packer e nossos m\u00f3dulos do Terraform.<\/li>\n<li>Azure.<\/li>\n<li>Ansible na prepara\u00e7\u00e3o das imagens.<\/li>\n<li>Python para servi\u00e7os auxiliares, bem como scripts de provisionamento.<\/li>\n<li>E tudo isso no VSCode com plugins compartilhados entre os membros da equipe.<\/li>\n<\/ul>\n<p>A conclus\u00e3o que tirei foi a seguinte: eu tentei instilar (primeiramente em mim mesmo) otimismo, queria dizer que ir\u00edamos tentar as abordagens e pr\u00e1ticas que conhecemos para enfrentar as dificuldades e desafios que existem neste campo. <noindex><a rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/465137\/\">do artigo anterior<\/a><\/noindex> Neste momento, estamos enfrentando os seguintes problemas de IaC: <\/p>\n<p>Imperfei\u00e7\u00f5es das ferramentas e meios de desenvolvimento de c\u00f3digo.<\/p>\n<ul>\n<li>Implanta\u00e7\u00e3o lenta. A infraestrutura \u00e9 uma parte do mundo real, e ele pode n\u00e3o ser r\u00e1pido.<\/li>\n<li>Falta de abordagens e pr\u00e1ticas.<\/li>\n<li>N\u00f3s somos novatos e n\u00e3o sabemos muito.<\/li>\n<li>Programa\u00e7\u00e3o extrema (XP) vem ao nosso socorro.<\/li>\n<\/ul>\n<p><\/p>\n<h2>A Extremal Programming (XP) vem em aux\u00edlio.<\/h2>\n<p>\nTodos os desenvolvedores est\u00e3o bem familiarizados com a programa\u00e7\u00e3o extrema (XP) e as pr\u00e1ticas que a sustentam. Muitos de n\u00f3s j\u00e1 trabalhamos com essa abordagem, que foi bem-sucedida. Ent\u00e3o, por que n\u00e3o aproveitar os princ\u00edpios e pr\u00e1ticas estabelecidos para enfrentar as dificuldades da infraestrutura? Decidimos aplicar essa abordagem e ver o que resulta.<\/p>\n<p><b class=\"spoiler_title\">Verificando a aplicabilidade da abordagem XP \u00e0 sua \u00e1rea<\/b>Apresento uma descri\u00e7\u00e3o do ambiente para o qual a XP se encaixa bem e como isso se relaciona conosco: <\/p>\n<p>1. Requisitos de software em mudan\u00e7a din\u00e2mica. T\u00ednhamos clareza sobre qual era o objetivo final. Mas os detalhes podem variar. N\u00f3s mesmos decidimos para onde queremos ir, portanto, os requisitos mudam periodicamente (principalmente por nossa pr\u00f3pria decis\u00e3o). Quando se trata da equipe SRE, que faz a automa\u00e7\u00e3o e tamb\u00e9m limita os requisitos e o escopo de trabalho, este ponto se aplica bem. <\/p>\n<p>2. Riscos causados por projetos de tempo fixo que usam novas tecnologias. Podemos enfrentar riscos ao usar coisas que n\u00e3o conhecemos. E este \u00e9 100% o nosso caso. Todo o nosso projeto \u00e9 o uso de tecnologias com as quais n\u00e3o est\u00e1vamos totalmente familiarizados. Isso \u00e9 um problema constante, pois muitas novas tecnologias surgem continuamente na \u00e1rea de infraestrutura. <\/p>\n<p>3,4. Pequena equipe de desenvolvimento ampliada e co-localizada. A tecnologia que voc\u00ea est\u00e1 usando permite testes unit\u00e1rios e funcionais automatizados. Esses dois pontos n\u00e3o se aplicam totalmente a n\u00f3s. Primeiro, n\u00e3o somos uma equipe co-localizada; segundo, somos nove pessoas, o que pode ser considerado um grande time. Embora, segundo algumas defini\u00e7\u00f5es, uma \"grande\" equipe tenha mais de 14 pessoas. <\/p>\n<p>Vamos considerar algumas pr\u00e1ticas da XP e como elas afetam a velocidade e a qualidade do feedback.<\/p>\n<h4>O princ\u00edpio do ciclo de feedback na XP<\/h4>\n<p>\nNa minha compreens\u00e3o, feedback \u00e9 a resposta \u00e0 pergunta: estou fazendo isso corretamente? Estamos indo na dire\u00e7\u00e3o certa? Na XP, h\u00e1 um esquema divino sobre isso: o ciclo de feedback em tempo. A quest\u00e3o interessante \u00e9 que quanto mais baixo estamos, mais rapidamente conseguimos obter feedback para responder \u00e0s perguntas necess\u00e1rias. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: como superar problemas com XP\" src=\"\/wp-content\/uploads\/2019\/10\/e381fb2d7937cbd1978fd6740e63e790.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEsse \u00e9 um tema bastante interessante para discuss\u00e3o, j\u00e1 que na ind\u00fastria de TI \u00e9 poss\u00edvel obter feedback rapidamente. Imagine o quanto \u00e9 doloroso fazer um projeto por seis meses e, s\u00f3 depois, descobrir que no in\u00edcio houve um erro. Isso acontece tanto no design quanto na constru\u00e7\u00e3o de sistemas complexos. <\/p>\n<p>No nosso caso, IaC nos ajuda com o feedback. Fa\u00e7o uma pequena corre\u00e7\u00e3o no esquema acima: o plano de lan\u00e7amento n\u00e3o \u00e9 um ciclo mensal, mas acontece v\u00e1rias vezes ao dia. Algumas pr\u00e1ticas est\u00e3o atreladas a esse ciclo do SO, que vamos explorar com mais detalhes.<\/p>\n<blockquote><p>Importante: o feedback pode se tornar a solu\u00e7\u00e3o para todos os problemas mencionados acima. Em conjunto com as pr\u00e1ticas XP, ele pode tirar voc\u00ea do abismo do desespero.<\/p><\/blockquote>\n<p><\/p>\n<h2>Como se tirar do abismo do desespero: tr\u00eas pr\u00e1ticas<\/h2>\n<p><\/p>\n<h4>Testes <\/h4>\n<p>\nOs testes s\u00e3o mencionados duas vezes no ciclo de feedback XP. Isso n\u00e3o \u00e9 \u00e0 toa. Eles s\u00e3o extremamente importantes para toda a t\u00e9cnica de programa\u00e7\u00e3o extrema. <\/p>\n<p>Presume-se que voc\u00ea tenha testes de Unidade e de Aceita\u00e7\u00e3o. Os primeiros oferecem feedback em poucos minutos, enquanto os \u00faltimos levam dias para serem escritos e s\u00e3o executados com menos frequ\u00eancia. <\/p>\n<p>H\u00e1 uma pir\u00e2mide cl\u00e1ssica de testes que mostra que deve haver mais de certos tipos de testes. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: como superar problemas com XP\" src=\"\/wp-content\/uploads\/2019\/10\/29f3217f11b67378c9c0c3f14fab9d61.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nComo esse esquema se aplica ao nosso projeto IaC? Na verdade... n\u00e3o se aplica. <\/p>\n<ul>\n<li>Embora os testes de Unidade devam ser muitos, n\u00e3o \u00e9 poss\u00edvel ter um n\u00famero excessivo deles. Ou eles testam algo de forma bastante indireta. Na pr\u00e1tica, podemos dizer que n\u00e3o os escrevemos de fato. Mas aqui est\u00e3o algumas aplica\u00e7\u00f5es para esses testes que n\u00f3s conseguimos fazer:\n<ol>\n<li>Teste de c\u00f3digo em jsonnet. Por exemplo, nosso pipeline de constru\u00e7\u00e3o no drone, que \u00e9 bastante complexo. O c\u00f3digo em jsonnet \u00e9 bem coberto por testes. <br \/>\n N\u00f3s usamos este <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/yugui\/jsonnetunit\">Unit testing framework for Jsonnet<\/a><\/noindex>. <\/li>\n<li> Testes em scripts que s\u00e3o executados ao iniciar o recurso. Scripts em Python, ent\u00e3o os testes tamb\u00e9m podem ser escritos para eles.<\/li>\n<\/ol>\n<\/li>\n<li>Potencialmente, \u00e9 poss\u00edvel verificar a configura\u00e7\u00e3o nos testes, mas n\u00e3o fazemos assim. Tamb\u00e9m existe a possibilidade de configurar a verifica\u00e7\u00e3o das regras de configura\u00e7\u00e3o de recursos atrav\u00e9s da <noindex><a rel=\"nofollow\" href=\"https:\/\/github.com\/wata727\/tflint\">tflint<\/a><\/noindex>. No entanto, para o Terraform, as verifica\u00e7\u00f5es s\u00e3o muito b\u00e1sicas, mas muitos cen\u00e1rios de teste foram escritos para AWS. E estamos na Azure, ent\u00e3o novamente n\u00e3o serve.<\/li>\n<li>Testes de integra\u00e7\u00e3o de componentes: aqui depende de como voc\u00ea os classifica e onde os categoriza. Mas, em princ\u00edpio, eles funcionam.\n<p>Assim s\u00e3o os testes de integra\u00e7\u00e3o. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: como superar problemas com XP\" src=\"\/wp-content\/uploads\/2019\/10\/b4771e9e5d329ffb2ba565ead7fdddfd.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste \u00e9 um exemplo ao construir imagens no Drone CI. Para alcan\u00e7\u00e1-los, \u00e9 preciso esperar 30 minutos enquanto a imagem do Packer \u00e9 constru\u00edda, depois mais 15 minutos enquanto s\u00e3o executados. Mas eles existem! <\/p>\n<p><b class=\"spoiler_title\">Algoritmo de verifica\u00e7\u00e3o de imagens<\/b> <\/p>\n<ol>\n<li>Primeiro, o Packer deve preparar a imagem completamente.<\/li>\n<li>Ao lado do teste, h\u00e1 uma ferramenta Terraform com estado local, que usamos para implantar essa imagem. <\/li>\n<li>Durante a implanta\u00e7\u00e3o, usamos um pequeno m\u00f3dulo pr\u00f3ximo para facilitar o trabalho com a imagem. <\/li>\n<li>Quando a VM \u00e9 gerada a partir da imagem, \u00e9 poss\u00edvel iniciar as verifica\u00e7\u00f5es. Basicamente, as verifica\u00e7\u00f5es s\u00e3o realizadas na m\u00e1quina. Verificamos como os scripts funcionaram no in\u00edcio, como os dem\u00f4nios operam. Para isso, acessamos a m\u00e1quina rec\u00e9m-criada via ssh ou winrm e verificamos o estado da configura\u00e7\u00e3o ou se os servi\u00e7os est\u00e3o ativos.<\/li>\n<\/ol>\n<p>\n <\/li>\n<li>A situa\u00e7\u00e3o \u00e9 semelhante com os testes de integra\u00e7\u00e3o nos m\u00f3dulos do Terraform. Aqui est\u00e1 uma tabela resumida que explica as caracter\u00edsticas desses testes.\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: como superar problemas com XP\" src=\"\/wp-content\/uploads\/2019\/10\/e2624fb97831701e374a7e8e7fe39a16.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nO feedback no pipeline leva cerca de 40 minutos. Tudo demora muito. Pode ser utilizado para regress\u00e3o, mas para novos desenvolvimentos \u00e9 totalmente invi\u00e1vel. Se nos prepararmos muito bem, organizarmos o ambiente e os scripts, podemos reduzir para 10 minutos. Mas isso ainda n\u00e3o \u00e9 o mesmo que testes unit\u00e1rios, que podem ser feitos em 5 segundos at\u00e9 100 vezes. <\/li>\n<\/ul>\n<p>\nA aus\u00eancia de testes unit\u00e1rios na constru\u00e7\u00e3o de imagens ou m\u00f3dulos Terraform leva \u00e0 transfer\u00eancia do trabalho para servi\u00e7os separados, que podem ser chamados via REST ou por scripts em Python.<\/p>\n<p>Por exemplo, precis\u00e1vamos garantir que, ao iniciar uma m\u00e1quina virtual, ela se registrasse no servi\u00e7o <noindex><a rel=\"nofollow\" href=\"https:\/\/www.scaleft.com\/\">ScaleFT<\/a><\/noindex>, e ao destruir a VM, ela se removesse.<\/p>\n<p>Como o ScaleFT \u00e9 um servi\u00e7o, somos obrigados a interagir com ele atrav\u00e9s da API. Foi escrita uma camada que podemos chamar e dizer: 'Entre e remova isso e aquilo'. Ela mant\u00e9m todas as configura\u00e7\u00f5es e acessos necess\u00e1rios. <\/p>\n<p>Agora podemos escrever testes adequados, pois isso n\u00e3o difere de um software comum: simulamos alguma API, voc\u00ea a chama e vemos o que acontece. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: como superar problemas com XP\" src=\"\/wp-content\/uploads\/2019\/10\/dc17aaa64038acb080669d31fe8ecfe0.jpg\" style=\"display:block;margin: 0 auto;\" \/><\/p>\n<blockquote><p>Resultados dos testes: o teste unit\u00e1rio, que deveria ser fornecido pelo sistema operacional em um minuto, n\u00e3o o \u00e9. V\u00e1rios tipos de testes em n\u00edveis superiores da pir\u00e2mide geram efeito, mas resolvem apenas parte dos problemas. <\/p><\/blockquote>\n<h4>Programa\u00e7\u00e3o em par<\/h4>\n<p>\nOs testes s\u00e3o, com certeza, algo bom. Pode-se escrever muitos deles, e eles podem ser de diferentes tipos. Eles funcionar\u00e3o em seus n\u00edveis e nos dar\u00e3o feedback. Mas o problema com testes unit\u00e1rios ruins, que oferecem o sistema operacional mais r\u00e1pido, persiste. Apesar disso, ainda queremos um sistema operacional r\u00e1pido, que seja f\u00e1cil e agrad\u00e1vel de trabalhar. Sem mencionar a qualidade da solu\u00e7\u00e3o obtida. Felizmente, existem t\u00e9cnicas que proporcionam feedback ainda mais r\u00e1pido do que os testes de unidade. Isso \u00e9 a programa\u00e7\u00e3o em par.<\/p>\n<p>Ao escrever c\u00f3digo, \u00e9 desej\u00e1vel obter feedback sobre sua qualidade o mais r\u00e1pido poss\u00edvel. Sim, pode-se escrever tudo em uma branch de recursos (para n\u00e3o quebrar nada para ningu\u00e9m), fazer um pull request no GitHub, designar algu\u00e9m cujo parecer \u00e9 relevante e aguardar uma resposta. <\/p>\n<p>Mas a espera pode ser longa. As pessoas est\u00e3o todas ocupadas, e a resposta, mesmo que chegue, pode n\u00e3o ser da mais alta qualidade. Suponhamos que a resposta chegue imediatamente, o revisor entendeu instantaneamente toda a inten\u00e7\u00e3o, mas a resposta ainda assim chega com atraso, p\u00f3s-fato. E desejamos antes. \u00c9 para isso que a programa\u00e7\u00e3o em par se destina - para que no momento da escrita j\u00e1 tenhamos o feedback.<\/p>\n<p>A seguir, apresento os estilos de programa\u00e7\u00e3o em par e sua aplicabilidade no trabalho com IaC: <\/p>\n<p><b>1. Cl\u00e1ssico, Experiente + experiente, troca a cada intervalo de tempo definido.<\/b> Duas fun\u00e7\u00f5es \u2013 driver e navegador. Duas pessoas. Elas trabalham juntas em um \u00fanico c\u00f3digo e trocam de pap\u00e9is ap\u00f3s um intervalo de tempo previamente designado. <\/p>\n<p>Vamos considerar a compatibilidade de nossos problemas com o estilo: <\/p>\n<ul>\n<li>Problema: imperfei\u00e7\u00e3o das ferramentas, meios para desenvolver c\u00f3digo. <br \/>\nImpacto negativo: desenvolvimento mais longo, aceleramos, e o ritmo de trabalho se interrompe.<br \/>\n Como lidamos: aplicamos outras ferramentas, IDEs compartilhadas e ainda ensinamos atalhos.<\/li>\n<li> Problema: implanta\u00e7\u00e3o lenta. <br \/>\nImpacto negativo: aumenta o tempo para cria\u00e7\u00e3o de uma parte funcional do c\u00f3digo. Ficamos entediados enquanto esperamos, as m\u00e3os se arriscam a se envolver em outra coisa enquanto aguardamos. <br \/>\nComo lidamos: n\u00e3o superamos esse ponto.<\/li>\n<li> Problema: falta de abordagens e pr\u00e1ticas. <br \/>\nImpacto negativo: n\u00e3o h\u00e1 conhecimento sobre o que \u00e9 bom e o que \u00e9 ruim. Isso prolonga a obten\u00e7\u00e3o de feedback. <br \/>\nComo lidamos: a troca de opini\u00f5es e pr\u00e1ticas no trabalho em par quase resolve o problema.<\/li>\n<\/ul>\n<p>\nO principal problema da aplica\u00e7\u00e3o desse estilo em IaC \u00e9 o ritmo irregular de trabalho. No desenvolvimento tradicional de software, voc\u00ea tem um fluxo muito uniforme. Voc\u00ea pode gastar cinco minutos e escrever N. Gastar 10 minutos e escrever 2N, 15 minutos \u2013 3N. Aqui, voc\u00ea pode gastar cinco minutos e escrever N, e depois gastar mais 30 minutos e escrever um d\u00e9cimo de N. Aqui voc\u00ea nada sabe, fica preso, estagnado. O esclarecimento leva tempo e desvia do ato de programar. <\/p>\n<blockquote><p>Conclus\u00e3o: em sua forma pura, n\u00e3o nos serve.<\/p><\/blockquote>\n<p><b>2. Ping-pong. Esta abordagem pressup\u00f5e que um participante escreve o teste, enquanto o outro faz a implementa\u00e7\u00e3o correspondente.<\/b> Considerando que os testes unit\u00e1rios s\u00e3o complicados e \u00e9 preciso escrever um teste de integra\u00e7\u00e3o demorado em termos de programa\u00e7\u00e3o, toda a leveza do ping-pong se perde. <\/p>\n<p>Posso dizer que tentamos dividir as responsabilidades na elabora\u00e7\u00e3o do cen\u00e1rio de teste e na implementa\u00e7\u00e3o do c\u00f3digo correspondente. Um participante elaborava o cen\u00e1rio e, nessa parte do trabalho, ele era respons\u00e1vel, tendo a palavra final. O outro era respons\u00e1vel pela implementa\u00e7\u00e3o. Isso funcionou bem. A qualidade do cen\u00e1rio aumenta com essa abordagem. <\/p>\n<blockquote><p>Conclus\u00e3o: infelizmente, o ritmo de trabalho n\u00e3o permite usar o ping-pong como pr\u00e1tica de programa\u00e7\u00e3o em par em IaC.<\/p><\/blockquote>\n<p>\n <b>3. Strong Style.<\/b> <noindex><a rel=\"nofollow\" href=\"http:\/\/llewellynfalco.blogspot.com\/2014\/06\/llewellyns-strong-style-pairing.html\">Uma pr\u00e1tica complexa.<\/a><\/noindex>A ideia \u00e9 que um participante se torna um navegador diretivo, enquanto o outro assume o papel de um driver executor. Nesse caso, o direito de decis\u00e3o \u00e9 exclusivamente do navegador. O driver apenas digita e pode influenciar o que acontece com palavras. Os pap\u00e9is n\u00e3o mudam por longos per\u00edodos. <\/p>\n<p>\u00c9 muito bom para aprendizagem, mas requer fortes habilidades interpessoais. Aqui, encontramos dificuldades. A t\u00e9cnica foi desafiadora. E n\u00e3o se trata nem mesmo da infraestrutura. <\/p>\n<blockquote><p>Conclus\u00e3o: potencialmente pode ser aplicada, n\u00e3o desistimos da tentativa.<\/p><\/blockquote>\n<p>\n<b>4. Mobbing, swarming e todos os estilos conhecidos, mas n\u00e3o listados aqui.<\/b> n\u00e3o s\u00e3o considerados, pois n\u00e3o experimentamos e n\u00e3o podemos comentar sobre eles no contexto do nosso trabalho.<\/p>\n<blockquote><p>Resumo geral sobre o uso de programa\u00e7\u00e3o em par:<\/p>\n<ul>\n<li>Temos um ritmo de trabalho desigual, que atrapalha.<\/li>\n<li>Nos deparamos com habilidades interpessoais insuficientes. E o dom\u00ednio n\u00e3o ajuda a superar essas defici\u00eancias.<\/li>\n<li>Testes longos e problemas com ferramentas tornam o desenvolvimento em par complicado.<\/li>\n<\/ul>\n<\/blockquote>\n<p><b>5. Apesar disso, tamb\u00e9m houve sucessos. Criamos nosso pr\u00f3prio m\u00e9todo \"Converg\u00eancia - Diverg\u00eancia\".<\/b> Vou descrever de forma breve como funciona. <\/p>\n<p>Temos parceiros constantes por alguns dias (menos de uma semana). Realizamos uma tarefa em conjunto. Passamos um tempo juntos: um escreve, o outro observa, como um time de suporte. Depois nos dispersamos por um tempo, cada um fazendo suas pr\u00f3prias coisas; em seguida, nos reunimos novamente, sincronizamos rapidamente, fazemos algo juntos e nos dispersamos outra vez. <\/p>\n<h4>Planejamento e comunica\u00e7\u00e3o<\/h4>\n<p>\nO \u00faltimo bloco de pr\u00e1ticas, atrav\u00e9s do qual resolvemos problemas de sistema operacional, \u00e9 a organiza\u00e7\u00e3o do trabalho com as pr\u00f3prias tarefas. Isso tamb\u00e9m inclui a troca de experi\u00eancias que ocorre fora do trabalho em dupla. Vamos considerar tr\u00eas pr\u00e1ticas:<\/p>\n<p><b>1. Tarefas atrav\u00e9s da \u00e1rvore de objetivos.<\/b> A gest\u00e3o geral do projeto \u00e9 organizada atrav\u00e9s de uma \u00e1rvore que se estende infinitamente para o futuro. Tecnologicamente, a gest\u00e3o \u00e9 feita no Miro. H\u00e1 uma tarefa - ela \u00e9 um objetivo intermedi\u00e1rio. Dela surgem objetivos menores ou grupos de tarefas. A partir deles, surgem as pr\u00f3prias tarefas. Todas as tarefas s\u00e3o criadas e geridas neste quadro. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: como superar problemas com XP\" src=\"\/wp-content\/uploads\/2019\/10\/fe601e959f0055de4f7f4c39ae713c31.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\nEste esquema tamb\u00e9m fornece feedback, que ocorre uma vez por dia, quando sincronizamos em reuni\u00f5es. A presen\u00e7a de um plano comum, estruturado e totalmente transparente para todos, permite que cada um esteja ciente do que est\u00e1 acontecendo e de qu\u00e3o longe avan\u00e7amos em nosso progresso. <\/p>\n<p>Vantagens da vis\u00e3o visual das tarefas:<\/p>\n<ul>\n<li>Causalidade. Cada tarefa leva a um objetivo global. As tarefas s\u00e3o agrupadas por objetivos menores. O dom\u00ednio da infraestrutura \u00e9 bastante t\u00e9cnico. Nem sempre fica claro, \u00e0 primeira vista, qual o impacto espec\u00edfico nos neg\u00f3cios que, por exemplo, a elabora\u00e7\u00e3o de um runbook para migra\u00e7\u00e3o para outro nginx pode ter. Ter ao lado um cart\u00e3o de objetivo torna isso mais claro.<br \/>\n <img decoding=\"async\" alt=\"Infrastructure as Code: como superar problemas com XP\" src=\"\/wp-content\/uploads\/2019\/10\/fc4da9d277f7dc186a5710cf2be4419c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n Causalidade \u00e9 uma propriedade importante das tarefas. Ela responde diretamente \u00e0 pergunta: \"Estou fazendo a coisa certa?\" <\/li>\n<li>Paralelismo. Somos nove pessoas e n\u00e3o \u00e9 fisicamente poss\u00edvel que todos se lancem em uma \u00fanica tarefa. Tarefas de um mesmo dom\u00ednio tamb\u00e9m nem sempre s\u00e3o suficientes. Somos for\u00e7ados a paralelizar o trabalho entre pequenos grupos de trabalho. As equipes ficam focadas em sua tarefa por um tempo e podem ser refor\u00e7adas por mais algu\u00e9m. \u00c0s vezes, pessoas dessa equipe se afastam. Algu\u00e9m sai de f\u00e9rias, outro faz uma apresenta\u00e7\u00e3o para a confer\u00eancia DevOps conf, outro escreve um artigo no Habr. Saber quais metas e tarefas podem ser realizadas em paralelo se torna muito importante. <\/li>\n<\/ul>\n<p>\n<b>2. Troca de facilitadores nas reuni\u00f5es matinais.<\/b> Nos stand-ups surgiu o problema \u2013 muitas tarefas s\u00e3o feitas em paralelo. \u00c0s vezes, as tarefas est\u00e3o pouco relacionadas e n\u00e3o h\u00e1 clareza sobre quem est\u00e1 fazendo o qu\u00ea. A opini\u00e3o de um membro da equipe \u00e9 muito importante. \u00c9 uma informa\u00e7\u00e3o adicional que pode mudar a resolu\u00e7\u00e3o da tarefa. Claro, geralmente voc\u00ea tem algu\u00e9m como parceiro, mas a consulta e dicas nunca s\u00e3o demais. <\/p>\n<p>Para melhorar essa situa\u00e7\u00e3o, aplicamos a t\u00e9cnica \"Troca de Facilitador no Stand-up\". Agora eles rotacionam por uma lista espec\u00edfica e isso tem seu efeito. Quando chega sua vez, voc\u00ea \u00e9 for\u00e7ado a se aprofundar e entender o que est\u00e1 acontecendo, para conduzir bem a reuni\u00e3o de scrum. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: como superar problemas com XP\" src=\"\/wp-content\/uploads\/2019\/10\/622973a654ecd3e27a7a366596814ffc.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<br \/>\n<b>3. Demonstra\u00e7\u00e3o interna.<\/b> A ajuda na resolu\u00e7\u00e3o de tarefas por meio da programa\u00e7\u00e3o em par, visualiza\u00e7\u00e3o na \u00e1rvore de tarefas e suporte nas reuni\u00f5es de scrum pela manh\u00e3 \u2013 \u00e9 bom, mas n\u00e3o ideal. Em par, voc\u00ea est\u00e1 limitado apenas ao seu conhecimento. A \u00e1rvore de tarefas ajuda a entender globalmente quem est\u00e1 fazendo o qu\u00ea. E o facilitador e colegas na reuni\u00e3o matinal n\u00e3o v\u00e3o se aprofundar em seus problemas. Com certeza podem acabar esquecendo algo. <\/p>\n<p>A solu\u00e7\u00e3o foi encontrada na demonstra\u00e7\u00e3o do trabalho realizado uns aos outros e na subsequente discuss\u00e3o. Nos reunimos uma vez por semana por uma hora e mostramos os detalhes das solu\u00e7\u00f5es para as tarefas que fizemos na \u00faltima semana. <\/p>\n<p>Durante a demonstra\u00e7\u00e3o, \u00e9 necess\u00e1rio revelar os detalhes da tarefa e obrigatoriamente demonstrar seu funcionamento. <\/p>\n<p><b class=\"spoiler_title\">A apresenta\u00e7\u00e3o pode ser conduzida por um checklist.<\/b>1. Coloque no contexto. De onde veio a tarefa, por que isso era realmente necess\u00e1rio?<\/p>\n<p>2. Como a tarefa foi resolvida anteriormente? Por exemplo, exigia um clique massivo com o mouse, ou era completamente imposs\u00edvel fazer algo.<\/p>\n<p>3. Como melhoramos isso. Por exemplo: \"Olhem, agora temos um script, aqui est\u00e1 o README.\"<\/p>\n<p>4. Mostre como isso funciona. \u00c9 prefer\u00edvel realizar um cen\u00e1rio de usu\u00e1rio diretamente. Quero X, fa\u00e7o Y, vejo Z (ou W). Por exemplo, implanto NGINX, verifico a URL, recebo 200 OK. Se a a\u00e7\u00e3o demorar, prepare com anteced\u00eancia para mostrar depois. Idealmente, n\u00e3o quebrar as coisas uma hora antes da demonstra\u00e7\u00e3o, especialmente se for fr\u00e1gil.<\/p>\n<p>5. Explique qu\u00e3o bem o problema foi resolvido, quais dificuldades ainda existem, o que n\u00e3o foi conclu\u00eddo e quais melhorias s\u00e3o poss\u00edveis no futuro. Por exemplo, agora temos CLI, depois haver\u00e1 automa\u00e7\u00e3o completa em CI.<\/p>\n<p>\u00c9 desej\u00e1vel que cada palestrante se limite a 5-10 minutos. Se sua apresenta\u00e7\u00e3o for significativamente importante e levar mais tempo, combine isso antecipadamente no canal sre-takeover.<\/p>\n<p>Ap\u00f3s a parte presencial, sempre haver\u00e1 uma discuss\u00e3o no thread. \u00c9 aqui que surge o feedback necess\u00e1rio sobre suas tarefas. <\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: como superar problemas com XP\" src=\"\/wp-content\/uploads\/2019\/10\/77da888d24b52c7eea7e65d2400e152c.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\nNo final, uma pesquisa \u00e9 realizada para avaliar a utilidade do que ocorreu. Isso j\u00e1 \u00e9 um feedback sobre o conte\u00fado da apresenta\u00e7\u00e3o e a import\u00e2ncia da tarefa.<\/p>\n<p><img decoding=\"async\" alt=\"Infrastructure as Code: como superar problemas com XP\" src=\"\/wp-content\/uploads\/2019\/10\/7642cd87050171cc4a6bf278329dd283.jpg\" style=\"display:block;margin: 0 auto;\" \/><br \/>\n<\/p>\n<h2>Conclus\u00f5es longas e o que vem a seguir<\/h2>\n<p>\nPode parecer que o tom do artigo \u00e9 um pouco pessimista. Isso n\u00e3o \u00e9 verdade. Dois n\u00edveis b\u00e1sicos de feedback, ou seja, testes e programa\u00e7\u00e3o em par, funcionam. N\u00e3o t\u00e3o perfeitamente quanto no desenvolvimento tradicional, mas o efeito positivo \u00e9 evidente. <\/p>\n<p>Os testes, em sua forma atual, oferecem apenas uma cobertura parcial do c\u00f3digo. Muitas fun\u00e7\u00f5es de configura\u00e7\u00e3o acabam n\u00e3o sendo testadas. Seu impacto imediato ao escrever c\u00f3digo \u00e9 baixo. Contudo, o efeito dos testes de integra\u00e7\u00e3o \u00e9 positivo, e s\u00e3o eles que permitem refatora\u00e7\u00f5es sem medo. Isso \u00e9 uma grande conquista. Al\u00e9m disso, com o foco na programa\u00e7\u00e3o em linguagens de alto n\u00edvel (para n\u00f3s, Python e Go), o problema se dissipa. Para o 'cola', muitas verifica\u00e7\u00f5es n\u00e3o s\u00e3o necess\u00e1rias, basta a integra\u00e7\u00e3o geral.<\/p>\n<p>O trabalho em dupla depende mais das pessoas espec\u00edficas. H\u00e1 o fator da tarefa e nossas soft skills. Com algumas pessoas, o resultado \u00e9 excelente; com outras, n\u00e3o t\u00e3o bom. H\u00e1, sem d\u00favida, benef\u00edcios. Est\u00e1 claro que, mesmo com o cumprimento insuficiente das regras de trabalho em par, o simples fato de realizar tarefas conjuntamente tem um impacto positivo na qualidade do resultado. Pessoalmente, trabalhar em dupla \u00e9 mais f\u00e1cil e agrad\u00e1vel para mim.<\/p>\n<p>M\u00e9todos mais avan\u00e7ados de influ\u00eancia no SO - planejamento e gest\u00e3o de tarefas realmente produzem efeitos: troca de conhecimentos de qualidade e melhoria na qualidade do desenvolvimento. <\/p>\n<h4>Resumos curtos em uma linha <\/h4>\n<p><\/p>\n<ul>\n<li>Pr\u00e1ticas de XP funcionam em IaC, mas com menor efici\u00eancia.<\/li>\n<li>Fortale\u00e7a o que funciona.<\/li>\n<li>Crie seus pr\u00f3prios mecanismos e pr\u00e1ticas compensat\u00f3rias.<\/li>\n<\/ul>\n<p>Fonte: <a content=\"nofollow\" rel=\"nofollow\" href=\"https:\/\/habr.com\/ru\/company\/dodopizzaio\/blog\/470620\/\">habr.com<\/a><\/p>","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"excerpt":{"rendered":"<p>\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u0436\u0430\u043b\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u0436\u0438\u0437\u043d\u044c \u0432 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0435 Infrastructure as code \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438. \u0421\u0435\u0433\u043e\u0434\u043d\u044f \u044f \u0432\u0435\u0440\u043d\u0443\u043b\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u0430\u0442\u044c, \u043a\u0430\u043a\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u044b \u0438 \u043f\u0440\u0430\u043a\u0442\u0438\u043a\u0438 \u043f\u043e\u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u0440\u0432\u0430\u0442\u044c\u0441\u044f \u0438\u0437 \u0431\u0435\u0437\u0434\u043d\u044b \u043e\u0442\u0447\u0430\u044f\u043d\u0438\u044f \u0438 \u0432\u044b\u0440\u0443\u043b\u0438\u0442\u044c \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044e \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0435 \u0440\u0443\u0441\u043b\u043e. \u0412 \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u0439 \u0441\u0442\u0430\u0442\u044c\u0435 \u00abInfrastructure as code: \u043f\u0435\u0440\u0432\u043e\u0435 \u0437\u043d\u0430\u043a\u043e\u043c\u0441\u0442\u0432\u043e\u00bb \u044f \u0434\u0435\u043b\u0438\u043b\u0441\u044f \u0441\u0432\u043e\u0438\u043c \u0432\u043f\u0435\u0447\u0430\u0442\u043b\u0435\u043d\u0438\u0435\u043c \u043e\u0442 \u044d\u0442\u043e\u0439 \u0441\u0444\u0435\u0440\u044b, [&hellip;]<\/p>\n","protected":false,"gt_translate_keys":[{"key":"rendered","format":"html"}]},"author":1,"featured_media":29066,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[688],"tags":[],"class_list":["post-38747","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-administrirovanie"],"aioseo_notices":[],"aioseo_head":"\n\t\t<!-- All in One SEO 5.0.3 - aioseo.com -->\n\t<meta name=\"description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u0436\u0430\u043b\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u0436\u0438\u0437\u043d\u044c \u0432 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0435 Infrastructure as code \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.\" \/>\n\t<meta name=\"robots\" content=\"max-image-preview:large\" \/>\n\t<meta name=\"author\" content=\"Yuri Gagarin\"\/>\n\t<link rel=\"canonical\" href=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp\" \/>\n\t\t<meta name=\"generator\" content=\"All in One SEO (AIOSEO) 5.0.3\" \/>\n\t\t<meta property=\"og:locale\" content=\"pt_PT\" \/>\n\t\t<meta property=\"og:site_name\" content=\"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b\" \/>\n\t\t<meta property=\"og:type\" content=\"article\" \/>\n\t\t<meta property=\"og:title\" content=\"\ud83e\udd47Infrastructure as Code: \u043a\u0430\u043a \u043f\u043e\u0431\u043e\u0440\u043e\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e XP | ProHoster\" \/>\n\t\t<meta property=\"og:description\" content=\"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u0436\u0430\u043b\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u0436\u0438\u0437\u043d\u044c \u0432 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0435 Infrastructure as code \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.\" \/>\n\t\t<meta property=\"og:url\" content=\"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp\" \/>\n\t\t<meta property=\"og:image\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:secure_url\" content=\"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg\" \/>\n\t\t<meta property=\"og:image:width\" content=\"350\" \/>\n\t\t<meta property=\"og:image:height\" content=\"350\" \/>\n\t\t<meta property=\"article:published_time\" content=\"2019-10-31T19:25:42+00:00\" \/>\n\t\t<meta property=\"article:modified_time\" content=\"2019-10-31T19:25:42+00:00\" \/>\n\t\t<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<meta property=\"article:author\" content=\"https:\/\/www.facebook.com\/prohoster\" \/>\n\t\t<!-- All in One SEO -->\n\n","aioseo_head_json":{"title":"\ud83e\udd47Infrastructure as Code: como superar problemas com XP | ProHoster","description":"Ol\u00e1, Habr! Antes eu reclamava da vida na paradigm\u00e1tica Infrastructure as Code e n\u00e3o oferecia solu\u00e7\u00f5es para a situa\u00e7\u00e3o.","canonical_url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp","robots":"max-image-preview:large","keywords":"","webmasterTools":{"miscellaneous":""},"schema":null,"og:locale":"pt_PT","og:site_name":"ProHoster | \u041a\u0443\u043f\u0438\u0442\u044c \u043d\u0430\u0434\u0435\u0436\u043d\u044b\u0439 \u0445\u043e\u0441\u0442\u0438\u043d\u0433 \u0434\u043b\u044f \u0441\u0430\u0439\u0442\u043e\u0432 \u0441 \u0437\u0430\u0449\u0438\u0442\u043e\u0439 \u043e\u0442 DDoS, VPS VDS \u0441\u0435\u0440\u0432\u0435\u0440\u044b","og:type":"article","og:title":"\ud83e\udd47Infrastructure as Code: \u043a\u0430\u043a \u043f\u043e\u0431\u043e\u0440\u043e\u0442\u044c \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e XP | ProHoster","og:description":"\u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440! \u0420\u0430\u043d\u044c\u0448\u0435 \u044f \u0436\u0430\u043b\u043e\u0432\u0430\u043b\u0441\u044f \u043d\u0430 \u0436\u0438\u0437\u043d\u044c \u0432 \u043f\u0430\u0440\u0430\u0434\u0438\u0433\u043c\u0435 Infrastructure as code \u0438 \u043d\u0438\u0447\u0435\u0433\u043e \u043d\u0435 \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u043b \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u0438\u0432\u0448\u0435\u0439\u0441\u044f \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.","og:url":"https:\/\/prohoster.info\/pt\/blog\/administrirovanie\/infrastructure-as-code-kak-poborot-problemy-s-pomoshhyu-xp","og:image":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:secure_url":"https:\/\/prohoster.info\/wp-content\/uploads\/2021\/11\/logo-350.jpg","og:image:width":350,"og:image:height":350,"article:published_time":"2019-10-31T19:25:42+00:00","article:modified_time":"2019-10-31T19:25:42+00:00","article:publisher":"https:\/\/www.facebook.com\/prohoster","article:author":"https:\/\/www.facebook.com\/prohoster"},"aioseo_meta_data":{"post_id":"38747","title":null,"description":null,"keywords":null,"keyphrases":null,"primary_term":null,"canonical_url":null,"og_title":null,"og_description":null,"og_object_type":"default","og_image_type":"default","og_image_url":null,"og_image_width":null,"og_image_height":null,"og_image_custom_url":null,"og_image_custom_fields":null,"og_video":null,"og_custom_url":null,"og_article_section":null,"og_article_tags":null,"twitter_use_og":false,"twitter_card":"default","twitter_image_type":"default","twitter_image_url":null,"twitter_image_custom_url":null,"twitter_image_custom_fields":null,"twitter_title":null,"twitter_description":null,"schema":{"blockGraphs":[],"customGraphs":[],"default":{"data":{"Article":[],"Course":[],"Dataset":[],"FAQPage":[],"Movie":[],"Person":[],"Product":[],"ProductReview":[],"Car":[],"Recipe":[],"Service":[],"SoftwareApplication":[],"WebPage":[]},"graphName":"","isEnabled":true},"graphs":[]},"schema_type":null,"schema_type_options":null,"pillar_content":false,"robots_default":true,"robots_noindex":false,"robots_noarchive":false,"robots_nosnippet":false,"robots_nofollow":false,"robots_noimageindex":false,"robots_noodp":false,"robots_notranslate":false,"robots_max_snippet":null,"robots_max_videopreview":null,"robots_max_imagepreview":"large","priority":null,"frequency":null,"local_seo":null,"seo_analyzer_scan_date":"2026-01-23 23:16:19","breadcrumb_settings":null,"limit_modified_date":false,"reviewed_by":null,"ai":null,"created":"2021-03-01 01:04:30","updated":"2026-01-23 23:16:19","focus_keyword":null,"additional_keywords":null,"truseo_locale":null},"gt_translate_keys":[{"key":"link","format":"url"}],"_links":{"self":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/38747","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/comments?post=38747"}],"version-history":[{"count":0,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/posts\/38747\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media\/29066"}],"wp:attachment":[{"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/media?parent=38747"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/categories?post=38747"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/prohoster.info\/pt\/wp-json\/wp\/v2\/tags?post=38747"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}