Monitoramento e manipulação de erros no PWA com React e Redux

Adendo: Não sabe bem o que é PWA? Leia o resumo.

Colocou a App em produção? Vamos conversar.

Você não conseguirá impedir erros em produção e principalmente lidar com isso na interação com o usuário mesmo que sua aplicação tenha uma cobertura de 100% com testes unitários, um bom ratio pra cada linha de código e testes de aceitação/integração.

Você está errado em todas as metodologias se não testa de forma automatizada.

Reagindo a erros não esperados

A versão 16 do React trouxe um método excelente no ciclo de vida dos componentes, o componentDidCatch, que captura todas as exceções lançadas pelos nós abaixo na árvore do componente que manipula esse método.

Em outras palavras, todo erro que acontecer abaixo de ErrorBoundary (ver código seguinte) será capturado num único ponto sem a necessidade de espalhar try/catch pelo código de apresentação.

De qualquer forma, todas as transformações de estado devem ser concentradas no redux como o código a seguir.

https://gist.github.com/cmilfont/e4fa20e1ced19a36fcdf948916184ade

Independente de como mostrar a UI para o usuário ao acontecer um erro, essa informação virá exclusivamente de um ponto que é administrado por transações das sagas.

Estado Centralizado

Temos vários vantagens em centralizar a manipulação de erros no redux, a principal é que podemos concentrar o monitoramento em um único lugar com os dados trackeados pelo sua ferramenta, seja Airbreak, Logentries ou Sentry.

https://gist.github.com/cmilfont/a0009b8e0af3e4ce0eb1e23439324314

Qual a diferença entre colocar um window.onError?

Facilitar coordenar tipos de erros junto ao estado da aplicação, além de indicar um único ponto de manutenção porque esses tipos precisam de transformações e Tracking.

Track dos erros

Dado a centralização dos erros, agora partir para logar direto no seu serviço que provavelmente tem dezenas de métodos de notificações e habilitar a integração com seu Issue Tracking.


Tracking, notificação e resolução de erros.

Offline

O ecossistema Redux também agrega a vantagem de facilitar a persistência dos erros para tracking e análise futura ou evitar a submissão constante de notificações aproveitando para enviar em Batch num tempo determinado.

Em alguns casos extremos, principalmente em integração, você pode exportar o store na window para disparar um error que extrapola a aplicação com window.onError = error=> (window.store.dispatch({ type: ‘GLOBAL_ERROR’, payload: error }));

Espero que essas dicas agreguem valor a sua App, porque é praticamente impossível evitar erros, é sempre melhor estar preparado pra agir quando eles surgem.

Comenta sobre algo que acontece(u) na sua App que essas dicas ainda não cobrem para eu melhorar o artigo.

Progressive Web Apps: a palavra-chave é Progressive, não App ou Web

Não sabe o que é PWA ainda? Ouça um podcast que gravamos no DevNaEstrada sobre o tema.

O Sérgio Lopes, ou Sergio Caelum, um dos maiores nomes do Front-end do Brasil e quiça do mundo escreveu um excelente artigo defendendo o ponto de vista que o mais importante no PWA é o fator Web.

Discordo — e já concordei — e acredito que o mais fantástico de PWA é unificar o desenvolvimento Front-end moderno em um único dispositivo.

Estamos desenvolvendo e aperfeiçoando o The Rivendel Way apostando pesadamente que no Capítulo Front-end o PWA vai ser a solução para unificar tudo.

Front-end é o dispositivo que foi desenhado pra ser.

A programação Front-end nasceu no primeiro terminal, se é que não dá pra considerar desde o cartão perfurado.

No Desktop a grande facilidade encontrada foi a padronização de um Toolkit fornecido pelo próprio SO, você não tinha que desenhar sua tela, apenas usar a UI fornecida, os Patterns vem desde os anos 70 — como MVC — e o estado da arte já estava encontrado ali nos anos 90.

Temos que reescrever todo o código Mobile a cada 2 anos

Todo mundo aceita, mesmo a contragosto, reescrever toda a aplicação a cada dois anos porque não tem o que fazer, os dispositivos nem existem mais e os novos provavelmente dão algum “probleminha” de compatibilidade desde o SO a libs específicas.

Alguém citou IOS? Eu que não.

Qual o porquê desse mesmo comportamento não ser aceito pra Front-end Web?

Os dispositivos, conhecidos como navegadores, demoram um pouco mais e mantém uma certa retrocompatibilidade com a sua receita de bolo na construção da UI artesanal que ele não oferece.

Resultado: um time Front Web, um time Front Android e um time Front Ios P-O-R P-R-O-D-U-T-O.

Responsivo

Um dos fatores mais importantes na minha opinião é começar ponto a ponto a partir do responsivo do seu produto/site.

Se tem um mínimo necessário, pra mim seria isso e acredito que todo mundo concorde com isso, sem “responsividade” não dá pra nem conversar?

Mas Milfont, pra quê falar o óbvio em pleno 2107?

Acredite, não é ainda, por incrível que pareça. Sigamos.

Qual o Porquê de não esquecermos do aspecto App?

Voltando ao Post do Sergio, Web é importante como plataforma, unificar esses times e ecossistema de tecnologias, além de fornecer a mesma experiência para o usuário sem o punir com instalação, entre outras coisas.

Mas só pensar em Web não faremos essa mudança, precisamos indexar na lista de Apps dos dispositivos móveis, ter uma responsividade ao acessar um link em um Push Notification (*) , compartilhar entre Apps, acessar com facilidade recursos do aparelho (ou no caso do IOS pelo menos acessar) e pequenos detalhes que só lembramos na hora de implementar.

(*) (quem está usando o Twitter no Android já deve ter percebido que tem vezes que não abre a App quando clica na mensagem)

Progressivo

Enquanto o PWA não fornecer o aspecto App completo, não será aceito.

Precisamos progressivamente entregar um valor ao usuário mais próximo do que ele já tem hoje, que no Mobile nativo já lembra muito aquele estado da arte que o Desktop entregou nos anos 90.

Já estamos prontos?

Semana que vem vou palestrar no BrazilJS sobre as vitórias alcançadas do CEJS (primeiro semestre) pra cá, enquanto isso fique com as derrotas:

Pra finalizar, se ouviu o podcast referenciado no início do texto, vai perceber que profetizei o PWA no IOS (que é o que falta) até 31 de dezembro, a Apple está correndo atrás pra não furar o prazo.


Criando uma cultura de sucesso na sua empresa

Empresas e funcionários, vamos conversar sobre nossa relação?

Quero demonstrar como criar uma cultura de sucesso mantendo e atraindo os melhores, os empolgando constantemente e instigando o crescimento junto ao negócio.

Em primeiro lugar, entenda: na empresa somos todos mercenários, não membros da família como o DHH escreveu brilhantemente. Como? Pra explicar isso vamos precisar de um preâmbulo histórico.

Até a invenção do capitalismo, todas as relações de trabalho giravam em torno da terra, ou seja, você tem um suserano que é dono da terra por direito religioso ou social e vassalos que devem respeito e obediência ao seu nobre. [1]

Existe uma diferença substancial entre vassalo e escravo, o primeiro pode ser outro nobre inclusive. Você trabalha por Honra e satisfação ao seu suserano, não por um salário, antigamente não existiam sequer forças armadas, eram os vassalos e nobres quem formavam o exército — com excessão do exército Romano em um curto período de tempo e com suas particularidades.

Em contrapartida o suserano tinha a obrigação de fornecer segurança, alimentação e todos os recursos necessários a subsistência de seus vassalos.

O motivo real para a invenção da agricultura

Homens livres eram basicamente mercenários, aqueles que trabalhavam apenas para quem pagava mais, não necessariamente apenas pelo dinheiro, a reputação de um bom trabalho valia mais que seu peso em ouro pra conquistar trabalhos futuros e satisfazer o ego entre seus pares, noções de valores marginais já disseminados.

Na transição entre o feudalismo e o capitalismo surgiram outros pequenos artesãos, ordens e sociedades de outras especialidades, mas todos girando em torno da guerra e discriminados como mercenários.

Invenção do Capitalismo

Fomos nos ajustando como sociedade pela mudança sócio-cultural das relações de trabalho a partir da invenção da indústria e dos serviços entre leis trabalhistas e teorias financeiras sobre essa difícil relação, no fim das contas somos homens livres que trabalham por dinheiro ou uma boa reputação como os antigos mercenários, mas o ranço do significado da palavra nos impede de enxergarmos como tais e nos submetermos na maioria das vezes como vassalos.

Ao mesmo ponto que o empreendedor é dono do novo conceito de terra e precisa entender que contrata mercenários, não é suserano de seus colaboradores. [2]

source (fonte) https://www.linkedin.com/pulse/20140630194932-24818861-could-wild-capitalism-be-headed-to-extinction

Invenção do termo Colaboradores


Os departamentos de Recursos Humanos tentaram suavizar a visão entre um vassalo e um mercenário e inventaram o termo colaborador que incuta a noção que dinheiro não é envolvido, mas também não é descartado. Ou seja, não define na verdade o que você faz e nem quais responsabilidades são induzidas a quem é o dono do capital.

Colaborador pode ser tanto um fornecedor, quanto um funcionário ou um co-fundador. Mas na empresa existem os sócios e os funcionários apenas, estes divididos em hierarquias de chefia, seja técnica ou absolutamente burocrática.

Conduza a carreira

Vamos começar pelo dono do capital e da alta gestão, ao trabalhar o ego de seus funcionários vocês conseguem “corrigir sem ofender e orientar sem humilhar?“.

Tem certeza? Que tal medir o nível de satisfação dos seus colaboradores?

Plano de Carreiras

Não acredite em empresas horizontais, níveis de hierarquia e disparidade salarial são vistos como algo justo. Tem trabalhos científicos demonstrando isso. Um bom plano de carreiras com regras claras de como o funcionário crescerá na sua empresa.

Harmonia no ambiente de trabalho

Não ofereça puff e cadeiras confortáveis como diferencial, não está contratando crianças, um ambiente saudável é o que desafia sem explorar, não queira vender como um ambiente familiar que as pessoas viverão naquele panfleto da bíblia com leões e tigres convivendo entre seres humanos, lugar de trabalho é para a boa competição.

A harmonia é atingida quando todos sabem seus papéis e possuem a autonomia necessária para desempenhar, os inaptos sairão normalmente, mas não causará o infortúnio de perder os melhores. Não acredite em evitar choques de visões e opiniões fortes, isso não evitará possíveis desentendimentos e talvez surta o efeito contrário.

Networking e relacionamento

Invista no seu funcionário, o desafie a apresentar palestras, participar de conferências e se tornar o mais apto naquele aspecto técnico — mas pague as despesas, ao demonstrar o trabalho que fez na sua empresa ele se esforçará pra coordenar e organizar da melhor forma possível, afinal ele vai provar seus méritos a seus pares que serão bem criteriosos. Tire do Budget de Marketing pra financiar.

Atrair os melhores (e principalmente os manter) ainda vai ajudar a atrair os pares.

Tamanho de Time

Todo mundo quer fazer Cosplay da cultura de Squad do Spotify, mas você está tentando emular ou absorvendo os aspectos culturais?

O mais importante para o time é que você tem que preencher os papéis, não os transformar em cargos, isso é paralelo no plano de carreiras. Scrummaster não deve ser cargo (foi engano se já está na CBO).

Invista no treinamento e especialização

Queira o melhor mercenário no time que seu dinheiro pode pagar, se não dá pra bancar um salário gordo devido ao mercado e Market Share que possui, compre uma conta na Alura e um pacote na Casa do Código pra eles como complemento, alie com o tópico sobre palestras e Networking.

Coordene o que vão estudar, em vez de soltar 20% de horas pra pesquisa aleatória, promova ações sólidas como a resolução de um problema que seu produto/serviço atua e patrocine um Hackathon pra isso.

Os conselhos usam exemplos bem pontuais da área de desenvolvimento de software, porte e adapte para o seu segmento.

Fonte: https://en.wikipedia.org/wiki/Landsknecht

Conselho para os colaboradores

Você trabalha em uma empresa que hora extra é o normal e não recebe por isso?

Trabalha sob pressão e tem que se virar pra aprender seja lá o que for?

Ganha pouco e ainda por cima tem o risco constante de perder o emprego sob ameaças?

Não tem as conquistas valorizadas e quando erra isso é evidenciado?

Procure empresas que façam o aconselhado aqui e parem de trabalhar como vassalos, não acredite em empresas que se vendem como famílias ou vai viver sob mesada o resto da vida.

Citações

[1] Um livro excelente focado no entendimento entre as eras comerciais e termos a noção da cultura que girava em torno da terra.


[2] O melhor livro para entender sobre capitalismo.