segunda-feira, 27 de dezembro de 2021

10 lições do Almirante McRaven Aplicadas em sua Carreira

O Almirante William H. McRaven foi um SEAL que serviu durante 37 anos na Marinha do Estados Unidos e através de seu livro “Arrume a sua Cama” exemplificou valiosas lições que aprendeu nesta organização e que podemos aplicar em nossas carreiras para ajudar no desenvolvimento profissional.

Pequenas tarefas são importantes

Todos somos guiados a executar grandes feitos para aumentar a eficiência de nossas conquistas, entretanto para executar esses feitos é fundamental ter controle, planejamento, persistência, resiliência, tenacidade, sagacidade entre outras habilidades. E precisamos praticar todas essas habilidades várias vezes ao dia para aumentar nosso domínio delas, basicamente executando tarefas menores com primor, se você consegue criar um alto nível de comprometimento com a execução de uma tarefa, mesmo que pequena, sua mente irá se moldar a executar sempre os passos do procedimento para garantir o desempenho.

Ajude e permita-se ser ajudado

Todos nós atuamos em grupos, grandes ou pequenos, são raros os objetivos corporativos em que a atuação depende somente da nossa ação. Praticamente temos que fortalecer nossas relações para aumentar as chances de sucesso para conquistar as metas, entregas, indicadores entre outros fatores. E a melhor forma de criar relações fortes e ajudar e permitir ser ajudado, isso criará um vínculo mais forte, pois irá demonstrar seu comprometimento tanto em estender a mão, como humildade para solicitar uma mão estendida.

Seja humano com humanos

Nós sempre gostamos quando somos tratados com respeito, atenção e cuidado, se isso é tão importante para nós, devemos defender esses tratamentos e estendê-lo a todos que nos cercam. Mesmo estando no meio empresarial ainda somos pessoas com todo o pacote incluso, portanto se faz necessário que tenhamos a sublime sutileza de praticar empatia com o próximo.

Abrace suas falhas e aprenda com elas

Voltando ao tema que todos somos humanos, uma certeza universal é que humanos são falíveis, tendo essa certeza em mente como podemos transformar essa condição em vantagem na carreira? Simplesmente aprendendo com cada uma das suas falhas, mesmo que elas aconteçam repetidamente, porque será através da análise e conhecimento da causa e efeito, que poderemos gerar novos comportamentos preventivos para evitá-las e até mesmo aprimorar nossa eficiência.

Dificuldades são nicho das fortalezas

Sempre ouvimos o quanto é importante sair da zona de conforto, isso porque estar nesta conjuntura é garantia que obstáculos apareceram e precisaram ser superados, e durante esse processo nossa mente irá desenvolver nossos caminhos neurais e armazenar novos conhecimentos. Os resultados dessas dificuldades será criar novas habilidades que poderão ser transformadas em vantagens, por isso, é essencial se expor com controle nestas situações para possibilitar a criação de fortalezas.

Não tenha medo, de absolutamente nada

São insignificantes as situações dentro de uma empresa que você irá colocar sua vida em risco, o máximo que poderá acontecer é não dar certo. Dado que você está num ambiente seguro, você não precisa ter medo de nada para que possa arriscar em dar um próximo passo, assumir uma nova posição, atuar em outra área, ou seja, cada oportunidade sempre é um trampolim para o próximo nível, basta estar na prancha para produzir experiências e ter a chance de impulsionar sua carreira.

Exale confiança e coragem

Uma vez que o medo não faz parte do seu dia a dia, você tem a obrigação de estar sempre confiante no próximo passo, na execução de uma tarefa, assumir uma responsabilidade. Enfim, utilize todo seu histórico profissional e pessoal para balizar essa coragem e transmitir aos colegas sua confiança no sucesso de qualquer empreitada. O positivismo realista com certeza irá garantir que o caminho se torne mais leve.

Sempre esteja preparado

Não importa a situação, condição ou local, se você está previamente municiado de informações suas chances de sucesso aumentam vertiginosamente. Para as situações já conhecidas você tem a obrigação de se preparar antecipadamente, para as desconhecidas você poderá criar roteiros de aquisição de novos conhecimentos para ir aumentando suas habilidades em assuntos diversos.

Seja Pró-Realista

Resumidamente, o positivismo é a capacidade de ter domínio dos conhecimentos para tratar as situações, acoplando a isso, a realidade, podemos gerar um fator motivacional que fornecerá uma força extra para auxiliar na execução de tarefas. É mais ou menos como vislumbrar o destino antes mesmo de sair do lugar numa caminhada, se você conhecer o local que irá chegar a caminhada se torna mais fácil, pois você disparará um gatilho em sua mente que criará uma zona de segurança.

Para criar resiliência, você não pode evitá-la

Só podemos criar resistência se fortalecermos o material, neste caso o material é nossa mente e a resistência é expor-se a situação fora da nossa zona de conforto, mas só o fato de se expor- não é suficiente, é indispensável que não desistamos no caminho, porque tudo aquilo que é diferente gerará desconforto e muitas vezes tentamos nos convencer que não é mais necessário, são raras as ocasiões que devemos desistir, para isso faça sempre um excelente plano de execução para tomar ciência de todas as dificuldades que enfrentará e esteja preparado mentalmente para vencê-las.

Acredito que utilizando essas dicas, poderemos alavancar nossas carreiras em curto, médio e longo prazo. O mais importante, assim como arrumar sua cama diariamente explanado pelo Almirante McRaven, é criar consciência da sua responsabilidade sobre sua carreira, conduzi-la para a direção que deseja e trará-lá com planejamento para garantir um crescimento contínuo e eficaz.

Marcelo Goberto de Azevedo 

Arquiteto na GFT Brasil

//marcelogoberto.com.br

segunda-feira, 13 de setembro de 2021

Seu amigo Pato de Borracha

 

Normalmente quem trabalha com construção de alguma solução tecnológica, já se encontrou em uma situação em que a solução não parecia ser possível ou muito difícil. Entretanto, foi somente começar a falar sobre o problema para alguém, que a resolução magicamente apareceu. Ou seja, esse alguém foi uma inspiração? Não exatamente, ela simplesmente prestou o papel de ouvinte para a explanação do problema. Então, visto que esse ouvinte não teve um papel de interação ou contribuição, poderíamos meramente substituí-lo por qualquer coisa? A resposta é SIM.

O processo de explicar ou ensinar aumenta as ligações neurais em nosso cérebro, o que nos proporcionar mais acessos as informações retidas, o resultado disso é que durante a explanação passamos a fornecer mais perspectivas baseadas nas novas informações acessadas. Ou seja, faz seu cérebro alternar de faixa e funcionar de uma maneira diferente da mentalidade usual. 

O Pato de Borracha é basicamente uma técnica utilizar por muitos desenvolvedores para auxiliar esse processo de aumentar o acesso às informações, evitando a “visão de túnel", para explicar algo a outra pessoa, primeiro você precisa entendê-lo completamente. No livro O Programador Pragmático, de Andy Hunt e Dave Thomas, é descrita uma passagem em que o programador repassa linha a linha seu código explicando para o pato, e como resultado consegue identificar a falha e corrigi-la.

Pode parecer um processo ingênuo, entretanto existe um método para que o Pato de Borracha possa ativar, vamos a ele:

  1. Verbalize o contexto resumido do problema para o Pato de Borracha;

  2. Vá revisando e falando passo a passo todas as informações (código, diagramas, listas);

  3. Por fim, dê um alguns momentos ao Pato de Borracha, que a solução aparecerá em sua mente.

Claro que o último passo é só uma figura de linguagem, posso garantir que funcionará em 99% dos casos. O ato de dividir um problema em termos mais simples, passo a passo, costuma ser suficiente para tornar o problema mais solucionável. Vamos lá, fale com seu amigo Pato de Borracha.


Marcelo Goberto de Azevedo 

Arquiteto na GFT Brasil

//marcelogoberto.com.br


sábado, 10 de julho de 2021

Pegada Ecológica (CO2) de um WebSite com foco em Green Coding

 

Até o dia 2 de janeiro de 2021 havia 1,826,089,359 sites disponíveis para acesso. Cada site contém propósitos distintos, entretanto o ponto comum entre eles é entregar algo de valor para o internauta. Essa entrega deve acontecer da melhor forma possível, nos formatos de experiência, entre eles existem vários fatores, como velocidade, usabilidade, facilidade, acessibilidade etc. Logo, se conseguimos um site que tenha um perfil de sustentabilidade também no foco, podemos otimizar vários fatores, gerando a entrega de valores mais eficientes.

Seja você iniciante ou expert no desenvolvimento de um site, saiba que existe um plugin para o navegador Chrome que consegue efetuar uma análise do site, através da verificação de boas práticas na utilização de código. O processo para utilização é bem simples:

  1. Instalar o Pluginhttps://chrome.google.com/webstore/detail/greenit-analysis/mofbfhffeklkbebfclfaiifefjflcpad
  1. Carregar o site e abrir o Console DevTools (F12)
  1. Ir até a aba “GreenIT”, marcar a opção “Activate best practices analysis
  2. Clicar no botão “Launch Analysis

Após isto, será apresentada uma lista das verificações e os resultados coletados, além de uma nota geral para o site, que varia de A (mais eficiente) para G (menos eficiente), com base na Tabela de Eficiência Energética.

Add expires or cache-control headers (>= 95%)

Manter recursos (folhas de estilo CSSscripts JavaScript e imagens) o maior tempo possível, para que o navegador não os solicite novamente do servidor. Economiza solicitações HTTP, largura de banda e potência da CPU no servidor.

Compress ressources (>= 95%)

O conteúdo das páginas HTML deve ser compactado para minimizar o consumo de largura de banda, entre o cliente e o servidor. 

Limit the number of domains (<3)

Limitar um máximo de três domínios para os recursos. Porque recursos hospedados em outro domínio lento, pode aumentar o tempo de renderização da página. A boa prática deve ser agrupar todos os recursos em um único domínio.

Don’t resize image in browser

Redimensionar imagens usando atributos HTML de altura e largura. Envia as imagens em seu tamanho original, desperdiçando largura de banda e energia da CPU. 

Avoid empty src tag

Tag de imagem com um atributo src vazio, gera solicitações HTTP adicionais desnecessárias.

Externalize css

Código CSS deve estar separado do código HTML da página, para evitar o aumento do volume de dados enviados. 

Externalize js

Garanta que o código JavaScript está separado do código HTML da página, para evitar o aumento do volume de dados enviados. 

Avoid HTTP request errors

As solicitações com erros HTTP consomem recursos desnecessariamente.

Limit the number of HTTP requests (<27)

Reduzir o número de solicitações por página é fundamental para diminuir o número de requisições HTTP necessários para executar o site e, consequentemente, o seu impacto ambiental.

Do not download unecessary image

Baixar imagens que não serão exibidas consome recursos desnecessários.

Validate js

Validar o seu código JavaScript com boas práticas garante a utilização eficiente da CPU por um período mais curto. O JSLint é uma ferramenta de qualidade de código JavaScript.

Max cookies length (<512 Bytes)

O comprimento do cookie deve ser pequeno, pois é enviado com cada solicitação.

Minified css (>= 95%)

Comprimir os recursos CSS garante somente itens essenciais para serem transferidos, removendo, por exemplo, espaços desnecessários e quebras de linha.

Minified js (>= 95%)

Comprimir os recursos JavaScript garante somente itens essenciais para serem transferidos, removendo, por exemplo, espaços desnecessários, quebras de linha, ponto e vírgula e encurtar nomes de variáveis locais.

No cookie for static resources

Recursos estáticos não utilizam cookies, logo consome largura de banda sem propósito.

Avoid redirect

Os redirecionamentos devem ser evitados, tanto quanto possível, pois tornam a resposta mais lenta.

Optimize bitmap images

Todas as imagens devem ser otimizadas, pois são os recursos que mais impactam na largura da banda consumida.

Optimize svg images

Imagens Svg também devem ser otimizadas e minimizadas.

Do not use plugins

Evite usar plugins (máquinas virtuais Flash PlayerJava e Silverlight etc.) porque eles podem consumir muitos recursos (CPU e RAM). Dê preferência à tecnologia padrão, como HTML5 e ECMAScript

Provide print stylesheet

A folha de estilo deve ser o mais simples possível, e utilizar fontes leves (exemplo: Century Gothic)

Do not use standards social button

Coloque links diretos para as redes sociais, pois os seus plugins, em 99% das vezes, não são utilizados e geram consumo desnecessário.

Limit Stylesheet files (<3)

Minimize o número de arquivos CSS para reduzir o número de solicitações HTTP

Use ETags (>= 95%)

Utilize as ETags (assinatura anexada a uma resposta do servidor), porque elas economizam uma grande quantidade de largura de banda. 

Agora é possível verificar a existência de inúmeras ações simples, e algumas mais complexas, que podem fazer toda diferença no consumo de energia que automaticamente gera emissão de CO2. 

Esse é um dos principais propósitos da iniciativa Green Coding, iniciada pela GFT. Ela fomenta a adoção da sustentabilidade, como parte do processo de desenvolvimento de soluções. É nossa obrigação oferecer métodos mais eficientes para gerar maiores impactos na redução de emissão de CO2, e assim salvar o nosso precioso planeta. 

Você pode encontrar informações mais completas no documento do programa da GFT:

https://www.gft.com/int/en/index/technology-and-innovation/greencoding-tailored-it-solutions-for-banks-insurers-and-industry/

E no atalho abaixo, contribuir para a ferramenta:

https://github.com/cnumr/GreenIT-Analysis

Para mais informações acesse a EcoIndex e confira a sua metodologia: http://www.ecoindex.fr/

Vamos juntos salvar o nosso acolhedor planeta!

Marcelo Goberto de Azevedo 

Arquiteto na GFT Brasil

//marcelogoberto.com.br

Artigo original publicado em https://blog.gft.com/br/2021/07/06/pegada-ecologica-co2-de-um-website-com-foco-em-green-coding/


quinta-feira, 10 de junho de 2021

Comentários Engraçados D+

 Os comentários em código tem uma importância para auxiliar num futuro próximo na manutentabilidade de sistemas, tornando mais fácil ser entediado por humanos. Porém, muitos desenvolvedores, transformação essas linhas não compiláveis em verdadeira partes engraçadas do trabalho. 

Obvio, talvez sim, talvez não

// return 1; # retornar 1


int getRandomNumber()

{

Return 4; // escolhido por um lançamento de dados

}


Erro, para quê serve?


Catch (Exception e) {

//Melhor não...

}


try {

} finally { // Nunca deveria acontecer

}


Exception up = new Exception("Alguma coisa deu errado!");

throw up;  //rs


}catch(Exception ex){

// Houston, nós temos uma problema

}


catch (Ex as Exception) {

// oh merda, devemos fazer algo.

}


Só Ameaças

// Se este comentário for removido o código vai parar de funcionar


// Abandone todas as esperanças aos que entrarem além deste ponto


// Fiz isso sob ameaça, se estiver lendo isso, você é a próxima vítima, corra enquanto há tempo!!!!!


// Remova isso se você quiser ser demitido


// Mágida. NÃO TOQUE!


/* Rs rs rs! Você nunca vai entender por que isso funciona. */


Referência 

options.BatchSize = 300; //Loucura?!? ISSO É SPARTA!


last = first; /* Biblíco */


long long ago; /* Em uma galáxia muito, muito distante */


float boat;   // deve ser um barco, caso contrário, ele afunda! :D


<!-- 0101010001101000011001010111001001100101001000000110100101110011001000000110111001101111001000000111001101110000011011110110111101101110 -->


Filosofando

// bebado, arrumar isso depois


// Quando escrevi esse código, somente Deus e eu entedemos o que está sendo feito

// Agora, somente Deus. ;)


// Querido eu do futuro. Por favor, me perdoe.

// Não consigo começar a dizer o quanto estou arrependido.


// Pelos códigos que estou prestes a escrever, que Ada Lovelace me perdoe


Promessas e são promessas


// Eu preciso arrumar um emprego melhor


// Fazer comentários depois


// TODO Fazer isso funcionar


Verdades Nuas e Cruas


// Programador bons não comentam seus códigos

// O código por si se expressa, é uma arte 


// Se você está lendo isso, quer dizer que você está no meu projeto antigo

// Eu sinto muito, muito mesmo. Boa sorte.


// Não sei por que isso funciona, entretanto corrigi o problema. ;)


// São 3 da madruga, está código está horrível, porém funcionou.


// Este código é uma porcaria, você sabe e eu sei disso.

// Siga em frente, faça o que tem que fazer e passe para o próximo idiota.


Tem uns que são verdadeiras pérolas! kkk

Marcelo Goberto de Azevedo 

Arquiteto na GFT Brasil

//marcelogoberto.com.br

Fontes:

https://loudprogrammer.net/best-comments-in-source-code-i-ever-encountered/

https://meetpd.com/funny-code-comments/

https://fuzzzyblog.blogspot.com/2014/09/40-most-funny-code-comments.html


quinta-feira, 3 de junho de 2021

Sustentabilidade com Codificação

 


Todos somos responsáveis pela redução da emissão de CO2 e, consequentemente, com esse impacto no aquecimento global. Governos, empresas e organizações estão cada vez mais comprometidos em conter as emissões de gases que provocam o efeito estufa. Durante a Cúpula do Clima, que contou com a participação de 40 nações, o presidente dos Estados Unidos, Joe Biden, reconheceu que o país não está fazendo o suficiente para conter o aquecimento global e anunciou metas mais ambiciosas de corte nas emissões de poluentes. 

Como as empresas de Tecnologias da Informação e Comunicação podem ajudar nessa redução?

Você sabia que atualmente é necessário 1% de toda a energia gerada globalmente para alimentar os data centers? Em 2030 esse percentual pode chegar aos incríveis 30%, se somado às estruturas das TIC. Então, podemos presumir que cada linha de código gera um impacto no consumo de energia que resulta na emissão de CO2.  

E como os profissionais de TI podem gerar impacto direto na eficiência energética?

Simplesmente ao escolher formas mais inteligentes de arquitetura, recursos, codificação, estabilidade, boas experiências de usuário, tempo de utilização de processamento e alocação de memória/espaço.

Para guiar os profissionais foi criado um programa inovador chamado Green Coding, que implementa no desenvolvimento de softwares a sustentabilidade, sendo um fator fundamental para ajudar na redução de emissão de gases de efeito estufa, por meio de três pilares:

Aplicar o programa significará adicionar uma nova questão ao processo de design de software, o que coloca também em foco a eficiência energética, que por consequência oferecerá economia financeira e melhores soluções. Vamos verificar alguns exemplos desses pilares.

Lógica

Você sabia que cada linguagem gera um impacto diferente no consumo de energia? Conforme um estudo apresentado pelo GreenLab, é possível efetuar uma comparação por meio de um fator entre as linguagens. Isso leva em conta a taxa de utilização de tempo de processamento, alocação de memória e armazenamento. Claramente, essa escolha de uma linguagem não pode simplesmente ser baseada nessa métrica, pois também temos que colocar na conta os desenvolvedores, a facilidade da utilização, a manutenção, entre outros tantos fatores.

Ação Prática: Criar mecanismos para metrificar blocos de código de processamento, para que seja possível coletar os tempos e percentuais de utilização. Dessa forma gerar parâmetros comparativos que deverão ser usados para a avaliação de melhoria de performance e resultando em uma melhora na eficiência dos processamentos visíveis.

Metodologia

Reutilização de resultados de projetos, seja em partes ou na sua totalidade, para que esses possam ser pesquisados ​​por membros da equipe, pessoas dentro da organização ou até mesmo pela comunidade em geral. Assim, as melhores práticas e resultados são rapidamente absorvidos e implementados.

Ação Prática: Criar um repositório com estudos de casos dos levantamentos de cenários de melhorias de projetos e das possíveis soluções que foram analisadas e posteriormente implementadas. Isso gera uma documentação que poderá ser consultada. Lembre-se, muitos projetos podem se beneficiar das implementações simples e que já foram testadas. 

Plataforma

Aqui, a adoção de computação em nuvem faz todo o sentido. Dado que os recursos são facilmente provisionados, oferecem escalabilidades conforme a demanda de utilização e também oferecem recursos granularizados. Assim temos um conjunto perfeito para criar o ambiente com o tamanho exato de cada necessidade para o momento, o que evita o desperdício de super alocações para atender cenários imaginados. 

Ação Prática: Programar o desligamento automático de equipamentos ou desprovisionamento de recursos que não estejam sendo utilizados no momento, assim os ambientes deixam de funcionar enquanto não estão sendo utilizados ​​(noite, fins de semana, etc.).

O programa GreenCoding está dando os seus primeiros passos, contudo a sua adoção do processo de desenvolvimento de soluções com sustentabilidade é uma responsabilidade de todos. Os recursos do nosso planeta são finitos e não devem ser desperdiçados aleatoriamente, é a nossa obrigação oferecer métodos mais eficientes para gerar maiores impactos na redução de emissão de CO2 e consequentemente salvar o nosso precioso planeta. 

Marcelo Goberto de Azevedo 

Arquiteto na GFT Brasil

//marcelogoberto.com.br

Artigo original publicado em https://blog.gft.com/br/2021/05/11/sustentabilidade-com-codificacao/

quarta-feira, 5 de maio de 2021

Registro de Decisão de Arquitetura

 

Todos que atuam com tecnologia já se deparam com situações em que ninguém sabe explicar o porquê de determinada soluções tecnológicas, é tipo a tartaruga em cima da árvore, todos sabemos que é impossível a tartaruga ter chego lá sozinha, logo alguém a colocou lá, entretanto como não temos o contexto, não fazemos ideia do porque a tartaruga está lá e para piorar, que efeitos positivos ou negativos podem ocorrer caso a tartaruga seja removida. 

Pegando o gancho dessa analogia, podemos transportar essa mesma ironia para arquitetura de softwares, muitas vezes nos deparamos com soluções implementadas de formas anormais as práticas comuns e a nossa primeira reação é corrigi-la. Porém, precisamos contextualizar que se algo foi feito daquela maneira, com certeza existia um contexto a época que culminou nesta escolha, logo, é sempre muito simples entender as razões e consequências, se pudermos facilmente acessar essas informações, para elucidar as principais dúvidas da tomada de decisão no passado. 

Para isso, Michael Nygard recomendou que fosse criado um documento chamado Architectural Decision Records (ADR), em tradução livre, Registro de Decisão de Arquitetura, seu propósito principal é capturar as tomadas de decisões arquiteturais, incluindo o contexto que em foi gerada, as consequências adotadas pela decisão. Esses simples documentos, promovem inúmeros benefícios, principalmente no contexto ágil, sendo alguns desses:

Integração de Novos Membros

Haverá todo um histórico de decisões que deve ser absorvido e que auxiliará na contextualização dos porquê somos e estamos assim. Desde uma simples decisão da adoção de uma tecnologia específica, como a linguagem para desenvolvimento de sites, até a utilização de micro serviços em containers.

Transferência de Conhecimento

Muitas vezes, sistemas são transferidos entre colaboradores, equipes, consultorias, ou seja, mover a propriedade dos sistemas para outra parte que assumirá o comando. Estando os contextos das decisões documentadas, nenhum conhecimento irá se perder no processo, porque os novos proprietários podem rapidamente entender como e por que a arquitetura do sistema evoluiu da maneira que evoluiu simplesmente lendo. 

Alinhamento

Todos sabendo da presença desses documentos, será criado o hábito do conhecimento compartilhado das decisões, facilitando a consulta em níveis hierárquicos da arquitetura, de quais são os “combinados” dentro da corporação. 

E como fazer acontecer? Simples, escrevendo os documentos de Registro de Decisão de Arquitetura no momento em que decisões de impacto significativo são feitas, ou nos mapeamento de débito técnico ou ainda nas implementações fora do comum. 

Mas quando deve ser feito? Um documento pode ser escrito previamente ou posterior a solução, a preferência é que seja feito previamente para estimular a discussão das consequências, fomentando assim mais insumos para uma decisão assertiva. Nos casos posteriores, é necessário para criação de uma base histórica dos contextos que foram aplicados perpetuando o conhecimento.

E o processo como é? Os documentos de Registro de Decisão de Arquitetura são baseado num template com simples marcações em seções, composto pelo seguintes blocos:

Título

Composto por um código e um texto curto e direto sobre o tema. O código é para facilitar o controle e também a inter-relação entre os documentos.

Exemplo: ADR-0012 - Requisições API devem gerar logs

Data

A data que o documento foi criado.

Exemplo: 2021-mai-05

Status

Existem por padrão seis possíveis status, porém você tem a liberdade de criar seus próprios, segue os sugeridos:

  • Proposto: Criação do Documento.

  • Aceito: Decisão Aprovada.

  • Depreciado: Decisão não faz mais sentido.

  • Substituído: A decisão foi substituída - importante referenciar a que substituiu

  • Complemento: Uma decisão complementar - importante referenciar a original

  • Rejeitado: A decisão proposta foi rejeitada

Contexto do Problema

Neste bloco deve ser descrito os fatos que levaram a tomada da decisão, elencando todas as influências que estavam atuando no momento, sejam elas políticas, corporativas, econômicas, tecnológicas, ou mesmo sociais.  

Exemplo: Não conseguimos visualizar os logs em tempo real das requisições, o que resulta em atraso do monitoramento preventivo de erros e comportamentos fora do comum das chamadas. Existe a possibilidade de aquisição de uma ferramenta para efetuar esse monitoramento, entretanto o processo é burocrático e lento. Sendo previsto a sua disponibilização em 6 meses.

Decisão

Neste bloco será descrita a decisão tomada, é vital relacionar com o problema descrito, utilizando a voz ativa com sentenças completas e organizadas em parágrafos.

ExemploTodas as requisições terão implementado em seu cabeçalho a chamada do sistema de log que salvará os dados em um banco de dados. As requisições ao sistema log são assíncronas. Utilizaremos o framework Log4Net para implementação.

Consequências

Este bloco talvez seja o mais importante, porque é aqui que deve ser descrito os resultados positivos e/ou negativos e/ou neutros da decisão, é neste ponto que deve fazer sentido a decisão tomada. Tudo que puder afetar o projeto deve ser registrado e também os débitos técnicos, ou seja, o que precisa ficar no radar para ser decidido no futuro.

Exemplo: O armazenamento “manual” dos logs em tempo real não é a melhor solução, principalmente com a necessidade de atualização de todas estruturas atuais de API que precisavam ser entregues em produção. É importante a implementação de um sistema de gerenciamento de APIs para que seja feito o monitoramento completo do ciclo de vida de uma requisição.

Esses documentos devem preferencialmente serem armazenados em repositórios acessíveis para todos, incentivando assim o compartilhamento de conteúdo e facilitando o acesso às decisões. É crucial que exista um nível organizacional hierárquico para demonstrar as decisões que são dependentes em camadas, por exemplo, uma decisão de arquitetura afeta automaticamente um departamento, que por consequência afeta um projeto.

Com a metodologia ágil cada vez mais presente nas empresas, estamos muito mais propensos às mudanças constantes, e para dar maior visibilidade às decisões tomadas, o documento de Registro de Decisão de Arquitetura nos ajuda a não fazer um julgamento precipitado sobre o que foi feito há época, oferecendo contexto para maior segurança aos times no entendimento do passado e fornecedor informações para melhor decisões no presente que afetam o futuro.


Marcelo Goberto de Azevedo 

Arquiteto na GFT Brasil

//marcelogoberto.com.br


sábado, 3 de abril de 2021

Shu-Ha-Ri no Agile

 

Shu-Ha-Ri é uma filosofia japonesa aplicada em artes marciais, ela engloba o processo de aprendizagem e maestria de uma ou mais técnicas, obedecendo esta ordem: Shu:  obedecer/proteger; Ha: romper/modificar; Ri: separar/superar. Você pode estar se perguntando, o que isso tem haver com agilidade, onde isso é aplicado? Calma, pequeno gafanhoto, vamos definir as três ordens para entender e relacioná-las com a agilidade.

Shu – Seguindo as regras

Em qualquer arte marcial um iniciante precisa entender e praticar as regras passadas pelo mestre, para que possa iniciar seu domínio. É fundamental  praticar sozinho, em conjunto, com o mestre, várias vezes para que os movimentos sejam absorvidos e passem a ser mais naturais. 

Na agilidade, durante o processo de adoção de uma metodologia ágil, como por exemplo o SCRUM, é necessário primeiramente a disseminação das regras, dos papéis, das cerimônias para que todos envolvidos a cada nova sessão se sintam mais confiantes para praticar, gerando assim uma maior aderência.

Ha – Quebrando as regras

Neste ponto um aluno, já acumulou bastante experiência, realiza os movimentos com um excelente domínio, a figura do mestre acaba não sendo tão necessária, e o aluno ainda pode arriscar alguns lances diferentes, realizando movimentos suavemente diferentes, que podem aperfeiçoar sua luta.

Na agilidade, quando um time já executa uma metodologia ágil, o time começa a desenvolver uma maturidade suficiente para se permitir a “quebrar algumas regras”, um exemplo, pular uma Daily porque todos os assuntos estão em andamento e nada de novo está no radar e o assunto foi tratado via e-mail. Ou seja, não existe perda de performance e nada foi prejudicado, por conta da experiência do time é possível flexibilizar algumas regras.

Ri – Extrapolando as regras 

Em RI, o aluno já não precisa racionalizar os movimentos na hora de praticar a arte marcial, todos os movimentos estão nativamente em seu ser, neste ponto onde é possível começar a incorporar novos movimentos de outra arte marcial, ou ainda efetuar a adaptação de movimentos para gerar um novo. É basicamente quando o aluno se torna mestre de si mesmo.

Na agilidade, é onde um time consegue adaptar a metodologia ágil para aumentar a performance, desde a simples remoção de algo que não esteja agregando, ou ainda implementar uma ferramenta proveniente de uma outra metodologia. Ainda no exemplo da Daily, digamos que a equipe decida eliminar as reuniões diárias e substituí-las por um quadro atualizado em tempo real e com indicações de impedimentos. Basicamente cada time já contém experiência suficiente para efetuar adaptações com o foco de aumentar a performance. No conceito Ágil toda equipe deve chegar neste ponto em algum momento.

O próprio Manifesto Ágil (aqui) se define com uma metodologia que se adapta às diferentes realidades e é totalmente flexível para que possa derivar novas formas de trabalho que agregam valor para todos. Aplicando as ordens do Shu-Ha-Ri, poderemos avaliar o estágio da maturidade da agilidade dentro da empresa, para auxiliar as equipes a se tornarem mestre de si mesmo.


Marcelo Goberto de Azevedo 

Arquiteto na GFT Brasil

//marcelogoberto.com.br


domingo, 7 de março de 2021

Mindfulness com Origami

 

Você com certeza já ouviu falar de Mindfulness, esse termo pode ser traduzido de forma livre para “Atenção Plena”, ou seja, é o ato de se concentrar fortemente numa tarefa no momento atual para que você utilize todo o seu potencial para executá-la.

Os benefícios da utilização dessa concentração são vários, entre os principais voltados para área de tecnologia são: mente aberta, confiança, desapego, aceitação e o principal paciência. Estamos vivendo uma época em que somos constantemente bombardeados dos mais diversos estímulos, e caso não tenhamos controle e consciência estaremos sempre se “perdendo” num mar de pensamentos, e sabendo que o pensamento é nossa principal ferramenta de trabalho, é fundamental que possamos ter nossa mente focada para gerar ideias com qualidade.

Existem algumas maneiras de praticar o estado de atenção plena, a mais conhecida é a através da prática de meditação, entretanto num ambiente de trabalho, caso não exista um espaço que ofereça essa possibilidade, fica muito mais difícil. Outra forma é através da respiração cadenciada, ou seja, através do controle da inspiração e expiração podemos induzir o estado, contudo é necessário um tempo longo para completar o ciclo. 

Uma forma bem interessante e simples e que pode ser utilizada em qualquer lugar, hora e ambiente, é executar dobraduras, mais conhecidas como origami. Origami é uma arte milenar japonesa de representar elementos naturais através de dobras em folhas de papel utilizando somente as mãos, sem cortá-la ou colá-la. Quem assistiu a série “La Casa de Papel” deve lembrar que quando o professor entrava em negociação com a polícia, ele pegava uma folha de papel e iniciava a dobradura de origami, isso porque essa ação lhe obrigava a manter a sua mente no momento atual. 

Efetuar a dobradura de um origami pode aumentar nossa atenção plena de forma simples. Iniciar uma dobradura exigirá somente uma folha de papel e pode ser executada em qualquer local e qualquer situação, seja numa reunião, numa palestra, ou em sua mesa. Durante o processo de dobradura sua mente estará sendo "obrigada" a se colocar no momento presente, para executar o próximo passo, com isso ela não consegue escapar para o passado ou futuro.  Todo origami é único, ou seja, isso irá lhe treinar a abandonar o perfeccionismo, a autocrítica ou o autojulgamento. O ato da dobradura pode ser considerado uma micro meditação, porque você está completamente envolto no processo e dentro do aqui e agora. O origami também força a desaceleração, porque o ato de dobrar o papel em formas predeterminadas deve ser feito com paciência e consideração. Por fim, ao final da dobradura você poderá compartilhar com outras pessoas o resultado, tanto o origami, como a forma de fazer, criando assim conexão.

Como iniciar? Simples! Escolha um modelo de origami, eu recomendo um Tsuru, por conta da quantidade de dobras, exigirá de seu cérebro uma concentração maior para lembrar os passos, abaixo vou deixar um passo a passo, execute algumas vezes até decorar os movimentos. Toda vez que você for iniciar uma atividade que precise aumentar sua atenção, inicie a dobradura do origami, naturalmente seu cérebro irá se adaptar após a execução e lhe prover mais potencial em foco na atividade subsequente. E claro, pratique sempre, pois através da repetição o estado gerado pelo Mindfulness será mais facilmente acessado a cada nova sessão.



Marcelo Goberto de Azevedo 

Arquiteto na GFT Brasil

//marcelogoberto.com.br


sábado, 6 de fevereiro de 2021

As Três Leis do TDD

 

Já enumerei as principais razões para utilização da metodologia de Desenvolvimento Orientado a Testes neste artigo (link) e também como praticar em sessões de Coding Dojo neste outro artigo (link), dessa vez quero abortar as leis do TDD (Test Driven Development), essas leis que podemos entender como regras são fáceis de entender e principalmente nos fornecem uma forma simples de validar o que estamos fazendo.

Essas regras foram definidas por Robert C. Martin (Tio Bob), principalmente no intuito de auxiliar no processo de iniciação na utilização da metodologia TDD, essas três regras são mecânicas, você deverá aplicá-las porque irá lhe forçar a escrever código de melhor qualidade e aumentará a facilidade de manutenibilidade.

Lei 1: Você não pode escrever nenhum código fonte, antes de escrever uma especificação de teste que falhe

Isso quer dizer basicamente, o principal e o óbvio para a metodologia, nenhum código pode ser criado, ou classes, ou interfaces, ou seja nada, antes que a especificação do testes seja escrita e falhe, que obviamente irá falhar porque não tem nenhum código para ser validado.

Lei 2: Você não pode escrever mais do que um teste para falhar (e não compilar é falhar)

Muitas vezes já queremos adiantar todas as possíveis soluções e cenários plausíveis para garantir que o que iremos desenvolver irá cobrir os testes e atendendo os resultados esperados, porém esses testes não são testes unitários, são especificação de testes de comportamento, ou seja, você terá que primeiro escrever uma especificação de teste, essa especificação falhará, você então irá codificar para passar no teste e só depois você poderá escrever uma nova especificação de teste para um novo comportamento, dessa forma a cada nova especificação, codificação, estará sendo criado uma pilha de testes que continuaram sendo validados sobre o que está sendo desenvolvimento com qualidade e sem quebras.

Lei 3: Você não pode escrever código fonte mais do que o suficiente para passar no teste que está falhando

Essa talvez seja a regra mais difícil de executar, porque como programador é natural durante o processo de implementação, já tentamos adiantar passos e prever condicionais, situações e comportamentos, porque dessa forma conseguimos escrever códigos que aceleram a implementação final, porém a metodologia nos obriga a dar um passo de cada vez para que possamos ter ciência e principalmente cobertura de todo o processo, com isso fica bem claro que o código fonte que devemos implementar tem que ter o propósito de fazer o teste ser passado e somente isso. Um exemplo básico para ilustrar, caso escreva um teste que precise validar a soma de dois valores (exemplo 1 e 3), sua função deve simplesmente retornar 4, isso fará o teste passar. O motivo por trás disso é forçar você a pensar e dar pequenos passos e ser muito mais produtivo do que tentar codificar em grandes etapas.

Essas três leis podem parecer simples e talvez irão criar um processo moroso inicialmente, entretanto a principal função do TDD é garantir qualidade de código gerado e principalmente cobertura de testes focadas na solução do problema. Ter implementações menores oferecem um poder de concentração maior num único ponto, o que potencializa sua capacidade de resolver o centro do atual problema, com o ponto resolvido, você passa para o próximo e assim até o final. É exatamente para isso que servem essas três leis.


Marcelo Goberto de Azevedo 

Arquiteto na GFT Brasil

//marcelogoberto.com.br