Agile Trends Florianópolis/SC

Ontem terminou o Agile Trends Florianópolis 2018, um evento sobre agilidade na capital catarinense, mais especificamente na praia dos Ingleses. Eu estive lá durante os dois dias de eventos e a ideia deste artigo é compartilhar um pouco do que vi por lá e a impressão que tive do evento, que acontece também em outras capitais do país como Brasília e São Paulo.

Agile Trends
Agile Trends

A organização

O que me chamou mais a atenção no evento foi o formato. Eram cinco trilhas simultâneas, sendo quatro teóricas e uma prática, composta de workshops, mas tudo isso aconteceu em um mesmo espaço aberto. Sim, era um único salão com cinco coisas acontecendo ao mesmo tempo!

Mas como isso era possível? Será que funciona?

Eu me assustei quando percebi este formato ao entrar no hotel Oceania em Ingleses. Me lembrei da Campus Party, que era uma bagunça neste sentido, um monte de palestra gritando no microfone, com palcos muito próximos um do outro e um monte de gente que tentava desesperadamente entender alguma coisa. Mas aqui a coisa foi diferente.

Cada participante ganhava emprestado um rádio com um fone de ouvido ao entrar no salão. O rádio tinha cinco canais, um pra cada trilha e os palestrantes falavam em um microfone, mas sem alto falantes (o que não atrapalhava as outras palestras), a voz era transmitida via rádio aos dispositivos que estavam com a gente, fazendo com que escutássemos perfeitamente cada palestrante, com o bônus de conseguir dar uma zapeada de vez em quando olhando para os lados e trocando os canais do rádio para ver se a outra palestra estava melhor, isso foi animal!

Já estive em muitos eventos com trilhas simultâneas como TDC e é um saco quando tu está em uma palestra meia-boca e não sabe se tem outra melhor acontecendo em outra sala. Esse talvez seja meu principal elogio ao evento, pois essa sacada foi genial. Tu não tinha de estar bem na frente do palestrante para ouvir e conseguia ir de uma trilha à outra muito facilmente.

As Trilhas

As trilhas eram cinco, como comentei antes. Na trilha de Workshops, tínhamos dinâmicas e muita mão na massa com pessoas de mercado bem experientes apresentando suas técnicas, como o Andy Barbosa do Agile Institute Brasil. Eu não cheguei a participar de nenhum workshop, me ative mais às palestras mesmo, mas pareciam bem interessantes.

A trilha #1 era de Agile Coaching, como um foco muito grande em pessoas e team building. Muito grande mesmo, eram quase filosóficas e assisti poucas palestras aqui. Sinceramente eu esperava mais cases de transformação ágil e resoluções de conflito em escala corporativa, que é o que mais me aflige hoje na minha função como Agile Coach no Agibank. Não desmerecendo o conteúdo da trilha, longe disso, mas não era o que eu estava procurando.

A trilha #2 era de Scrum e Lean/Kanban. Essa sim teve muitos cases, em especial de Kanban. Ficou muito claro que o mercado parece estar cada vez menos interessado em falar sobre Scrum e estão voltando suas atenções para Kanban e Lean. Não é algo anormal na minha opinião, uma vez que conforme a maturidade dos times e das empresas aumentam na adoção de métodos ágeis, faz-se menos necessária a utilização de frameworks, por menores que sejam como o Scrum.

A trilha #3 era de DevOps, a trilha mais técnica de todo o evento. Foi uma trilha interessante, com bastante ferramental e cases de adoção de DevOps. Acho que foi o primeiro evento que tive a oportunidade de ver palestras de DevOps, justamente por causa do formato de organização open-space, uma vez que nos eventos tradicionais eu acabo enfurnado em  salas de métodos ágeis com foco maior em dinâmicas e facilitação.

E por fim, a trilha #4 era de Gestão de Produtos. Note como cada trilha possuía um apelo para um papel ágil específico com #1 Agile Coach, #2 Scrum Master, #3 Dev Team e #4 Product Owner. Achei bem interessante isso. Nesta trilha tivemos alguns cases, muita técnica para cocriação, priorização, MVP e muito mais coisas que todo PO tem de ter no seu cinto de utilidades.

Agile Trends
Agile Trends

Os pontos altos

O evento começou muito bem com a keynote Mari Zaparolli do PagSeguro (também conhecida como Mari Canvas), contando o case de transformação ágil deles. Muito bacana mesmo como eles montaram um time de 15 Agile Coaches na Governança de TI da empresa para ajudar os 100 times de desenvolvimento a rodarem os projetos de maneira ágil.

Outra palestra muito boa foi da Dieine, Agile Coach da HostGator, contando toda a jornada deles para adoção de agile em todas áreas da empresa, não apenas na área de desenvolvimento.

Também teve um case bacana de transformação na divisão de produto Fluig da Totvs, onde existia um problema muito grande de qualidade e velocidade nas entregas, resolvidos com a adoção de métodos ágeis, principalmente Scrum e Kanban por lá.

Pra quem curte Kanban, tiveram muitas palestras sobre o assunto, abordando adoção, disfunções, métricas e por aí vai. Na minha opinião ficou até meio repetitivo.

Enfim, acho que isto é o que posso resumir do evento. Certamente valeu a pena a viagem até Santa Catarina e fiquei bem curioso com o anúncio da edição do ano que vem em SP, que ocorrerá durante 6 dias em abril e será o maior evento de agilidade do Brasil de todos os tempos.

Quem sabe não nos topamos por lá?

Gostou do assunto? Quer aprender mais sobre métodos ágeis? Conheça meu livro Scrum e Métodos Ágeis clicando no banner abaixo!

A Via Expressa dos Milionários – Resenha

The Millionaire Fastlane

Eu não recordo agora como adquiri este livro, mas chuto que foi em alguma promoção da Amazon. Eu já o conhecia há anos, por causa do trabalho de divulgação do brasileiro Marcus Lucas, que eu já citei em outro post por aqui. O Marcus é um nômade digital que vive atualmente em Koh Samui, na Tailândia, trabalhando pela internet através de um notebook. Eu nunca entendi muito no detalhe o que o Marcus faz, mas sei que ele tem um curso para empreendedores digitais e que é um embaixador brasileiro do Millionaire Fastlane (Via Expressa dos Milionários), ou seja, alguém que “evangeliza” empreendedores nos conceitos do livro em parceria com o autor, MJ De Marco.

Enfim, eu li a versão digital em Inglês do mesmo, pois não achei em Português para comprar, mas sei que existe traduzida pelo próprio Marcus Lucas, então de repente podem pedir diretamente pra ele. A ideia desta resenha é dar uma ideia ao leitor do que se trata o livro e se faz sentido para você, pois não era nada do que eu esperava, embora isso não seja exatamente ruim.

O autor

MJ De Marco diz ser um milionário jovem que fez fortuna através de um mindset que ele chama de a Via Expressa dos Milionários, que é a ideia que ele vende ao longo do livro, que eu vou explicar melhor na sequência. Ele começa o livro dizendo que não é um método de ganhar dinheiro, mas um mindset de como você deve aplicar seu tempo, dinheiro, esforços, etc e o que você deve evitar para de fato se tornar um milionário rapidamente. Assim, ele diz com todas palavras que não é um método no estilo do Tim Ferriss (4-Hour Workweek), está mais para um Napoleon Hill (mas essa é minha opinião).

Ele conta que desde pequeno não entendia muito bem o formato de trabalho convencional que te tomava a vida inteira para ter algum dinheiro quando estivesse velho e quase morrendo, em uma época em que não conseguiria aproveitar muito. Ele não aceitava mas ao mesmo tempo o status quo não lhe dava muita opção, considerando que apenas atletas e artistas obtinham fortuna jovens. Até que um dia ele se deparou com uma Lamborghini, o que ele chama de A Profecia da Lamborghini.

Ele estava em um posto de gasolina comprando sorvete (ou algo assim, não lembro) e uma Lamborghini parou para abastecer. Na hora ele pensou que deveria ser algum velho rico que estaria dirigindo, mas se surpreendeu quando um jovem saiu dela, de roupas casuais. Em um esforço de sair do choque daquela cena MJ conversa com o sujeito tentando entender de onde vem a sua riqueza precoce, imaginando que poderia ser uma herança, mas o jovem responde que é um inventor.

Isso muda a vida de MJ que passa a buscar maneiras de fazer fortuna “inventando” coisas e que mais tarde ele descobre que tem a ver com empreender e investir os ganhos do empreendimento.

MJ com sua Lamborghini
MJ com sua Lamborghini

A Via Expressa

O livro é bem mais denso do que vou colocar aqui, mas todo o mindset se baseia em um a metáfora de três partes: a Via Lenta, a Calçada e a Via Expressa; resumindo três estratégias de viver a vida do ponto de vista de acúmulo de riqueza.

A Via Lenta seria o jeito tradicional de ficar rico: trabalhe duro por décadas e invita seu dinheiro para que, ao se aposentar, tenha dinheiro para curtir sua aposentadoria. Uma vida de décadas com saúde mas sem tempo e dinheiro, para viver alguns anos sem saúde e com tempo, além de algum dinheiro. Ele critica aqui inclusive investimentos tradicionais com rendimentos percentuais baixos ao ano ou até mesmo investimentos imobiliários às custas de longos financiamentos.

A Calçada consegue ser pior ainda, pois retrata as pessoas que andam a pé, o que não vai levá-las longe, mesmo que podem estar aproveitando o caminho. Ou seja, quem zera sua conta todo final de mês, quem trabalha de dia pra comer de noite, quem vive um dia de cada vez, ou como queira chamar. Enquanto que a Via Lenta vai te levar a um futuro razoavelmente próspero, mas demora, a Calçada não vai te levar muito longe.

E por fim, a Via Expressa, que ele foca ao longo do livro através de um mindset empreendedor e investidor, fugindo da corrida dos ratos do Robert Kiyosaki, nos mostra que você tem de investir seu tempo em empreendimentos que lhe permitam ganhos passivos, ganhos exponenciais e que você não troque seu tempo por dinheiro momentâneo, mas por receita recorrente. Essa é parte da estratégia. A outra parte é justamente a questão dos investimentos, que devem ser em grandes volumes e em coisas certeiras.

O Mindset

E por fim, sem estragar a sua diversão com o livro, o que mais importa em todos os capítulos é o mindset que o MJ tenta formar no leitor. Além de contar todas as suas histórias pessoais, de como começou a trabalhar, como teve os insights dos primeiros empreendimentos (no auge da bolha-ponto-com), a sua guinada de vida quando saiu de casa e muito mais, ele passa lições interessantes de como o mundo é dividido entre produtores e consumidores e que sempre estamos em algum lado da equação. No entanto, quanto mais conseguirmos nos posicionar do lado dos produtores (que são a minoria) mais riqueza atraíremos para nós.

Embora seus pensamentos sejam um tanto radicais em alguns pontos, eles fazem muito sentido e te tiram da zona de conforto de algumas crenças tradicionais que herdamos de nossos pais e até mesmo do status quo da sociedade moderna. Eu particularmente sempre fui adepto do lema “work smarter, not harder” mas sei que ele não é muito bem visto na sociedade por causa do famoso “jeitinho brasileiro” que as pessoas costumam associar com este tipo de posicionamento, sem entender seu real significado.

Não sou muito adepto deste tipo de leitura, mas confesso que não achei de todo ruim, até porque em caso contrário eu não estaria divulgando aqui.

E você, tem alguma outra recomendação de livro sobre geração de riqueza? Também leu A Via Expressa? Deixe seu comentário abaixo.

Abaixo tem a amostra grátis do livro, cortesia da Amazon.

Tutorial CRUD em Node.js com driver nativo do MongoDB – Parte 2

O tutorial de hoje é uma continuação de um outro tutorial aqui do blog, muito acessado aliás, onde ensino como fazer um sistema de cadastro bem simples em Node.js, usando o web framework ExpressJS e o banco de dados MongoDB. Ou seja, o famoso CRUD.

Nesta segunda parte, parto para um conceitos mais avançados em cima do mesmo projeto: paginação de resultados.

Para conseguir acompanhar todos os códigos, é importante que você tenha realizado a parte anterior ou pelo menos baixe os códigos-fonte que se encontram no formulário ao final do tutorial anterior.

Vamos lá!

Atenção, este mesmo tutorial está disponível em videoaula em meu curso de Node.js e MongoDB.

Paginação com Node.js e MongoDB

Nossa aplicação simplesmente lista todos os documentos da nossa coleção no MongoDB, sem qualquer distinção. Nas primeiras duas etapas deste tutorial vamos restringir isso, primeiramente através de uma paginação de resultados e depois através de uma busca.

Conforme trato em detalhes no artigo Tutorial MongoDB para iniciantes em NoSQL: Parte 2, fazemos paginação no MongoDB usando as funções skip e limit de maneira apropriada.

A função skip indica ao MongoDB que deve-se ignorar um número x de resultados da consulta na hora de retornar do servidor de banco. Já a função limit diz ao Mongo que ele deve retornar apenas um número limitado de documentos, independente se a busca retornaria mais elementos normalmente. Ambas funções devem ser usadas após um find, como veremos a seguir.

A lógica para criar paginação é bem simples: determine um tamanho de página, por exemplo 10 elementos, descubra o total de elementos que a consulta retornaria, por exemplo 21 elementos, e depois dividida o total pelo tamanho de página, arredondando sempre pra cima. Pronto, você tem a quantidade de páginas para aquela consulta! Neste exemplo de 21 elementos com uma paginação de tamanho 10, serão 3 páginas, sendo que as duas primeiras terão exatamente 10 elementos e a última apenas 1.

Entendeu?

Para determinar o tamanho de página ideal para seu sistema você tem de levar em consideração a performance da sua aplicação e a experiência do seu usuário. Muitas páginas com poucos elementos é fácil do banco retornar, mas ruim pro usuário ficar navegando. Poucas páginas com muitos elementos é o oposto e o segredo está no equilíbrio. Neste exemplo, ficaremos com tamanho 10 mesmo, para fins de teste.

Paginação de Resultados em Node.js

Então nosso primeiro passo será modificar uma function já existente no módulo db.js da nossa aplicação para que ela retorne os resultados de maneira paginada, como abaixo:

Note que comecei definindo uma constante com o tamanho das páginas sendo 10. Depois, adicionei um novo parâmetro na função findAll que espera a página que a aplicação deseja apresentar. Este parâmetro eu uso para calcular o skip, ou seja, quantos elementos da consulta eu devo ignorar. Se a página for a primeira, o skip será zero e serão mostrados os primeiros 10 elementos. Se a página for a segunda, o skip será 10 pela fórmula e serão mostrados os elementos das posições 11 a 20 (ordinal, ou 10 a 19 considerando um array zero-based).

Agora vamos modificar onde esta função findAll é chamada: na pasta routes, módulo index.js, que vamos modificar levemente a rota GET padrão apenas para adicionar o parâmetro página nela:

Note que coloquei o parâmetro no path como sendo opcional (?) e se ele não tiver sido passado na URL, será atribuído como um. Esse truque do || para atribuir um valor default eu ensinei no artigo 15 Dicas de JavaScript, lembra?

Certifique-se de que esta rota seja a última do arquivo index.js, logo antes do module.exports!

Como as rotas são testadas da primeira até a última para ver qual que processará a requisição deixaremos esta pro final para não interferir nas demais avaliações.

Agora execute a aplicação e teste a index passando a página na URL, como abaixo. Note que tive de adicionar muitos customers no banco de dados para podermos ter alguma paginação.

Paginação funcionando via URL
Paginação funcionando via URL

Mas obviamente não faremos nosso usuário ter de mudar parâmetros na URL para acessar as páginas, certo?

Está curtindo o post? Para uma formação ainda mais completa como programador web recomendo meu livro sobre programação web com Node.js clicando no banner abaixo!

Paginação de resultados com ExpressJs e EJS

Para que o usuário saiba quantas páginas existem e para que consiga acessar as mesmas, vamos ter de criar uma lógica para construir o HTML de paginação no frontend e uma lógica para retornar algumas informações importantes no backend.

Vamos começar pelo backend que é mais a minha praia. XD

Abra seu arquivo db.js novamente e vamos criar uma function countAll que executa o callback passado por parâmetro retornando um erro (opcional) e a quantidade de documentos na coleção customers. Note que atualizei o module.exports com a nova função e também exportando a constante com o tamanho de página.

Agora na routes/index.js, mais especificamente no nosso GET default (a última rota do arquivo), vamos ajustar as chamadas para construir o model com as informações que precisaremos no frontend EJS:

Note que tive de encadear as duas chamadas de banco uma dentro da outra, para garantir que a página somente será renderizada quando tivermos tanto os documentos da consulta quanto a quantidade total de documentos na coleção. Esse é justamente o ponto fraco do uso de callbacks, o chamado Callback Hell, mas falarei disso em outro artigo.

A cereja do bolo fica para o cálculo de quantidade de páginas que fizemos ali, dividindo o total de documentos pelo tamanho da página, usando a constante existente no módulo db.js. Ah sim, você não esqueceu de expor esta constante no module.exports, certo?

Agora que nosso model está completo, vamos mexer na index.ejs, nossa view inicial da aplicação para renderizar a quantidade total de elementos e o HTML de paginação para que o usuário possa navegar entre as páginas:

Esse código eu coloquei bem no final do arquivo EJS, onde antes ficava apenas o botão de Cadastrar novo cliente. Se você fez tudo certo até aqui, quando testar novamente você deve ver o seguinte resultado na interface da listagem:

Paginação funcionando
Paginação funcionando

Melhorando usabilidade da paginação

Para encerrar este tutorial, vamos adicionar uma perfumaria para melhorar ainda mais a usabilidade desta página: a página atual não deve ter link, apenas as demais páginas, assim, o usuário saberá em que página ele se encontra atualmente.

Vamos iniciar ajustando o model retornado no nosso index.js para informar também a página atual solicitada pelo usuário:

Note que a mudança foi bem sutil, apenas uma nova propriedade no JSON ‘pagina’.

Para fazer a lógica necessário para que o HTML ora tenha link, ora não tenha, basta adicionar um if na lógica de construção do nosso EJS usando a informação da página oriunda do model:

Ou seja, se a variável de iteração ‘i’ for diferente da página atual, escreve um link HTML na tela, caso contrário, escreve apenas o número da página. Visualmente falando temos a imagem abaixo como referência:

Indicando a página atual
Indicando a página atual

Note como ficou evidente que estamos na página 2, pois não tem link pra ela!

Outras melhorias poderiam incluir legendas quando se passa o mouse sobre as páginas, links de próxima página e página anterior, lógica para quando tivermos muitas páginas (e se tiver 100 páginas, como ficará a tela?) e até mesmo informação textual de que você está vendo os itens x a y da página z.

Mas…isso fica para você pensar meu amigo ou minha amiga! 🙂

Até o próximo post!

Gostou do tutorial? Quer aprender ainda mais sobre Node.js, ExpressJS, EJS e MongoDB comigo? Conheça meu curso de Nodejs e MongoDB clicando no banner abaixo!

Curso Node.js e MongoDB
Curso Node.js e MongoDB