Dicas para inclusão e acessibilidade para pessoas com deficiência visual

Capa do artigo acessibilidade para deficientes visuais, com a palavra accessibility e fundo azul.

Bora conversar um pouco sobre acessibilidade para pessoas com deficiência visual? Um tema muito presente na sociedade e, principalmente, no mercado de trabalho. Porém, infelizmente, ainda há muito o que se fazer e ajustar para tornar a realidade inclusiva para as pessoas com deficiência visual. Por isso, neste artigo abordarei boas práticas de como trabalhar com uma pessoa cega em um time, com o objetivo de promover a inclusão plena e que seja uma experiência positiva tanto para a equipe quanto para a pessoa com deficiência. Então temos alguns tópicos fundamentais para esse mundo que se desdobra, por exemplo: capacitismo, audiodescrição, descrição de imagens, ferramentas acessíveis e outros aspectos. Capacitismo O termo capacitismo é relativamente novo e usado quando, em razão de uma deficiência, se inferioriza ou exclui uma pessoa em relação às demais. Surgiu nos Estados Unidos, em 1980, na época que iniciou-se os movimentos de busca por direitos para as pessoas com deficiência. Já no Brasil, essa definição começou a se popularizar na última década, visando combater atos preconceituosos e, principalmente, a exclusão. Assim, devemos ter um certo cuidado, já que o capacitismo pode ocorrer de diversas formas, não se limitando em ações expressivas, como negando o direito de ir e vir, mas também se encontra na forma de expressões ou atitudes veladas que, no fim, significam a mesma coisa.  O ponto aqui é: ao colocar alguém num patamar abaixo e/ou acima por causa de alguma deficiência, você está sendo capacitista. Por isso, seguem algumas falas comuns que precisam ser extintas: Com isso, é preciso tomar cuidado e pensar nas frases que são ditas independentemente se tem uma pessoa com deficiência na equipe. Pois, para construir um ambiente inclusivo se faz necessário primeiro se desconstruir e isso pode começar com o tipo de coisas que você costuma dizer, principalmente se tiver uma pessoa com deficiência no ambiente. Autodescrição Antes de comentar sobre esse tema específico, vale entender a diferença de audiodescrição e autodescrição: Devo dizer que participei de reuniões em que as pessoas faziam suas autodescrições e ficavam CINCO minutos se descrevendo. De longe é uma boa prática, mas, no fim, a pessoa cega se perde no meio de tantas informações.  Por isso, aqui é necessário empregar o bom senso e, acima de tudo, a objetividade. Já que durante uma apresentação de meia hora, por exemplo, gastar a maior parte se descrevendo irá prejudicar a reunião e não vai ajudar na acessibilidade para pessoas com deficiência visual. Dito isso, separei algumas dicas para uma autodescrição assertiva: Vale ressaltar nesse último ponto, a questão de se sentir confortável em se autodescrever. Talvez algumas pessoas não se sintam confortáveis em dizer a cor dos cabelos, dos olhos ou outro detalhe. Então fale aquilo que você julga relevante e, principalmente, o que te deixa à vontade. Descrição de imagens Eu, como cego, sei o quão significativo é saber sobre o que se trata um determinado gráfico. A descrição de uma imagem não é simplesmente sair despejando todas as informações visuais, pois detalhes em excesso não são uma boa prática, assim como na autodescrição.  Imagine uma fotografia de uma praia, na qual tem diversas pessoas, algumas estão no mar, outras sentadas debaixo de guarda-sóis e ainda tem aquelas que estão caminhando. Perceba que se fosse descrever cada elemento, poderia ficar minutos falando e isso não seria positivo para a pessoa com deficiência. Então qual seria a tal boa prática de uma descrição de imagem? Como tudo na vida, o equilíbrio aqui é o ideal a se empregar:  Por exemplo, assumindo o exemplo anterior do cenário da praia, é importante informar a quantidade de pessoas, a cor das suas vestes ou, inclusive, se estão no mar ou na areia? Tudo vai depender da sua intenção na hora da apresentação. Em linhas gerais, descreva as imagens com o objetivo de incluir e possibilitar que a pessoa destinatária saiba do que se trata a figura, seja numa reunião profissional ou em outro ambiente. Infelizmente, os leitores de tela ainda não têm a capacidade de conseguir construir uma descrição precisa ou descobrir quais são os elementos relevantes. Aqui vale ressaltar que essas dicas, autodescrição e descrição de imagem, também podem ser aplicadas no ambiente presencial. Plataformas corporativas de comunicação Quando eu entrei numa equipe, uma das perguntas que me chamou a atenção foi se o meu leitor de telas lia as mensagens em texto. E, mais de uma vez, fui questionado se preferia uma chamada de vídeo ou se poderiam me enviar mensagem. Pois a grande dúvida é: o leitor consegue ler mensagens em texto nas plataformas de comunicação corporativas? Atualmente, na Zup e no Itaú, as duas plataformas corporativas de comunicação mais utilizadas são o Microsoft Teams e os serviços da Google. A boa notícia é que o leitor de tela é acessível, permitindo a pessoa cega interagir com seus colegas de trabalho sem barreiras significativas. Por exemplo, numa chamada de vídeo do Google Meet ou do Teams, existem alguns atalhos de teclado que facilitam o uso. Além disso, o leitor consegue fazer a leitura do chat em texto e, sim, tanto no Google Meet como no Teams é possível realizar a leitura das mensagens, incluindo emojis, reações e até mesmo a agenda. Contudo, caso envie uma foto, é preciso que faça a descrição, conforme dito nos tópicos anteriores. Enfim, algumas ações precisamos fazer vários atalhos e, do ponto de vista da usabilidade, não é tão agradável.  De qualquer forma, o importante é que conseguimos ter acesso às principais funcionalidades das plataformas. Por isso, não se preocupe em enviar mensagens de texto para pessoas cegas, pois elas têm acesso sem problemas nenhum. Ferramentas de acessibilidade para deficientes visuais As pessoas com deficiência visual, seja total ou não, precisam utilizar recursos visando o acesso ao computador e/ou smartphone. Cada sistema operacional possui diferentes ferramentas de acessibilidade e, por isso, é importante saber sobre os leitores de tela e como funcionam.  Até por uma questão de como auxiliar colegas de trabalho, porque, como utilizamos softwares leitores

Automatizando seu código com Git Hooks: fique por dentro

Capa do artigo de uma foto de uma mulher em frente a dois computadores com códigos em tela, com uma mão ela escreve no teclado e com a outra segura um celular.

Você vai sair desse artigo automatizando seu código com Git Hooks, além de saber o que é e para que serve esse componente do Git. Vamos nessa? Primeiro, a plataforma do Git, amplamente utilizada por pessoas desenvolvedoras, é um ecossistema que permite o gerenciamento de projetos de forma simples e eficaz. Por meio dessa plataforma, é possível compartilhar e colaborar de maneira direta e fácil, tanto com código quanto com documentação. No artigo de hoje, vamos falar sobre como é possível automatizar o gerenciamento do código por meio do uso de Git Hooks, um componente presente no Git que auxilia na modificação de processos como push, commit, pull e outros comandos. O projeto final pode ser encontrado no repositório presente no meu GitHub. Análise de código O Detekt é uma biblioteca que analisa o código na linguagem Kotlin. É possível verificar a indentação de código, identificar métodos longos, implementações incorretas, entre outras personalizações possíveis.  Como exemplo, será utilizada essa biblioteca para realizarmos a verificação do código automaticamente toda vez que algo for commitado, por meio da utilização do Git Hooks. Implementando Detekt Abra o projeto no Android Studio e acesse o arquivo build.gradle em nível de projeto. Em seguida, importe a biblioteca para as dependências: Clique aqui para acessar a documentação oficial do Detekt com as versões disponíveis.  O que é Git Hooks? O Git Hooks permite que regras sejam definidas em qualquer processo de versionamento de código, como commit, push e pull.  É possível automatizar a maioria das tarefas dentro do fluxo do Git Hooks. Nós podemos configurar para executar testes unitários ou verificar bibliotecas, por exemplo. Nesse contexto, como o Detekt é uma biblioteca de análise de código, vamos executar no pre commit, ou seja, quando qualquer pessoa desenvolvedora fizer o comando git commit irá executar o Detekt. Client-Side vs Server-Side É importante entender a diferença desses dois lados, pois interfere em quais fluxos de trabalho vai fazer sentido ser alterado por você. Processos que são executados no Client-Side, mesmo que seja modificado, se por acaso alguma outra pessoa desenvolvedora clonar o projeto, não são copiados.  Por outro lado, processos chamados no Server-Side, caso alterados, são impostos no projeto todo, sendo copiado quando outra pessoa clonar o repositório. Fluxos de trabalho do Git Automatizando seu código com Git Hooks Será necessário acessar o seu projeto através de um terminal de comando, aqui irei utilizar o git bash. Para acessar uma pasta, use o seguinte comando: Iremos navegar até o arquivo hooks presente no nosso projeto: Resta agora criar o arquivo pre-commit: Feito isso, colocamos o trecho de código dentro da pasta pre-commit: Por último, ativamos a nossa pasta, utilizando o comando: Prontinho, agora o Git irá executar o Detekt e exibir um erro caso não passe nos parâmetros de aceite. Um exemplo do que será exibido: Conclusão O exemplo acima mostra a utilização da biblioteca Detekt, mas a imaginação é o limite! Você pode automatizar qualquer outra tarefa do projeto, aprimorando o seu projeto. O uso do Git Hooks somado aos frameworks de CI/CD permite que você tenha controle de qualidade do seu código de uma forma muito simples e concreta, diminuindo as chances de erros na produção. Inclusive, todo código-fonte estará no repositório presente no meu GitHub. Caso queira aprofundar seus conhecimentos sobre automação de processos no seu código, indico os seguintes artigos: Tem alguma dúvida sobre como automatizar seu código utilizando o Git Hooks? Deixe nos comentários ou fique à vontade para me mandar mensagem! Referências

AWS Lambda SnapStart para funções Java

Capa do artigo em foto com duas pessoas escrevendo códigos em frente a dois notebooks.

Antes de falar sobre AWS Lambda SnapStart, vale recapitular que a explosão de serviços na nuvem nas últimas décadas nos levou a uma era repleta de tecnologias e facilidades anteriormente inimagináveis. Hoje, podemos desenvolver e disponibilizar aplicações sem nos preocuparmos com infraestrutura física.  Através de um único clique, é possível contratar serviços virtuais, alugar servidores e bancos de dados, além de escalar nossos recursos automaticamente e armazenar arquivos com capacidade praticamente ilimitada. Essa mudança também nos permite deixar de lado as preocupações com servidores e focar exclusivamente na lógica de negócio, graças a plataformas de computação sem servidor, como o AWS Lambda da Amazon Web Services (AWS), que será o foco deste artigo. AWS Lambda e seu potencial Desde o seu lançamento em 2014, inicialmente suportando apenas Python e Node.js, o AWS Lambda tem entusiasmado a comunidade e conquistado seu espaço. Ao longo do tempo, o serviço evoluiu consideravelmente, expandindo sua capacidade de execução e integração com outros serviços, além de obter melhorias significativas em desempenho e escalabilidade.  Atualmente, a Lambda suporta várias linguagens de programação. No entanto, ainda não existe um consenso sobre o uso do Java para projetos nesta plataforma. Evolução da Lambda de 2014 a 2023. Indicamos também que você confira o vídeo “Arquitetura Serverless: AWS Lambda” para acompanhar mais  sobre o tema. Assista! Explorando a integração entre Java e AWS Lambda O suporte ao Java foi adicionado ao AWS Lambda em 2016, mas é comum encontrar opiniões de que o Java, quando utilizado com a Lambda, apresenta um desempenho inferior em comparação com outras linguagens.  Essa opinião é baseada no tempo de inicialização da Máquina Virtual Java (JVM), que resulta em um tempo de inicialização maior da Lambda. Como esse não é um servidor que fica constantemente ligado, essa inicialização afeta diretamente a disponibilidade da aplicação. Esse cenário se torna mais desafiador quando frameworks como o Spring são utilizados, pois aumentam ainda mais o tempo de carregamento da aplicação. No entanto, é importante não considerar essa opinião como uma verdade absoluta, pois o serviço continua evoluindo e atualmente apresenta soluções inovadoras para esse problema. Prepare-se para explorar o conceito revolucionário do SnapStart e descobrir como ele supera a grande desvantagem do Java em relação a outras linguagens de programação.  Será que esse avanço tecnológico finalmente põe fim a esse dilema e oferece às pessoas desenvolvedoras uma nova e empolgante opção para enriquecer seu amplo portfólio de tecnologias? Acompanhe a gente nesta jornada para descobrir e desvendar os segredos do AWS Lambda SnapStart. Boa leitura! Compreendendo o conceito do AWS Lambda SnapStart Como o AWS Lambda SnapStart funciona em detalhes No final de 2022, o AWS Lambda SnapStart foi anunciado pela AWS como uma otimização para funções Java. Segundo a empresa, essa otimização oferece um desempenho de inicialização até dez vezes mais rápido, sem nenhum custo adicional. Apesar dos benefícios significativos, a utilização do SnapStart é bastante simples, exigindo apenas a ativação de uma opção de configuração adicional na função Lambda. Vamos agora explorar os detalhes de como o AWS Lambda SnapStart funciona. Para isso, é importante compreender o ciclo de vida de uma função Lambda: Ciclo de vida da função Lambda comum. Quando uma função é acionada, ela passa por três fases: inicialização, invocação e desligamento. No caso do Java, a fase de inicialização é onde surge um desafio, pois a JVM precisa ser iniciada e, em seguida, carregar a aplicação.  Se um framework como o Spring é utilizado no projeto, o tempo de inicialização é ainda maior devido ao tempo necessário para inicializar o framework. Essa situação não é ideal para aplicações que exigem baixa latência. Agora, vamos examinar o que acontece quando uma função Lambda é otimizada com o SnapStart: Ciclo de vida de uma função Lambda com SnapStart. A fase de inicialização é substituída pela fase de restauração, enquanto o restante do ciclo de vida permanece o mesmo. Isso ocorre porque, quando uma função é publicada com o SnapStart ativado, a AWS realiza uma pré-inicialização da função e armazena em cache o estado de memória dessa aplicação já inicializada.  Dessa forma, quando a Lambda é acionada, a fase de inicialização não é necessária. Basta restaurar a memória armazenada em cache e, em seguida, invocar a função normalmente. Devido ao tempo de restauração ser significativamente menor do que o tempo de inicialização, essa otimização torna o Java novamente uma linguagem competitiva em termos de tempo de inicialização na Lambda, desmistificando seu uso para aplicações que exigem velocidade. Limitações e compatibilidade do AWS Lambda SnapStart Ao optar por ativar o recurso do AWS Lambda SnapStart, é importante estar ciente de algumas limitações específicas impostas pela AWS. Essas limitações incluem: Além disso, é necessário observar algumas considerações de compatibilidade: Essas limitações e considerações de compatibilidade devem ser levadas em conta ao decidir pela ativação do AWS Lambda SnapStart em seu projeto. Decidindo entre o uso do SnapStart ou Simultaneidade Provisionada Ao decidir entre o uso do SnapStart e a simultaneidade provisionada, é essencial considerar suas necessidades específicas. A simultaneidade provisionada já era uma opção de otimização para tratar o problema de inicialização da Lambda. Com essa abordagem, a Lambda é mantida sempre ativa para responder imediatamente às solicitações, mas há um custo adicional associado a isso.  Portanto, se sua aplicação exige uma latência ainda menor, abaixo de 100 milissegundos, e você tem disposição de arcar com os custos extras, a simultaneidade provisionada pode ser a melhor opção. No entanto, se seus requisitos suportam uma inicialização em torno de 500 milissegundos, o SnapStart é uma escolha mais adequada, pois não implica custo adicional. Agora que entendemos o conceito do AWS Lambda SnapStart e suas limitações, vamos prosseguir para um exemplo prático para demonstrar seu funcionamento. Exemplo prático Implementando um projeto Java Para ilustrar o uso do AWS Lambda SnapStart com Java, vamos criar uma função Lambda utilizando o framework Spring Boot 3 e o Maven como gerenciador de dependências. Começaremos configurando o arquivo pom.xml. Adicione as seguintes configurações: Essas dependências são essenciais para trabalhar com o

Framework NestJS: conquiste seu futuro como dev

Imagem capa do conteúdo sobre Framework NestJS com a foto de uma mulher de cabelos trançados de costas de frente para um computador com códigos.

Sabe aquele momento em que você está procurando o framework perfeito para seu projeto e começa a sentir como se estivesse em uma montanha-russa de emoções? Bem, prepare-se para desembarcar na estação do framework NestJS!  Este framework para Node.js tem tudo o que você precisa para criar aplicativos incríveis com facilidade. Então, pegue uma xícara de café, ajuste seu assento e segure-se, pois vamos mergulhar de cabeça no mundo do NestJS neste artigo! O que é Node.js? Node.js é uma plataforma de desenvolvimento de software baseada em JavaScript, o que significa que você pode escrever o código em JavaScript em ambos os lados da pilha (back end e front end). Ele é construído sobre o motor JavaScript V8 do Google Chrome e usa o sistema de eventos para criar aplicativos altamente escaláveis e performáticos. Mas o que faz o Node.js ser tão incrível é o seu ecossistema de framework. Como o Express, Koa e Nest, que fornecem estrutura e recursos para facilitar o desenvolvimento de aplicativos, tornando-os mais rápidos e eficientes. Além disso, você tem acesso a milhares de pacotes, como o MongoDB, que tornam a integração com outras tecnologias ainda mais fácil – por exemplo, MongoDB é um banco de dados NoSQL popular e altamente flexível, que permite armazenar dados de forma não estruturada ou semiestruturada. Framework NestJS e MongoDB Com o NestJS, você pode facilmente configurar a conexão com o MongoDB e criar modelos de dados usando a biblioteca Mongoose, que fornece uma camada de abstração sobre o MongoDB, facilitando a criação, validação e manipulação dos dados. Ao utilizar o NestJS com o MongoDB, você pode definir esquemas para seus modelos de dados, especificando os campos, tipos de dados, validações e até mesmo os relacionamentos entre eles. Isso garante consistência e integridade nos dados armazenados. Além disso, o NestJS também oferece recursos poderosos para manipulação dos dados, como consultas avançadas, filtros, ordenação e paginação. Com a combinação do MongoDB e do NestJS, você pode facilmente executar operações de CRUD (criar, ler, atualizar e deletar), realizar buscas complexas e até mesmo executar agregações de dados. Outra vantagem do uso do MongoDB com o NestJS é a escalabilidade horizontal. O MongoDB é projetado para lidar com grandes volumes de dados e alta demanda de leitura e gravação. Com a capacidade de expansão horizontal do MongoDB, você pode adicionar novos nós de banco de dados conforme sua aplicação cresce, garantindo um desempenho consistente. Em resumo, o NestJS simplifica e agiliza a criação e manipulação de persistência de dados com o MongoDB. E o que são frameworks? Um framework é basicamente um conjunto de regras e ferramentas preestabelecidas que ajudam você a desenvolver aplicações de maneira mais rápida e eficiente. É como se fosse uma estrutura já montada para você construir a sua casa (ou aplicação, neste caso). Imagine que você quer construir uma casa do zero, você precisa planejar tudo, comprar materiais, contratar uma equipe, entre outras coisas. Mas, se você escolher um kit de construção de casa, já vem com tudo pronto, desde as paredes até as portas, tudo preparado para você montar. É assim que funciona um framework, ele te fornece todas as peças que você precisa para construir a sua aplicação, assim você pode se concentrar apenas no que realmente importa: a sua aplicação em si!  Além disso, os frameworks costumam ser constantemente atualizados e melhorados, então você sempre tem acesso às melhores práticas e tecnologias do mercado. Resumindo: frameworks são como empreiteiras para a construção da sua aplicação! Por que aprender sobre o Framework NestJS? É um framework de desenvolvimento de aplicativos Node.js altamente avaliado e poderoso. Mas por que você deveria aprender NestJS?  Primeiro, ele é baseado em TypeScript, o que significa que você terá uma programação mais tipada e organizada. Além disso, ele permite que você construa aplicativos escaláveis e de alta performance, sem sacrificar a facilidade de uso e a produtividade. E o melhor de tudo, é altamente modular, o que significa que você pode facilmente adicionar ou remover recursos conforme necessário. Em suma, se você quer construir aplicativos Node.js de alta qualidade e escaláveis, sem sacrificar a produtividade e a facilidade de uso, então aprender NestJS é uma escolha incrivelmente saborosa. E o que é esse “Typescript”? TypeScript é uma linguagem de programação de tipagem estática que é baseada em JavaScript e adiciona recursos avançados, como tipos de dados, interfaces, classes e outros, ao JavaScript.  Ele é compilado para JavaScript puro e pode ser executado em qualquer lugar onde o JavaScript é suportado, o que o torna compatível com uma ampla gama de plataformas e tecnologias.  Além disso, o TypeScript é altamente legível, o que o torna muito fácil de entender e aprimorar para equipes de desenvolvimento. Em resumo, o TypeScript é como o JavaScript, só que com superpoderes! Dito isso, como posso começar com Framework NestJS? Familiarize-se com o TypeScript Antes de começar a trabalhar com o NestJS, é importante ter uma boa compreensão do TypeScript. O NestJS é construído com TypeScript, por isso é fundamental conhecer as noções básicas. Crie um projeto de exemplo Uma boa maneira de começar é criar um projeto de exemplo. Isso permitirá que você entenda como o NestJS funciona e como é estruturado. Além disso, você poderá brincar com o código e fazer modificações para entender melhor. Explore a documentação A documentação oficial do NestJS é uma ótima fonte de informação. Ela inclui exemplos práticos, explicações detalhadas sobre como funciona o framework e respostas para as perguntas mais comuns. Participe da comunidade A comunidade de devs que usam o NestJS é muito ativa e sempre disposta a ajudar. Você pode participar de fóruns, grupos no Facebook ou no Telegram, além de encontrar muitos tutoriais e exemplos on-line. Mantenha-se atualizado O NestJS é uma tecnologia em constante evolução, por isso é importante acompanhar as últimas notícias e lançamentos. Assine newsletters, siga devs no Twitter e fique de olho nas atualizações. Passos para instalar e começar  Além disso tudo, se realmente você está procurando começar com o

XcodeGen: garantindo a escalabilidade de times iOS

Imagem onde aparece a mão de uma pessoa branca segurando um celular com códigos na tela.

Vamos te apresentar exemplos práticos de XcodeGen, que vão tornar a implementação muito mais fácil em seus projetos, gerando escalabilidade nos times que trabalham com desenvolvimento de iOS. O que é XcodeGen? Se você é uma pessoa desenvolvedora iOS, já deve ter passado pela experiência de resolver conflitos por conta de alterações no xcodeproj, porque quando um arquivo é adicionado ou mesmo uma config é modificada no projeto gera alterações no xcodeproj. Ter muitas pessoas trabalhando em um mesmo projeto pode gerar uma quantidade insana de conflitos, tornando difícil gerenciar na hora de mergear um PR. Por conta disso, foi criada uma command line tool chamada XcodeGen, que gera o xcodeproj a partir da sua estrutura de pastas e um arquivo chamado project.yaml. Entendendo o que o XcodeGen faz por debaixo dos panos Quando o Xcode vai gerar um binário ou mesmo um .framework, ele busca informações que estão contidas nas camadas: target, target.xconfig, project, project.xcconfig e SDK defaults. Então, utilizar o xcodeproj gerado pelo Xcode faz com que cada arquivo adicionado no projeto gere alterações nos mesmos e alguns outros são criados e modificados dependendo das configurações que são feitas via Xcode. Conhecendo isso, o XcodeGen faz com que essas configurações que estão no seu  project.yaml e nos diretórios do projeto, sejam convertidas em um .xcodeproj. Uma vez explicado a motivação e a sua resolução na teoria, podemos partir para a prática. Assim, vamos instalar e configurar o XcodeGen garantindo uma maior escalabilidade do seu time quando o assunto for desenvolvimento de iOS. Como utilizar o XcodeGen em suas aplicações  Primeira coisa que você precisa fazer é instalar o XcodeGen na sua máquina, pra isso execute o seguinte comando no terminal do Mac: Depois de instalado, vá na raiz do seu projeto e crie o arquivo project.yaml. Caso você não tenha uma aplicação já rodando, crie uma aplicação no Xcode e depois execute o comando abaixo: Parabéns, agora que conseguimos instalar, vamos colocá-lo em ação. Para isso, faremos um projeto simples com testes. Um exemplo simples de aplicação usando o XcodeGen O XcodeGen ajuda a nossa vida em diversos aspectos e a boa notícia é que podemos simplificar ainda mais! Com um arquivo que já tem os comandos que serão executados nele, o arquivo funcionará como um menu de opções para o XcodeGen. Caso seu projeto tenha testes:  PS: só adicione essa linha postGenCommand: pod install , caso seu projeto tenha PodFile. Pronto! Depois de fazer isso, remova seu xcodeproj, e rode o seguinte comando: E você verá no terminal: $ xcodegen ⚙️  Generating plists… ⚙️  Generating project… ⚙️  Writing project… Created project at -/projects/test/test.xcodeproj Isso vai criar um novo xcodeproj no seu diretório atual. Caso, o xcodeproj já tenha sido commitado em seu git, execute: E agora adicione-o no gitignore: Agora só executar o seu projeto no Xcode e ser feliz! Simplificando as configurações do XcodeGen com makefile Agora como que faço para executar comandos na pipeline que exigem o xcodeproj, se ele não se encontra mais no git? Ou mesmo como facilitar esse processo para pessoas da minha equipe que ainda não conhecem o XcodeGen? Calma, é bem simples. Vamos primeiro criar um arquivo makefile: E adicione nele as instruções abaixo: PS: se você tiver usando outras dependências no seu projeto que precisam ser instaladas pelo brew adicione-las na seção de setup. Quando você executar make na raiz, ele vai te mostrar todas as opções. Execute make setup e depois make generate_open isso vai fazer com que você abra o projeto depois de gerado. Adicionalmente, esse comando vai te pedir um GemFile, onde você pode instalar o fastlane, cocoapods e outras dependências que o seu projeto precise, como: Para continuar estudando sobre desenvolvimento iOS, temos a live “iOS: Escalando apps e equipes de desenvolvimento” para você assistir: Conclusão Como acompanhamos até aqui, utilizar o xcodeproj, que é gerado pelo próprio Xcode, é muito complicado quando se trabalha em uma equipe com muitas pessoas, gerando trabalho na hora do merge.  O XcodeGen vem pra te auxiliar nisso e deixar os merges mais amigáveis e com menos chances de erro. Uma ótima pedida para equipes mais eficientes! Gostou do artigo? Deixe seu comentário abaixo e continue acompanhando nossos conteúdos pela nossa central. Referências

Tudo sobre teste flaky: o que é, como ocorre e mais

Foto de um homem branco, calvo, de moletom e usando headphones, ele está sentado em frente a uma mesa de escritório. Em cima da mesa, está um notebook e um copo, o homem está olhando para o lado, onde estão algumas telas com códigos de programação.

Vamos começar este artigo com as dúvidas que aparecem sobre o teste flaky:  o que é? Como acontece? Como evitar? Como lidar com ele? Para saber o que fazer quando se deparar com esses testes, preparamos um conteúdo completo sobre o tema. Mas o que é um teste flaky? Diz-se que um teste é flaky quando passa ou falha de maneira não deterministicamente (quer dizer, aleatória), na mesma configuração e mesmo ambiente de execução, como código, sistema operacional, etc.   Por exemplo, você roda um teste uma, duas, três, dez vezes e ele passa, mas na décima primeira, ele falha, sem que qualquer outra modificação no teste ou no ambiente tenha sido feita, gerando um comportamento não determinístico.  Um teste pode falhar de forma não determinística, porque tenta acessar um servidor local antes que o servidor esteja pronto para aceitar solicitações. Testes flakies podem afetar negativamente o processo de desenvolvimento de software em, pelo menos, duas formas importantes:  Na Microsoft, a presença de testes em falhas impõe um ônus importante para pessoas desenvolvedoras. Por exemplo, equipes de pesquisa da empresa relataram que 58 devs da Microsoft consideraram os testes flakies como a segunda razão mais importante, entre 10 razões, para atrasar a implantação de software.  No GitHub, foi observado que “1 em 11 commits teve pelo menos um build quebrado causada por um teste flaky“. No Google, diversas falhas de testes são devidos ao seu comportamento flaky. Outras organizações compartilham problemas semelhantes. Por que um teste flaky ocorre? Em um estudo feito em 2014, Qingzhou Luo, engenheiro de software do Google, e colegas propuseram uma taxonomia para as causas (e eventuais resoluções) de testes flakies em projetos Java.  De acordo com o trabalho, as cinco causas comuns que levam a testes flakies são:  Como mitigar os testes flakies? Existem três principais estratégias para lidar com testes flakies:  Agora vamos ver em detalhes cada uma dessas estratégias: 1. Prevenção  A prevenção consiste em regular o desenvolvimento de software de forma que evite testes flakies por design. Por exemplo, no Google, pessoas desenvolvedoras são encorajadas a escrever testes single-threaded para evitar testes flakies.  A prevenção é uma atividade desafiadora, em particular, porque devs precisam se policiar para escrever testes além do teste de unidade. 2. Detecção  A detecção consiste em analisar a suíte de testes antes que esta seja executada durante o processo de teste de regressão. Essa estratégia tem sido pesquisada intensivamente nos últimos anos.  No entanto, as abordagens de detecção ainda são bem limitadas. Por exemplo, detectores de testes flakies que funcionam de maneira estática ou dinâmica estão limitados em escopo.  3. Reexecução A reexecução consiste em executar novamente a suíte de testes múltiplas vezes, a fim de identificar comportamentos divergentes entre as execuções.  Embora a reexecução seja uma estratégia popular na indústria de software, essa abordagem é cara e contraprodutiva. Reexecutar os testes consomem não somente recursos computacionais, mas também o tempo das pessoas desenvolvedoras.  No Google, é estimado que atividades de reexecução para fins de detecção de testes flakies consumam cerca de 2 a 16% do orçamento dedicado para atividades de teste. Como lidar com testes flakies? Sabendo que testes flakies são um problema recorrente na indústria de software e que as abordagens existentes para detecção e remoção destes testes ainda são limitadas, pessoas desenvolvedoras precisam implementar estratégias para que a confiança e a cultura de testes não sejam impactadas pela dificuldade em lidar com esses testes.  A seguir, apresentamos algumas estratégias utilizadas para aumentar a conscientização da existência de testes flakies. Odeneye Odeneye é um produto criado internamente pelo Spotify, que tem como objetivo visualizar a evolução das execuções das suítes de testes, de forma a apontar eventuais falhas por testes flakies. O Odeneye fornece a seguinte visualização: Na figura, cada quadrado verde representa um teste executado com sucesso, enquanto que uma bola laranja pode indicar a existência de um teste flaky. Uma sequência de bolas laranjas fortalece a existência de testes flakies. Flakybot O Flakybot é outro produto criado internamente pelo Spotify. Este bot ajuda pessoas desenvolvedoras a garantir que um teste flaky não será incorporado na base de código durante o processo de revisão.  Para isso, devs podem chamar o bot e passar parâmetros para execução dos testes. Após essa ação, o bot retorna a saída do teste, o que ajuda a pessoa revisora do código a decidir se o teste deve (ou não) ser incorporado na base. Assuma propriedade No GitHub, a saída encontrada foi atribuir a propriedade de resolver o teste flaky para a pessoa que o introduziu. Nesse caso, minera-se os logs do git até encontrar o primeiro commit introduzindo o teste flaky e adiciona-se um ticket para a pessoa que foi responsável por aquele teste, para que corrija o comportamento. Conclusão O teste flaky é um teste que apresenta comportamentos não determinísticos. Embora algumas causas de sua manifestação já tenham sido catalogadas, na prática, ainda é difícil detectar a presença desse problema em uma suíte de testes. Neste artigo, apresentamos algumas formas de evitar e lidar com os testes flakies, de forma que otimize recursos e o tempo de trabalho de pessoas desenvolvedoras.  Caso você já tenha observado esse comportamento na sua empresa ou projeto, comente abaixo: como você lidou com ele? ?

Hackeando a Entrevista Técnica: como performar bem nesse tipo de avaliação?

Capa do artigo sobre entrevista técnica. Na imagem, aparece uma figura masculina de cor branca de camisa branca e gravata segurando um currículo. Em frente dele, está outra pessoa branca de mãos cruzadas.

Reunimos as maiores dicas para você mandar bem em uma entrevista técnica da Zup, que também servem como boas orientações para qualquer avaliação como essa. Na entrevista técnica, vamos conversar sobre suas hard skills, repertório, capacidade de resolver problemas e, muito importante, a forma como você planeja e organiza uma tarefa. Venha conferir mais detalhes! O que valorizamos em toda pessoa candidata? O nosso processo seletivo é pautado nos nossos pilares de cultura, assim pessoas que podem se tornar zuppers já ficam por dentro da forma com que trabalhamos, o que consideramos importante e quais os desafios que podem enfrentar na Zup. Confira o que a gente vai acompanhar com muita atenção durante a entrevista: Processo Seletivo da Zup Nós já temos um artigo completo sobre o nosso processo seletivo da Zup. Por isso, aqui vamos focar na entrevista técnica e relembrar algumas outras etapas que você vai conversar com nossos times. Vamos lá: Avaliação de Fit Cultural Nesse momento, vamos avaliar se a pessoa candidata e a Zup combinam. Queremos conhecer você: o que você pensa, suas motivações, experiências anteriores, valores e aprendizados. O foco da entrevista é especificamente o comportamento, valores e cultura, onde buscamos entender as experiências e cases anteriores, suas motivações, expectativas, modo de pensar e agir.  Ei, gostamos muito de perguntas! Essa é uma boa hora para você também aprender mais sobre a cultura da Zup, o escopo da vaga, o processo seletivo e outros temas que considere relevantes. Entrevista Técnica Esse é o nosso momento da sua avaliação de hard skills e resolução de problemas! Nessa etapa, queremos entender mais sobre seu domínio técnico, resolução de problemas e como você implementa essas soluções.  A etapa é composta por desafios que têm conexão com problemas reais que estamos tentando resolver e contempla um método de avaliação desenvolvido para a nossa realidade. Você vai entender mais – de forma prática – das técnicas e conhecimentos esperados para atuação no produto, conhecer pares e pessoas mais seniores, entendendo um pouco mais sobre os desafios técnicos que o time trabalha diariamente. O que torna nosso processo diferenciado do mercado: Muito além da solução técnica! Lembre-se: uma entrevista técnica vai muito além do código. A sua atitude também será avaliada e também conta sobre quem você é como profissional. Vale destacar: Vamos acompanhar seu comportamento, sua maturidade profissional, pontualidade, engajamento na entrevista técnica e senso de priorização. Aqui, a atitude certa é tão importante quanto a técnica! Entenda questões do dia a dia com profundidade; seja adaptável e flexível; explique seus pensamentos (nós adoramos isso!); considere cliente e negócio; e pense em quais são os prós e contras da solução proposta.  Evidencie também a cadência e domínio técnico ao solucionar o problema proposto; a qualidade da implementação; e, claro, o impacto e influência positiva da solução trazida, mostrando que você tem senso crítico e que no dia a dia fará o mesmo. Mas a solução técnica também importa! Claro que as suas habilidades técnicas também são imprescindíveis no processo seletivo, vamos observar atentamente: Vá além do enunciado do problema! Algumas informações podem não estar tão explícitas e não se acanhe em perguntar e praticar a escuta ativa para dicas e sugestões. Demonstre planejamento e priorização para resolver o problema certo: não saia escrevendo a solução de primeira – pense em outras alternativas. Sempre existe mais de uma maneira de resolver um problema! Conhece outras técnicas além da que está usando na resolução? Vale citar! Explique seu método e justifique por qual motivo o escolheu. Não se esqueça de mostrar como você está pensando, fale em voz alta mesmo! O importante é saber como você pensa e não, necessariamente, chegar na resposta correta.  Você procurou as melhores maneiras de solucionar problemas? Avaliou a complexidade de tempo e espaço possíveis para o problema em questão? Isso é muito importante no dia a dia da Zup. Fit com a liderança Essa é uma das etapas finais do processo, onde você vai conhecer sua possível liderança. É também o momento ideal para tirar as últimas dúvidas, trazer provocações sobre a vaga e perguntar sobre como vai ser o seu futuro no time. A palavra dessa etapa é alinhamento. Tenha estratégia Toda entrevista é uma oportunidade para mostrar quem você é, mas também  para conhecer mais a empresa, o time e o produto desenvolvido. Por isso, reunimos dicas que servem para qualquer etapa: Sabemos que esse é um momento que pode gerar ansiedade, mas não se preocupe, sabemos que seu potencial vai muito além dessa etapa e queremos conhecer quem você é. Tenha autenticidade Você deve ter percebido que não só respeitamos, mas queremos que você seja você no seu dia a dia como zupper, então tenha autenticidade e se exponha.  A transparência é um pilar importante, pergunte caso tenha dúvidas e não deixe sua insegurança te sabotar! Queremos que todas as pessoas se sintam acolhidas e que você tenha o que precisa para fazer o seu melhor! Precisa de alguma adaptação ou recurso no processo seletivo? Sinalize o time de recrutamento ou de experiência da pessoa candidata, nós cuidaremos disso! Um emprego impacta em toda nossa vida, por isso queremos conhecer quem você é e queremos que você nos conheça. Faça perguntas, anote, reflita e seja você. Na Zup, entendemos que a avaliação não deve ser engessada e muito menos baseada na comparação entre pessoas candidatas, e sim uma avaliação individual, do potencial que cada pessoa pode oferecer e das necessidades da vaga. Quer mais dicas de como mandar bem em uma entrevista técnica? Então assista a essa live que levamos no TDC Business SP 2022: Vem pra Zup Quer participar do nosso processo seletivo? Então, inscreva-se nas nossas vagas abertas, estamos aguardando você.  Não custa repetir: queremos te conhecer, seja você e vai que dá, confia! Esse espírito é o que move a Zup e zuppers, se você compartilha desse pensamento, o seu lugar é aqui! *Artigo produzido por João Batista e Juliana Alves com colaboração de Marina Resende e Ramon

Um pouco de Docker na prática

Capa do artigo sobre docker na prática. Na imagem, um jovem programador do sexo masculino escrevendo um código de programa sentado no local de trabalho com três monitores no escritório.

Muitas pessoas desenvolvedoras usam Docker na prática para subir bancos de dados locais ou usar dados sem instalar e configurar muitas ferramentas, principalmente para facilitar a execução dos testes unitários e/ou integrados da implementação de forma automatizada. No artigo de hoje, vamos detalhar como usar imagens do Docker para personalizar um banco de dados MySQL em conjunto com uma API Rest em Python. O projeto final criado neste artigo pode ser encontrado neste repositório no meu GitHub.  Para explicar como vai funcionar, esse projeto é composto por dois módulos: Antes, indicamos que você confira nosso artigo “Docker: tudo o que você precisa saber”. Agora, vamos começar falando a respeito da estrutura do projeto back end. Back end A pasta BACKEND vai ficar com a seguinte estrutura, de acordo com as recomendação da documentação oficial da FastAPI: Onde o arquivo __init__.py é vazio (ele é usado para referenciar módulos em Python) e o arquivo main.py é composto de dois endpoints configurados usando FastAPI. …/ → hello world. …/employees → lista dos empregados de uma empresa consultando num banco de dados. A implementação dessa classe está disponível abaixo: Já o arquivo requirements.txt informa as dependências necessárias para subir o projeto seguindo a documentação do FastAPI, com a lib do mysql-connector-python: Dockerfile Para usar essa aplicação em uma imagem do Docker, vamos criar um Dockerfile com a seguinte implementação: Observação: o CMD pega uma lista de strings, cada uma dessas strings é o que você digitaria na linha de comando, separada por espaços. Este comando será executado a partir do WORKDIR, que configuramos aqui para ser o diretório /code.  O programa será iniciado no diretório /code e dentro dele está o diretório ./app com o código, o Uvicorn poderá ver e importar o aplicativo de ./app/main.py. Imagem do Docker Para criar a imagem baseada nesse Dockerfile, na pasta BACKEND, execute o seguinte comando: Observação: o . (ponto) no final, equivalente a (./), informa ao Docker o diretório a ser usado para construir a imagem do container. Nesse caso, é o diretório atual (.). Conferir depois que a imagem foi gerada através do comando: Com o retorno: Testando o container Para iniciar um container baseado nessa imagem, podemos agora seguir com o comando: E será possível consultar que o container está UP usando o comando: Poderemos a partir desse momento abrir o navegador e acessar a página inicial do aplicativo na URL http://0.0.0.0/ retornando: { message: Hello World } Já a URL http://0.0.0.0/employees não vai funcionar, pois o banco de dados não está (ainda) configurado. Vale a pena destacar também que é possível acessar o container usando o comando: Uma vez no container, é possível listar, navegar e ver os arquivos e pastas que foram incluídos lá. Lembrando como desmontar um container Mesmo saindo do container (usando o comando exit), ele continuará UP até você parar. Confira usando o comando docker ps se aparece ainda o container usando a imagem company-backend. Para desmontá-lo, use o comando docker kill <CONTAINER_ID> (após selecionar o CONTAINER ID que deseje parar). Através do comando docker ps -a agora, é possível conferir que o estado do container escolhido é Exited. Para removê-lo definitivamente desta lista e conseguir subir um novo container usando o mesmo nome, basta executar docker rm <CONTAINER_ID>. Após isso, até a lista retornada pelo comando docker ps -a estará vazia. Para configurar o banco, segue a segunda parte do artigo: Banco de dados A pasta MYSQL vai ficar com a seguinte estrutura: Scripts do banco de dados A pasta database é composta de dois scripts SQL, um para criar uma tabela employees e o outro para inserir dados nessa tabela. Obs: ambas as operações poderiam ser realizadas no mesmo arquivo, isso é mais para demonstrar que podemos ter quantos scripts forem necessários aqui. Dockerfile Agora, para usar esses scripts numa imagem do Docker, vamos criar um Dockerfile com a seguinte implementação: Imagem do Docker Para criar uma imagem baseada nesse Dockerfile, na pasta MYSQL, basta executar o seguinte comando: E conferir depois se a imagem foi gerada através do comando: Com o retorno: Testando o Container Para iniciar um container baseado nessa imagem, podemos agora seguir com o comando: Observação: a flag -e permite informar variáveis de ambiente. Aqui, apenas foi usado para configurar a senha do banco: MYSQL_ROOT_PASSWORD (daria também para definir aqui o database, mas já fizemos isso no Dockerfile com a variável MYSQL_DATABASE). Será possível consultar que o container está UP usando o comando: Poderemos, a partir desse momento, acessar nosso banco através do Docker usando: E conectar nele com: Observação: lembrando que você pode rodar o comando exit em qualquer momento para sair do mysql ou do container do Docker. A partir desse momento, já poderemos realizar operações mysql. 1. Para ver o Database, podemos executar o comando:  Com o retorno: 2. Para usar o nosso database Company, execute o comando: As tabelas de nosso database Company podem ser listadas usando o comando: Com o retorno: 3. As colunas dessa tabela employees podem ser listadas executando o comando: Com o retorno: 4. O conteúdo da tabela employees pode ser observado através do comando: Com o retorno: Pronto! Temos nossa imagem personalizada do Docker de um banco de dados MySQL!  Esta imagem do Docker seria uma ótima solução para compartilhar e garantir que várias pessoas desenvolvedoras usem as mesmas configurações num ambiente de desenvolvimento local, apenas iniciando um container a partir da imagem. Lembrando que para desmontá-lo, é só seguir o mesmo passo a passo da parte anterior. Pontos de atenção É importante notar, no entanto, que essa nem sempre é a melhor solução! Por exemplo: Back end + MYSQL Agora entramos na parte legal! Aqui, o código da API Rest em Python usava hardcoded nas configurações do banco de dados, configurados ao subir meu container company-database. Ressalva: não faça isso em PROD, hein? Use arquivos de configurações para cada ambiente, aqui foi apenas para exemplificar! Seguindo esse passo a passo, você já percebeu que quando trabalhamos com vários containers, gerenciar a

Como começar uma carreira em produto

Capa do artigo sobre carreira em produtos. Na imagem, uma mulher negra de cabelos trançados está sentada em um sofá com o notebook no colo.

Criamos um material especial para prover informações relevantes para ajudar a direcionar o processo de formação de profissionais nas carreiras em produtos.  Aqui, vamos focar no que acreditamos que são ótimas fontes de referência para contribuir com o desenvolvimento de habilidades e conhecimentos técnicos para profissionais que têm interesse em uma carreira de produtos digitais.  Ou seja, apresentaremos livros, ferramentas, cursos e outras fontes de conteúdos que poderão ajudar a desempenhar alguns papéis relacionado à área, tais como: PM (Product Manager), BA (Business Analyst), PO (Product Owner) e UX/UI (User Experience/ User Interface).  Para contribuir ainda mais com profissionais que desejam iniciar nessa carreira, além de todo este conteúdo, no final do artigo você pode conferir dicas práticas e esclarecimentos de dúvidas que são bastante comuns para quem está se preparando para dar os primeiros passos em produto. O que faz quem trabalha com produto? Bom, para começar, vale relembrar que a área de produto é a responsável por garantir que os produtos de uma empresa tenham sucesso. Ou seja, são profissionais que utilizarão os recursos de tecnologia disponíveis para criar algo que atenda uma necessidade legítima das pessoas usuárias. Dessa forma, o uso do produto criado deve resultar em uma recompensa à organização através dos objetivos atingidos. Profissionais dessa área vão trabalhar com: Carreira em produtos = oportunidade A área de produto está em um momento bastante aquecido e procurando profissionais no mercado. Vamos trazer dados de duas pesquisas que comprovam essa afirmação. Entre os 25 cargos com alta demanda em 2022, o LinkedIn apontou a posição Gerente de equipe de produto como um dos destaques. Mesmo que seja um cargo de liderança, competências como Scrum, metodologias ágeis e Kanban estão no radar de profissionais que ocupam essas vagas.  Já o Glassdoor fez uma pesquisa nos Estados Unidos e listou Gerente de Produto como o 10º melhor emprego de 2022. Se você filtrar pela pesquisa britânica, vai encontrar ainda mais funções ligadas à área de produto nas primeiras posições. Voltando para o contexto do Brasil, segundo o Glassdoor, separamos os salários de alguns cargos da área: Se você já pensava em migrar para a área, agora deu ainda mais vontade, não é? Para te ajudar a começar a estudar sobre produto, listamos indicações de livros, vídeos, artigos, podcasts e muito mais para você mergulhar no tema. Bora conhecer nossas sugestões! Indicações de livros Livros sobre produto Este livro é uma introdução à Gestão de Produtos, com conceitos, papéis e técnicas importantes. Além disso, tem a resposta para todo nível de carreira, desde o início até VP ou CEO. Todo mundo deve ler esse livro pelo menos uma vez (e é bem provável que você irá ler mais vezes). Dica: os primeiros capítulos, que podem ser lidos gratuitamente em qualquer e-commerce na internet que disponibiliza a amostra do livro, trazem uma ótima visão sobre como os conceitos de Product Management podem ser aplicados para melhorar a realidade de qualquer equipe que atue na construção de um produto digital. A agilidade é um pilar necessário quando falamos de produtos, então é muito importante saber o seu início, como empregar, quando empregar e, mesmo não trabalhando em uma startup, o livro do Eric Ries trás vários conceitos para utilizar no dia a dia. Sem dúvidas é um livro para a vida. Se você já sentiu que teve um dia muito cheio e nada produtivo, você deve ler esse livro. Ele apresenta como ser uma pessoa essencialista, fazer aquilo que é essencial e saber dizer não em diversas situações. Um dos livros interessantes para entrar no mundo de UX/UI é o design do dia a dia, nele podemos encontrar formas de pensar e como abordar pessoas usuárias de maneira cativante. Se está pensando em iniciar ou é iniciante em UX/UI, essa é uma leitura recomendada. Livros para aprimorar hard skills Em sua obra, Eric Ries apresenta um novo modelo de gestão, onde os princípios do empreendedorismo são aplicados em qualquer tipo de negócio. Leitura muito relevante para discoveries de novas features ou até mesmo novos produtos. Paulo Caroli ensina como fazer uma Inception em uma semana, qual é o cronograma, quais são as dinâmicas e os motivos que fizeram ele reduzir o tempo dedicado para realizar a construção de um MVP. Inclusive, temos um conteúdo com o Paulo aqui na Zup. No encontro, ele compartilhou sua experiência sobre Lean Inception, confira: Em o Modelo Hooked (Modelo Gancho), Nir Eyal explica o processo de quatro etapas que é incorporado aos produtos de empresas para incentivar sutilmente o comportamento de clientes.  Livros sobre Agilidade Há mais de vinte anos, Jeff Sutherland foi o responsável por desenvolver a primeira equipe Scrum. Nesta obra, ele apresenta seu método que revolucionou a produtividade de inúmeras empresas. Alexandre Magno mostra como Scrum inovou processos de gestão e que pode ser usado no dia a dia para tirar os mais variados projetos do papel. Livros com cases de sucesso O livro conta a história do Airbnb e como alcançou uma avaliação de US$ 30 bilhões, maior do que a de Hilton e próxima da Marriott.  A obra relata como uma empresa pode ser construída de forma diferente: a Starbucks investiu em um funcionamento com o coração, que nutre a alma e ainda dá lucros. Ferramentas úteis Ferramentas universais O Miro é a ferramenta necessária para se aprender a dominar e sorte a nossa que temos uma infinidade de recursos e pessoas criando templates a todo momento para que possamos utilizar. Um dos templates mais utilizados pelos time de produtos são as ferramentas de fluxogramas, quadro Kanban para expor atividades e também os quadros para realização de cerimônias. Para auxiliar ainda mais, vamos sugerir um site bem legal que apresenta muito desse mundo: o MiroVerse, que faz uma analogia aos vários mundos do personagem do Doutor Estranho da Marvel e apresenta o universo do Miro. Ferramentas para desenho de interfaces O Figma é outra ferramenta muito utilizada por quem trabalha com produto. Ele é utilizado por designers para a criação

Este site utiliza cookies para proporcionar uma experiência de navegação melhor. Consulte nossa Política de Privacidade.