<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Gabriel Teodoro</title>
    <description>The latest articles on DEV Community by Gabriel Teodoro (@oigabrielteodoro).</description>
    <link>https://dev.to/oigabrielteodoro</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F796979%2F0ca528fc-1971-4ed5-a2d8-fc9d82522e6c.jpeg</url>
      <title>DEV Community: Gabriel Teodoro</title>
      <link>https://dev.to/oigabrielteodoro</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/oigabrielteodoro"/>
    <language>en</language>
    <item>
      <title>O impacto das PWAs no desenvolvimento de apps</title>
      <dc:creator>Gabriel Teodoro</dc:creator>
      <pubDate>Wed, 31 Jul 2024 14:51:09 +0000</pubDate>
      <link>https://dev.to/tino-tech/o-impacto-das-pwas-no-desenvolvimento-de-apps-46gl</link>
      <guid>https://dev.to/tino-tech/o-impacto-das-pwas-no-desenvolvimento-de-apps-46gl</guid>
      <description>&lt;p&gt;Progressive Web Apps (PWAs) têm se destacado como uma abordagem poderosa para combinar as melhores características das aplicações web e das aplicações móveis nativas. Com a capacidade de oferecer uma experiência de usuário rápida, confiável e engajadora, as PWAs são uma escolha popular para muitos desenvolvedores que buscam alcançar um público amplo, independentemente do dispositivo ou plataforma.&lt;/p&gt;

&lt;h3&gt;
  
  
  O que são PWAs?
&lt;/h3&gt;

&lt;p&gt;Progressive Web Apps são aplicações web que utilizam tecnologias modernas para proporcionar uma experiência nativa aos usuários. Elas são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Progressivas&lt;/strong&gt;: Funcionam para todos os usuários, independentemente do navegador escolhido, pois são construídas com aprimoramento progressivo como princípio fundamental.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responsivas&lt;/strong&gt;: Adaptam-se a diferentes tamanhos de tela e dispositivos, oferecendo uma experiência consistente e otimizada.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Conectadas&lt;/strong&gt;: Utilizam Service Workers para funcionar offline ou em conexões de rede instáveis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Seguras&lt;/strong&gt;: Servidas via HTTPS para garantir que o conteúdo não seja interceptado e manipulado.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Engajadoras&lt;/strong&gt;: Podem ser instaladas diretamente no dispositivo do usuário, permitindo acesso rápido e direto, sem necessidade de passar pela loja de aplicativos.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Benefícios das PWAs
&lt;/h3&gt;

&lt;p&gt;Desenvolver PWAs oferece diversas vantagens, incluindo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Acessibilidade&lt;/strong&gt;: Ampliam o alcance da aplicação para uma base de usuários mais ampla, incluindo dispositivos com conexões de internet mais lentas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Economia de espaço&lt;/strong&gt;: Não ocupam espaço significativo no dispositivo do usuário, como as aplicações nativas.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Atualizações automáticas&lt;/strong&gt;: As atualizações são aplicadas automaticamente, proporcionando uma experiência sempre atualizada.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SEO amigável&lt;/strong&gt;: São facilmente indexáveis por mecanismos de busca, melhorando a visibilidade online da aplicação.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Tecnologias e Práticas Recomendadas
&lt;/h3&gt;

&lt;p&gt;Para desenvolver uma PWA eficaz, é importante considerar:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Manifesto Web&lt;/strong&gt;: Criação de um manifesto web (manifest.json) para descrever a aplicação, incluindo nome, ícone, cores temáticas e outras informações relevantes para a instalação na tela inicial dos dispositivos móveis.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service Workers&lt;/strong&gt;: Implementação de Service Workers para gerenciar o cache e oferecer funcionalidade offline.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Responsividade&lt;/strong&gt;: Garantia de que a aplicação seja totalmente responsiva, utilizando media queries e técnicas de design responsivo.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Segurança&lt;/strong&gt;: Garantia de que a aplicação seja servida via HTTPS para proteger os dados dos usuários e garantir a integridade das informações.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Como usamos no Tino esse recurso?
&lt;/h3&gt;

&lt;p&gt;Tinhamos aqui no Tino uma dúvida sobre o interesse do usuário a baixar ou utilizar algum aplicativo, utilizamos o PWA como um recurso rápido e barato para experimentar essa hipótese.&lt;/p&gt;

&lt;p&gt;Primeiro implementamos as configurações mínimas para o PWA funcionar e com uma boa experiência para instalação, infelizmente somente para android é possível criar uma experiência mais fluida onde um botão na tela permite executar o processo de instalar o App.&lt;/p&gt;

&lt;p&gt;Algumas semanas depois mais de 30% dos nossos acessos já eram através do PWA instalado no celular dos nossos usuários, comprovando assim um forte interesse a adoção e uso de um App, guiando nossas escolhas de produto por impacto e valor gerado.&lt;/p&gt;

&lt;h3&gt;
  
  
  Conclusão
&lt;/h3&gt;

&lt;p&gt;Desenvolver aplicações PWA permite aos desenvolvedores oferecer uma experiência de usuário de alta qualidade que combina o melhor das aplicações web e nativas. Ao adotar as melhores práticas e tecnologias modernas, é possível criar PWAs que não apenas atendem, mas superam as expectativas dos usuários em termos de desempenho, confiabilidade e usabilidade.&lt;/p&gt;

&lt;p&gt;Este caminho de desenvolvimento não apenas melhora a acessibilidade e a experiência do usuário, mas também simplifica o processo de distribuição e manutenção da aplicação em diferentes plataformas e dispositivos.&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>pwa</category>
      <category>mobile</category>
      <category>frontend</category>
    </item>
    <item>
      <title>Reduzindo o tempo da pipeline em x3 vezes</title>
      <dc:creator>Gabriel Teodoro</dc:creator>
      <pubDate>Tue, 18 Jun 2024 17:56:29 +0000</pubDate>
      <link>https://dev.to/tino-tech/reduzindo-o-tempo-da-pipeline-em-x3-vezes-1pd8</link>
      <guid>https://dev.to/tino-tech/reduzindo-o-tempo-da-pipeline-em-x3-vezes-1pd8</guid>
      <description>&lt;p&gt;Nesse texto, tenho como objetivo compartilhar a nossa estratégia para diminuir o tempo que nossa pipeline de CI/CD demorava para ser executada, essa estratégia pode ser aplicada independente do framework ou biblioteca.&lt;/p&gt;

&lt;p&gt;Esse artigo usará um projeto de front-end que demorava 15 minutos para ter sua pipeline concluída. Iremos considerar a pipeline com: Autenticação no NPM, Instalação de bibliotecas, Lint de arquivos e tipagem, Build, Deploy, Testes (E2E, Unitários e Integrados).&lt;/p&gt;

&lt;h2&gt;
  
  
  O que você encontrará nesse artigo?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Importância de reduzirmos o tempo de nossas pipelines&lt;/li&gt;
&lt;li&gt;Estratégia para redução de tempo de execução&lt;/li&gt;
&lt;li&gt;Referências a documentação de ferramentas que estamos utilizando&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Antes de começar
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;O projeto front-end que vamos usar roda com React e Webpack inicialmente&lt;/li&gt;
&lt;li&gt;Essa estratégia não é uma bala de prata, só aplicamos ela depois de 3 anos no nosso monolito front-end, evite fazer otimizações prematuras em seu projeto&lt;/li&gt;
&lt;li&gt;Pode ser aplicado para projetos de diferentes contextos, porém é necessário analisar se a etapa de build faz sentido ser modificada&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Por que eu preciso me preocupar com o tempo da pipeline?
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Impacto na entrega de valor&lt;/strong&gt; - Uma pipeline demorada afeta de maneira significativa a entrega de valor para o usuário, causando falta de eficiência em disponibilizar recursos ou correções para o usuário.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Escalabilidade&lt;/strong&gt; - Quanto mais o projeto cresce, mais a sua pipeline vai demorar para ser concluída. Em algum momento será mais custoso esperar a pipeline ser concluída do que desenvolver a solução.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Colaboração&lt;/strong&gt; - Em um time com muitos engenheiros, uma pipeline demorada vai causar um grande gargalo de entregas. Onde um engenheiro irá fazer o merge de uma Pull Request e os outros precisaram rodar a pipeline novamente por conta da mudança. Com a pipeline demorada, isso vai gerar um grande gargalo e vai ficar quase que impossível de se entregar novas soluções.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Otimização de custos&lt;/strong&gt; - A maioria das ferramentas cobram por tempo de execução da pipeline, quanto mais a sua pipeline demorar maior será o custo final.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Encontrando os gargalos dentro da nossa pipeline
&lt;/h2&gt;

&lt;p&gt;Com a imagem abaixo, podemos analisar o tempo que cada etapa leva para completar a execução de nossa pipeline.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs4elxeph8dcstffe52in.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs4elxeph8dcstffe52in.png" alt="Image description" width="374" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Paralelizando nossa pipeline
&lt;/h2&gt;

&lt;p&gt;Nesse projeto estamos usando o Cloud Build da GCP, com isso não conseguimos ter etapas paralelas dentro de um único trigger. Para isso vamos criar dois novos triggers, um para os testes unitários e outro para os testes integrados, dessa forma eles vão rodar de forma paralela e já irá causar uma redução considerável em nossa pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  Reduzindo o tempo de 15 minutos para 7 minutos.
&lt;/h3&gt;

&lt;p&gt;É importante notar que não vamos conseguir paralelizar os testes E2E, por que eles dependem da etapa de deploy, que depende da etapa de build.&lt;/p&gt;

&lt;h2&gt;
  
  
  Aprimorando os resultados
&lt;/h2&gt;

&lt;p&gt;Uma forma de aprimorarmos o nosso resultado é melhorando o tempo de build, nesse projeto estávamos usando React com Webpack, com isso o tempo de build levava 3 minutos. Para solucionarmos isso, analisamos algumas ferramentas do mercado e optamos por usar o Vite. Você pode encontrar mais informações sobre o &lt;a href="https://medium.com/r/?url=https%3A%2F%2Fvitejs.dev%2Fguide%2Fwhy.html" rel="noopener noreferrer"&gt;Vite aqui&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Aplicando o Vite em nosso projeto, conseguimos obter esse resultado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1st2bbs8gazxtrdefnv6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1st2bbs8gazxtrdefnv6.png" alt="Image description" width="742" height="240"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Referências
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://cloud.google.com/build?hl=en" rel="noopener noreferrer"&gt;https://cloud.google.com/build?hl=en&lt;/a&gt;&lt;br&gt;
&lt;a href="https://vitejs.dev/guide/why.html" rel="noopener noreferrer"&gt;https://vitejs.dev/guide/why.html&lt;/a&gt;&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>cicd</category>
      <category>webpack</category>
      <category>vite</category>
    </item>
  </channel>
</rss>
