<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Daniel Wildt</title>
    <description>The latest articles on DEV Community by Daniel Wildt (@dwildt).</description>
    <link>https://dev.to/dwildt</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F268514%2F23bb671d-83be-45ab-9f64-8998334143ef.jpeg</url>
      <title>DEV Community: Daniel Wildt</title>
      <link>https://dev.to/dwildt</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/dwildt"/>
    <language>en</language>
    <item>
      <title>Canônico</title>
      <dc:creator>Daniel Wildt</dc:creator>
      <pubDate>Fri, 03 Apr 2026 20:30:58 +0000</pubDate>
      <link>https://dev.to/dwildt/canonico-25n4</link>
      <guid>https://dev.to/dwildt/canonico-25n4</guid>
      <description>&lt;p&gt;Aqui pensando em gramática e jeito de escrever o que fazemos em software.&lt;/p&gt;

&lt;p&gt;Em desenvolvimento de software escrever com padrão sempre foi algo importante e diria que quase obrigatório para uma equipe com pensamento de longo prazo.&lt;/p&gt;

&lt;p&gt;Em diferentes aspectos, não só na formatação do código fonte, mas também como nomear variáveis e diferentes estruturas nomeadas em um código, como testes automatizados e também de modelo de dados.&lt;/p&gt;

&lt;p&gt;Em desenvolvimento de software nos dias atuais, pensar em como fazemos descoberta de um determinado problema e como fazemos construção. No caso de descoberta o que existe de entrada? Documentações, reuniões com clientes (transcrições e desenhos), algum tipo de manual de apoio, relatórios e outras regras de negócio que podem ser usadas como base. E no caso de entrega, todos os padrões que podemos estabelecer para fazer um código fácil de ler, testável e fácil de dar manutenção. &lt;/p&gt;

&lt;p&gt;O canônico neste contexto falo sobre construção que acontece conforme normas mais habituais de uma gramática. Tipo existe um jeito fácil de operar e ser. Existem convenções onde tudo flui. Podemos fazer diferente, mas vai gerar mais trabalho.&lt;/p&gt;

&lt;p&gt;Manutenção, testabilidade e documentação se tornam informações importantes para atuar com agentes de inteligência artificial. A forma de construção de software vai ser executada conforme padrões já definidos e testados anteriormente.&lt;/p&gt;

&lt;p&gt;Estamos em um momento que posso remover o código criado e recriar a partir de uma especificação, sabendo que padrões e que ferramentas serão empregadas para resolver o problema. Se der errado, melhoro a especificação de agentes ou de padrões a serem usados, e construímos novamente. &lt;/p&gt;

&lt;p&gt;O jogo mudou. E existe um jeito fluído de fazer acontecer. Ainda existem muitas opções e formas de criar esta padronização. E isso vai depender de equipe, estrutura de trabalho e padrões que desejamos ter.&lt;/p&gt;

&lt;p&gt;-- Daniel Wildt&lt;/p&gt;

</description>
      <category>ai</category>
    </item>
    <item>
      <title>Template para mensagens de commit</title>
      <dc:creator>Daniel Wildt</dc:creator>
      <pubDate>Sun, 16 Nov 2025 03:49:49 +0000</pubDate>
      <link>https://dev.to/dwildt/template-para-mensagens-de-commit-4pdf</link>
      <guid>https://dev.to/dwildt/template-para-mensagens-de-commit-4pdf</guid>
      <description>&lt;p&gt;Tenho buscado algum tipo de padrão em projetos que tenho criado, mas ao mesmo tempo passo por situações onde estou brincando em projetos diferentes e por vezes testando abordagens diferentes. E não lembro do padrão de mensagem a ser usado.&lt;/p&gt;

&lt;p&gt;Em parte estou sempre buscando usar os "&lt;a href="https://www.conventionalcommits.org/en/v1.0.0-beta.4/#summary" rel="noopener noreferrer"&gt;&lt;em&gt;conventional commits&lt;/em&gt;&lt;/a&gt;" mas pensando em diferentes opções. Ter continuidade é um grande problema. &lt;/p&gt;

&lt;p&gt;Uma coisa que estou adicionando nos meus repositórios é um template de mensagem de commit. &lt;/p&gt;

&lt;p&gt;Exemplo, tenho o arquivo ".gitmessage" no meu repositório, com um conteúdo tipo esse:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;# &amp;lt;tipo&amp;gt;: &amp;lt;descrição curta em português&amp;gt;
# |&amp;lt;----  Máximo 72 caracteres  ----&amp;gt;|

# Corpo da mensagem (opcional)
# |&amp;lt;----   Quebre em 72 caracteres   ----&amp;gt;|

# Rodapé (opcional)
# Ex: Relacionado a #123
# Ex: BREAKING CHANGE: descrição da mudança incompatível


# --- TIPOS DE COMMIT ---
# feat:     Nova funcionalidade
# fix:      Correção de bug
# docs:     Documentação
# test:     Adicionar ou modificar testes
# ci:       Integração contínua
# ui:       Interface do usuário
# perf:     Melhoria de performance
#
# --- REGRAS ---
# ✅ Usar verbo no infinitivo (adicionar, corrigir, atualizar)
# ✅ Primeira linha com até 72 caracteres
# ✅ Ser claro e descritivo
#
# ❌ NÃO usar verbos conjugados (adicionado, corrigido)
# ❌ NÃO terminar com ponto final
# ❌ NÃO ser vago ("fix: ajustes")
#
# --- EXEMPLOS ---
# feat: adicionar cálculo de juros compostos
# fix: corrigir validação de campos numéricos
# docs: atualizar README com instruções de instalação

# --- BREAKING CHANGES ---
# Para mudanças incompatíveis, use ! após o tipo:
# feat!: alterar estrutura de retorno da API
#
# E adicione no rodapé:
# BREAKING CHANGE: descrição detalhada da mudança incompatível
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aí faço a configuração para que na mensagem de commit este template seja usado: &lt;br&gt;
&lt;code&gt;git config commit.template .gitmessage&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Isso para fazer com que esta mensagem padrão (.gitmessage) seja usada neste repositório em questão.&lt;/p&gt;

&lt;p&gt;E aí meu fluxo de trabalho fica assim: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Adiciono os arquivos que vão fazer parte do commit usando &lt;code&gt;git add &amp;lt;arquivo&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Na a hora de adicionar a mensagem, eu simplesmente chamo um "git commit" e vai ser aberto um vim para eu poder editar a mensagem, já tendo a mensagem template para mim.
&lt;/li&gt;
&lt;li&gt;Faço o push, agora garantindo que a mensagem de commit está de acordo.
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;-- Daniel Wildt&lt;/p&gt;

</description>
      <category>git</category>
      <category>github</category>
    </item>
    <item>
      <title>Mensagem de commit?</title>
      <dc:creator>Daniel Wildt</dc:creator>
      <pubDate>Sat, 25 Oct 2025 21:40:43 +0000</pubDate>
      <link>https://dev.to/dwildt/mensagem-de-commit-52o8</link>
      <guid>https://dev.to/dwildt/mensagem-de-commit-52o8</guid>
      <description>&lt;p&gt;Para quem trabalha com Trunk Based Development, pode ser interessante poder olhar a listagem de commits e ter uma visão rápida do que está sendo atualizado na base de código. &lt;/p&gt;

&lt;p&gt;Confesso que nos projetos que acompanho, minha lógica é: explique da forma mais objetiva possível o que é este commit. E claro, no contexto que busco trabalhar, sugiro commits pequenos. E frequentes.&lt;/p&gt;

&lt;p&gt;Se fosse fazer uma decisão rápida, iria para três prefixos nas mensagens de commit: &lt;em&gt;fix&lt;/em&gt;, &lt;em&gt;feat&lt;/em&gt; e &lt;em&gt;docs&lt;/em&gt;. Fix, olhando defeitos sendo corrigidos. Feat, no olhar de novas funcionalidades ou no caso de partes de novas funcionalidades. E docs, na atualização ou construção de documentação. &lt;/p&gt;

&lt;p&gt;Se fosse poder escolher mais duas? Iria de &lt;em&gt;test&lt;/em&gt; e &lt;em&gt;ci&lt;/em&gt;. Test para indicar melhorias em testes, seja unitários, funcionais ou desempenho. E ci indicando tudo que poderia ser relacionado com melhoria do ciclo de deploy, validações, ferramentas de auditoria, build e deploy.&lt;/p&gt;

&lt;p&gt;Agora, dá para ir bem mais longe. Antes de trazer mais exemplos de prefixos da indústria, deixo um exemplo de uma mensagem que poderia ser usada em um commit. Nos projetos pessoais, tenho usado esta: &lt;/p&gt;

&lt;p&gt;&lt;code&gt;feat: descrição rápida da funcionalidade closes #2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O meu próximo movimento é adicionar o módulo, pois os projetos vão ficar maiores. Assim consigo posicionar em que parte do código estou evoluindo.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;feat(modulo): descrição rápida da funcionalidade closes #2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Agora, dependendo do que você prefere usar, dá para ir mais longe nas mensagens, exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;feat(modulo): descrição rápida da funcionalidade

descrição mais completa da funcionalidade que foi desenvolvida.

closes #2
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesta estrutura foca o cabeçalho com o tipo, módulo e descrição rápida. O corpo com a mensagem complementar. E o rodapé com a informação de fechamento de uma issue. Poderia também usar no rodapé "BREAKING CHANGE: explicação".  &lt;/p&gt;

&lt;p&gt;Para entender as opções de tipos de commits, a sugestão é usar como base os &lt;a href="https://www.conventionalcommits.org/en/v1.0.0-beta.4/#summary" rel="noopener noreferrer"&gt;conventional commmits&lt;/a&gt;. Estas convenções são diretamente inspiradas nas &lt;a href="https://github.com/angular/angular/blob/main/contributing-docs/commit-message-guidelines.md" rel="noopener noreferrer"&gt;convenções de contribuição do projeto Angular&lt;/a&gt;. Lá vão aparecer outras estruturas mais específicas, como build, perf e refactor.  &lt;/p&gt;

&lt;p&gt;Nos tipos de commit ainda dá para usar o "!" para indicar que está acontecendo uma "breaking change". Uma mudança que normalmente pode impactar o processo de atualização de sistemas. Como tenho preferido usar as mensagens mais curtas, vou pensar no uso de "!".&lt;/p&gt;

&lt;p&gt;Que padrões fazem sentido nos seus projetos?  &lt;/p&gt;

&lt;p&gt;-- Daniel Wildt&lt;/p&gt;

&lt;p&gt;P.S.: se você usa ferramentas para apoiar em ações de código, você pode ensinar estas ferramentas sobre os padrões a serem usados. E para padronizar nas equipes, se pode construir gatilhos para validar se a mensagem sendo usada na mensagem de commit segue o padrão esperado.&lt;/p&gt;

</description>
      <category>git</category>
      <category>commit</category>
    </item>
    <item>
      <title>Copiar só parte de um repositório</title>
      <dc:creator>Daniel Wildt</dc:creator>
      <pubDate>Tue, 02 Sep 2025 13:13:42 +0000</pubDate>
      <link>https://dev.to/dwildt/copiar-so-parte-de-um-repositorio-3b3b</link>
      <guid>https://dev.to/dwildt/copiar-so-parte-de-um-repositorio-3b3b</guid>
      <description>&lt;p&gt;Estava fazendo umas provas de conceito e queria iniciar um novo projeto a partir de uma parte de um repositório. &lt;/p&gt;

&lt;p&gt;Copiar a pasta simplesmente vai trazer histórico e arquivos de controle git que eu não tenho interesse em trazer. &lt;/p&gt;

&lt;p&gt;Temos algumas opções. Uma manual e outra usando o mesmo comando via terminal. Estou usando como exemplo um &lt;a href="https://github.com/dwildt/gosandbox/" rel="noopener noreferrer"&gt;repositório que tenho para estudar algumas coisas de golang&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Meu objetivo é pegar um conteúdo de um dos testes, chamado "vibe-certificados" e criar um repositório novo só para este projeto. &lt;/p&gt;

&lt;p&gt;Vamos aos caminhos possíveis.&lt;/p&gt;

&lt;h2&gt;
  
  
  Manual
&lt;/h2&gt;

&lt;p&gt;Em qualquer repositório no github a gente consegue fazer download do conteúdo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsuejn5c78r2np96e8amx.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fsuejn5c78r2np96e8amx.png" alt="imagem do github mostrando opção para baixar código em zip" width="800" height="598"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com isso, depois eu vou descompactar o arquivo zip e copio o que preciso para dentro do novo repositório git e estou pronto para seguir. &lt;/p&gt;

&lt;h2&gt;
  
  
  Git Archive
&lt;/h2&gt;

&lt;p&gt;Existe um comando via terminal (&lt;a href="https://git-scm.com/docs/git-archive" rel="noopener noreferrer"&gt;git archive&lt;/a&gt;) que podemos fazer para justamente realizar a mesma operação em um repositório git. Aí a forma de conectar depende se seu projeto usa https ou ssh. &lt;/p&gt;

&lt;p&gt;O comando recebe um dos remotes, o branch que quero usar, um caminho e já indica que na saída, quero gerar um arquivo tar (compactado).&lt;/p&gt;

&lt;p&gt;https:&lt;br&gt;
&lt;code&gt;git archive --remote=https://github.com/dwildt/gosandbox.git main vibe-certificados | tar -x&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;ssh:&lt;br&gt;
&lt;code&gt;git archive --remote=git@github.com:dwildt/gosandbox.git main vibe-certificados | tar -x&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Via curl
&lt;/h2&gt;

&lt;p&gt;&lt;code&gt;curl -L https://github.com/dwildt/gosandbox/archive/main.tar.gz | tar -xz --strip-components=1 gosandbox-main/vibe-certificados&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Como o repositório está público, esse comando vai funcionar tranquilamente. E dependendo do que se quer fazer, pode ser mais simples mesmo.&lt;/p&gt;

&lt;p&gt;Estou em alguns casos criando alguns templates. Seja de arquivos de configuração ou templates de projetos para iniciar algo de forma mais rápida. &lt;/p&gt;

&lt;p&gt;-- Daniel Wildt&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Cada equipe tem a sua história e seu caminho. Onde possível, compartilhe.</title>
      <dc:creator>Daniel Wildt</dc:creator>
      <pubDate>Fri, 20 Jun 2025 04:09:17 +0000</pubDate>
      <link>https://dev.to/umovme/cada-equipe-tem-a-sua-historia-e-seu-caminho-onde-possivel-compartilhe-4c2n</link>
      <guid>https://dev.to/umovme/cada-equipe-tem-a-sua-historia-e-seu-caminho-onde-possivel-compartilhe-4c2n</guid>
      <description>&lt;p&gt;Quais práticas estão padronizadas na sua equipe? Quais práticas são compartilhadas entre todas equipes? Quais problemas existem hoje na estrutura da equipe? Quais serão as próximas práticas a serem adotadas?&lt;/p&gt;

&lt;p&gt;Cada equipe minimamente deve saber falar sobre três itens:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;reabastecimento&lt;/li&gt;
&lt;li&gt;sincronia&lt;/li&gt;
&lt;li&gt;melhoria&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O &lt;strong&gt;reabastecimento&lt;/strong&gt; fala sobre priorização e o olhar de conexão de negócio e evoluções técnicas internas. A &lt;strong&gt;sincronia&lt;/strong&gt; envolve alinhamento, das pessoas saberem onde estão e o que está “pegando” com a equipe. Pode ser uma reunião online, atualizações em algum canal de comunicação, como a equipe resolver se organizar. E também &lt;strong&gt;melhoria&lt;/strong&gt;, com alguma cerimônia onde a equipe reflete sobre como está trabalhando e sobre como pode melhorar, seja em questões técnicas ou em processos de trabalho.&lt;/p&gt;

&lt;p&gt;A partir disso, as equipes devem entender como vão tratar as diferentes partes do fluxo: &lt;strong&gt;priorização&lt;/strong&gt; de trabalho, &lt;strong&gt;análise de negócios&lt;/strong&gt; pensando em artefatos e técnicas de &lt;strong&gt;fatiamento de trabalho e cadências&lt;/strong&gt;, estratégias de &lt;strong&gt;arquitetura e design&lt;/strong&gt;, estratégias de &lt;strong&gt;automação de testes e pipelines&lt;/strong&gt; de entrega, formas de &lt;strong&gt;validação e revisão&lt;/strong&gt; do trabalho realizado e além disso a &lt;strong&gt;liberação de funcionalidades&lt;/strong&gt; (deploy é diferente de release) para clientes além de entender como o trabalho realizado deve ser &lt;strong&gt;medido&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Aí entram ferramentas de apoio para medição de &lt;strong&gt;desempenho&lt;/strong&gt;, &lt;strong&gt;carga&lt;/strong&gt; e outras variáveis de negócio que podem entender sobre a saúde do sistema e do trabalho entregue. Fora isso, ainda existem as preocupações de como a equipe faz para trabalhar com &lt;strong&gt;feedbacks&lt;/strong&gt; e processos de &lt;strong&gt;escuta&lt;/strong&gt;, além das estratégias de &lt;strong&gt;aprendizagem&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Entender o funcionamento de uma equipe, independente do tamanho, é algo que pode ser complicado, mas pode ter padrões e expectativas. E o principal: pode ser desafiado, melhorado e aperfeiçoado.&lt;/p&gt;

&lt;p&gt;Existe algo que seja comum para todas as equipes? A necessidade de entregar valor, de entregar com frequência, de entregar com qualidade. É uma tarefa de equipe, de responsabilidade individual e coletiva. A equipe deve se importar com o trabalho em andamento e com o trabalho que precisa ser terminado. Lembrar que terminar o que está em andamento é mais importante que iniciar novo trabalho. Ainda mais considerando que o que está em andamento é o trabalho priorizado.&lt;/p&gt;

&lt;p&gt;— Daniel Wildt&lt;/p&gt;

&lt;p&gt;P.S.: Esse texto faz parte de um handbook que venho documentando faz alguns meses, sobre o que aconteceu na equipe da uMovme desde 2009. Aprendendo e refletindo sobre os diferentes caminhos que a equipe já percorreu, e trazendo aquilo que emerge e persiste no funcionamento das equipes. Esse handbook está se tornando um conjunto de princípios e práticas que a equipe reconhece e desafia no seu trabalho diário.&lt;/p&gt;

&lt;p&gt;P.S.2: Foto do artigo, &lt;a href="https://flic.kr/p/5Hd8PH" rel="noopener noreferrer"&gt;Paths, de Simon Clayson&lt;/a&gt; (via Flickr, licença Creative Commons).&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Crescimento profissional e a cultura de aprendizagem.</title>
      <dc:creator>Daniel Wildt</dc:creator>
      <pubDate>Fri, 12 Jul 2024 17:09:06 +0000</pubDate>
      <link>https://dev.to/umovme/crescimento-profissional-e-a-cultura-de-aprendizagem-k4j</link>
      <guid>https://dev.to/umovme/crescimento-profissional-e-a-cultura-de-aprendizagem-k4j</guid>
      <description>&lt;p&gt;&lt;em&gt;Contexto: texto escrito em 2022&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Em 2009 eu inicio uma nova jornada. Apoiar na transformação de uma empresa baseada em projetos e diversos nichos, para uma empresa de produto, construindo um produto (que virou uma plataforma) para embarcar estes nichos.&lt;/p&gt;

&lt;p&gt;A jornada nunca é simples quando estamos mudando o foco de serviço para produto. A cobrança não é mais baseada em simplesmente horas de serviço e suporte ao que é entregue. Não é mais simplesmente crescer em clientes, com novos projetos. Trabalhar com produtos envolve encontrar o tal encaixe (&lt;em&gt;"fit"&lt;/em&gt;) entre produto e mercado. Ganhamos a oportunidade de pensar em algumas coisas com mais força. Exemplo, aprender como &lt;a href="https://youtu.be/VgwWtoqgvXI" rel="noopener noreferrer"&gt;posicionar o produto no mercado&lt;/a&gt;. E não aceitar mais simplesmente "tirar pedidos" ou "fritar pastéis" para adequar a necessidade de clientes com o projeto contratado. &lt;/p&gt;

&lt;p&gt;Eu entendi na época que eu precisava construir um perfil de produto, já que meu foco dos 13 anos anteriores era focado em serviços e projetos e consultoria. Também entendi que não teria chance de fazer isso, se não tivesse uma &lt;a href="https://blog.danielwildt.com/pt-criando-um-ambiente-de-aprendizado/" rel="noopener noreferrer"&gt;equipe em aprendizado constante&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;Construir projetos baseados no puro interesse de um cliente ainda exige pensamento de priorização e entendimento de como fatiar entregas, mas quem define o alvo está dentro do projeto. Não é o caso do pensamento quando estamos atuando com produto. Vamos descobrir ao longo do tempo clientes importantes, que podemos entrevistar e aprender mais e mais sobre o mercado que eles vivem. Clientes que nos inspiram no jogo de entrega de valor. Só que no final do dia, a atividade de aprendizagem sobre o que fazemos e sobre o que queremos melhorar é nossa responsabilidade. &lt;/p&gt;

&lt;p&gt;No caso do pensamento de produto, a construção do futuro do produto precisa de aprendizagem. Viveremos constantemente um pensamento entre certezas, suposições e dúvidas, que serão constantemente desafiadas e atuam na nossa &lt;a href="https://blog.danielwildt.com/incerteza-e-melhoria/" rel="noopener noreferrer"&gt;convivência com a incerteza&lt;/a&gt;. Precisa de uma equipe constantemente questionando como pode fazer o que faz melhor. Envolve entender este processo tanto tecnicamente como em processos para evolução do produto. Isso conecta com foco de mercado, entendimento de negócios. &lt;/p&gt;

&lt;p&gt;Pensei em listar aqui atividades que considerei importante ao longo de 2009 até 2022 nesse pensamento de construção de culturas de aprendizagem, que eu considero como sendo uma das minhas habilidades. E também indicando práticas ligadas com o pensamento de evolução e aprendizado técnico, importante neste jogo de produto. &lt;/p&gt;

&lt;h2&gt;
  
  
  Em abril/2009 DevOps e Lean Startup estavam nascendo
&lt;/h2&gt;

&lt;p&gt;Eu sabia que falhar o mais rápido possível e aprender mais rápido ainda era uma das únicas oportunidades que tinha neste processo de evoluir equipes e produtos. Criar uma estrutura de apoio para a melhoria, com retrospectivas, espaços técnicos para a equipe se desafiar, também. &lt;/p&gt;

&lt;p&gt;Já tinha aprendido também com o meu aprendizado sobre &lt;a href="https://www.slideshare.net/dwildt/conhecendo-o-extreme-programming/dwildt/conhecendo-o-extreme-programming" rel="noopener noreferrer"&gt;eXtreme Programming&lt;/a&gt;, que automação de testes ajudaria a equipe a conseguir evoluir constantemente garantindo a tal coragem necessária para modificar código e saber que ele vai quebrar se algo não estiver ok. &lt;/p&gt;

&lt;p&gt;Pelo pensamento Lean, eu sabia que precisava melhorar, encontrar maneiras mais fáceis de produzir software e garantir que uma equipe conseguiria dar manutenção e ensinar pessoas novas a fazer o mesmo. &lt;/p&gt;

&lt;p&gt;Também sabia que &lt;a href="https://www.slideshare.net/dwildt/no-espere-192007540" rel="noopener noreferrer"&gt;atuar no desperdício da espera&lt;/a&gt; era o meu grande trunfo. Se eu melhorar os tempos de repasse de trabalho nas equipes, consigo aumentar o desempenho delas em muitas vezes. &lt;/p&gt;

&lt;p&gt;Em abril de 2009, Eric Ries já tinha cunhado o termo Lean Startup, unindo Lean Thinking + eXtreme Programming + Customer Discovery/Customer Development. &lt;/p&gt;

&lt;p&gt;Em 2009 uma palestra chama muita atenção, de uma empresa que eu acompanhava desde o ano anterior. O Flickr tinha uma estrutura no blog de código onde avisavam o que estava acontecendo com relação a updates de código e quem estava fazendo isso. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs6ntkg8go8hpnj1ap3mg.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fs6ntkg8go8hpnj1ap3mg.png" alt="flickr fazendo muitos deploys por dia" width="800" height="239"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Eu já era fã fazia tempo e mantinha umas imagens desta época (confesso que elas estavam em uma pasta esquecida, mas eu não tinha esquecido) &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e1ssme0royv7id8nxat.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5e1ssme0royv7id8nxat.png" alt="onde estava a imagem do flickr no meu computador" width="800" height="46"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Essa palestra, apresentada em junho no Velocity 2009, trouxe uma visão para o mainstream do desenvolvimento de software sobre a nossa capacidade de poder entregar software em produção de forma frequente. &lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/LdOe18KhtT4"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;Acho interessante que muitas revoluções relacionadas com a engenharia de software aconteceram em empresas que tiveram reviravoltas com o sucesso. O Flickr passou por diversas jornadas, desde aquisição do Yahoo e depois passando por dificuldades e demissões, até hoje em dia ser um produto em busca de significado. Particularmente gosto do serviço e sou assinante faz algum tempo. &lt;/p&gt;

&lt;p&gt;Estes movimentos inspiraram diversas empresas e aqui no Brasil posso dizer que fui bastante influenciado por este tipo de movimento. Deploy contínuo era algo impossível de ser alcançado.&lt;/p&gt;

&lt;h2&gt;
  
  
  Antes da primeira linha de código, tenha princípios!
&lt;/h2&gt;

&lt;p&gt;Desde cedo eu tinha consciência de alguns princípios que precisava colocar em funcionamento. Alguns relacionados a evolução de código fonte para produção e organização de como podemos gerar valor para clientes. &lt;/p&gt;

&lt;p&gt;Eu não tinha dinheiro para contratar uma equipe altamente experiente. Eu precisava compor a equipe existente, aprender novas linguagens de programação ou expandir o uso das linguagens existentes. O mesmo com as práticas de engenharia de software. Sabia o que não queria, no caso de construir um produto no estilo plataforma. E somava nisso todos aprendizados que tive no meu passado mantendo códigos de 10+ anos nos dias atuais. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Testes automatizados, e para quem conseguir, desenvolvimento orientado a testes. Desde muito cedo comecei a trabalhar sessões de Coding Dojo, trazendo para as equipes o ritmo de codificar, evoluir e aprender sobre como modelar cenários de teste. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Trunk Based Development, que muito rapidamente envolve permitir que uma base de código possa ser levada para produção quando for de interesse da equipe. E para que isso possa acontecer precisamos garantir que o código "acordado" esteja com testes passando e o código "dormindo" esteja configurado de forma adequada para não afetar o comportamento de produção. Pensa que nesta época ainda não usávamos sistemas como Git, mas mesmo sendo git eu sigo operando no modelo TBD. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O sistema vai cair. Então como organizamos para que saibamos o que precisa funcionar e como podemos colocar para funcionar.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O sistema pode evoluir sem depender do banco de dados. Muito cedo começamos a aplicar Database refactoring, para garantir que eu poderia evoluir o modelo de dados sem depender da sincronia de instalação de código novo. O mesmo valeria para uma necessidade de rollback de um módulo. &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O rollback precisava ser rápido, muito mais rápido que o tempo de instalação. Rollback é só mais uma instalação (deploy).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Uma instalação de código não é igual features novas para clientes. Importante ter uma estrutura de toggles, para habilitar que um cliente tivesse acesso a uma determinada funcionalidade antes de outros clientes, para fins de testes.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;O cliente não tem acesso a um ambiente de testes. O teste é em produção. Assim como a bateria de testes chegava em um ambiente de produção, os clientes validavam uma funcionalidade também em produção, no seu próprio ambiente. &lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Alguns destes princípios levaram bons anos para entrar no fluxo da equipe. Mesmo hoje em 2022 ainda preciso explicar os benefícios de trabalhar com TBD para uma equipe que quer avançar e evoluir código. Assim como preciso ainda explicar os valores do manifesto ágil, sobre a importância de comunicação, de entregar software, de adaptar e manter contato próximo com quem demanda novas evoluções de um produto de software. Sempre lembrando que a coisa mais importante é maximizar o trabalho que não precisa ser feito, a tal simplicidade. &lt;/p&gt;

&lt;h2&gt;
  
  
  O caminho para a cultura de aprendizagem?
&lt;/h2&gt;

&lt;p&gt;Momentos de aprendizagem, por todos os lados. O aprendizado "&lt;em&gt;on the job&lt;/em&gt;", na prática, também. Isso vai desde o processo seletivo até o dia a dia evoluindo alguma funcionalidade de produto. &lt;/p&gt;

&lt;p&gt;Se for resumir a base deste processo, é poder operar em dois materiais importantíssimos de Nonaka e Takeuchi: &lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Transformar conhecimento tácito em conhecimento explícito. &lt;/li&gt;
&lt;li&gt;Entender o novo jogo para desenvolvimento de produtos. &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Relaciono aqui alguns destes momentos que considero importantes e relevantes para este processo de construção de conhecimento. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Coding Dojo.&lt;/li&gt;
&lt;li&gt;Treinamentos internos, palestras e rodas de conversa. &lt;/li&gt;
&lt;li&gt;Ambiente de infraestrutura não adequado. &lt;/li&gt;
&lt;li&gt;Automação de infra e escala.&lt;/li&gt;
&lt;li&gt;Espaços de aprendizagem, criando eventos.&lt;/li&gt;
&lt;li&gt;Processo seletivo com toda a equipe. &lt;/li&gt;
&lt;li&gt;Operar de forma multimídia, com textos, áudio (podcast na época da trevisan), vídeo &lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  O que mudou nisso tudo em 2022?
&lt;/h2&gt;

&lt;p&gt;Muita coisa. Isso falando no problema de formação de pessoas. Vivemos em um mundo cada vez mais desigual. Se queremos um mundo diferente, precisamos ser intencionais. &lt;/p&gt;

&lt;p&gt;Isso inclui remover barreiras para conhecer pessoas. Muitas empresas ainda falam sobre suas estratégias para contratar pessoas somente de melhores universidades do Brasil, pessoas em universidades e esquecem da infinidade de pessoas excelentes em cursos técnicos e pessoas que estão na prática mas não participam de processos de educação formal. &lt;/p&gt;

&lt;p&gt;As empresas precisam conectar com comunidades de tecnologia e apoiar onde puderem, patrocinando eventos para unir as pessoas, criando espaços, oferecendo tempo das suas pessoas para palestras e mentorias. As oportunidades são diversas. &lt;/p&gt;

&lt;p&gt;E não tente ser a melhor ou a única iniciativa. &lt;/p&gt;

&lt;p&gt;Não importa quantas iniciativas sejam criadas sobre aprendizagem e formação de pessoas. Nenhuma delas vai ser suficiente. &lt;/p&gt;

&lt;p&gt;Em 2010 o problema já era grande. Em 2022 o problema aumentou de tamanho. E agora está afetando empresas que nem pensavam que esse seria um problema lá em 2010. &lt;/p&gt;

&lt;p&gt;O que eu ainda considero que pode nos ajudar, como indústria de tecnologia Brasileira, é operar em uma cultura de aprendizagem, para dentro e para fora das empresas, chegando em instituições de ensino, comunidades e outras empresas. &lt;/p&gt;

&lt;p&gt;-- Daniel Wildt&lt;/p&gt;

</description>
      <category>culture</category>
      <category>braziliandevs</category>
      <category>agile</category>
      <category>startup</category>
    </item>
    <item>
      <title>Responsible Services</title>
      <dc:creator>Daniel Wildt</dc:creator>
      <pubDate>Sun, 19 May 2024 15:51:59 +0000</pubDate>
      <link>https://dev.to/dwildt/responsible-services-1cmb</link>
      <guid>https://dev.to/dwildt/responsible-services-1cmb</guid>
      <description>&lt;p&gt;I don’t like to use the word accountable when I’m talking in Portuguese. I try to make the word responsible do that work. But… in system and software design I see the word accountable important to make a point.&lt;/p&gt;

&lt;p&gt;Usually every system starts with a big giant module that serves webrequests and delivers pages and APIs.&lt;/p&gt;

&lt;p&gt;When we are growing, there are parts of the system that will need to respond faster and would need more characteristics of resilience.&lt;/p&gt;

&lt;p&gt;Thinking of that, the first split I would run into a system already in production would be that. I split and then I can scale a specific part.&lt;/p&gt;

&lt;p&gt;When doing that, the number of requests may also ask for asynchronous communication in some of the operations. We are going to understand the cost of some components. We are going to need a readonly data store. Or a cache system. That will help us to serve information, even knowing it can be a little bit outdated.&lt;/p&gt;

&lt;p&gt;If you are building a system that works like a workflow, map it as a workflow, and you can use queues for producer/consumer structures to make sure you are doing the correct handoff.&lt;/p&gt;

&lt;p&gt;If you break because of a non functional requirement, you will be fine. You have the data, you have the understanding of why you split a service in the first place. We are going to talk about requests per second, concurrent active users and metrics that will make us think about split, cache, async, background processing and things like that.&lt;/p&gt;

&lt;p&gt;That’s just our systems growing and at the same time, we thinking about ways to not spend a lot of money (&lt;em&gt;because that’s always an option if the money is not yours&lt;/em&gt; 🫠).&lt;/p&gt;

&lt;p&gt;What we don’t want:&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/y8OnoxKotPQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;If you are modeling a system, think about how people will be able to maintain all those modules and think about structures that will enable troubleshooting when needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Logs (make sure you have an unique ID where you can follow an item through your workflow)
&lt;/li&gt;
&lt;li&gt;Audit (who changed what and when and where) so you can understand policies break or even some sort of fraud.
And all those items I added up are sort of a journey, a process. Most systems are lacking some part of it, or need enhancements. That’s ok. The important thing is to understand that something is missing.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-- Daniel Wildt&lt;/p&gt;

&lt;p&gt;P.S.: There are structures like &lt;a href="https://12factor.net/"&gt;12 factor apps&lt;/a&gt;. There are performance and load tests, that will help you understand fragile parts of your system. Make use of them. Prepare for the worst. Understand when you are going to focus on some part of your system (considering you are a normal human + copilot team where you don’t have all the time you need).&lt;/p&gt;

&lt;p&gt;Consider to follow, engage and sponsor my writing journey. Check my project at &lt;a href="https://patreon.com/dwildt"&gt;patreon.com/dwildt&lt;/a&gt; and become part of my special audience!&lt;/p&gt;

</description>
      <category>systemdesign</category>
      <category>architecture</category>
    </item>
    <item>
      <title>How To Feel Safe While Modifying Code?</title>
      <dc:creator>Daniel Wildt</dc:creator>
      <pubDate>Wed, 08 May 2024 02:08:05 +0000</pubDate>
      <link>https://dev.to/dwildt/how-to-feel-safe-while-modifying-code-4dak</link>
      <guid>https://dev.to/dwildt/how-to-feel-safe-while-modifying-code-4dak</guid>
      <description>&lt;p&gt;Every time someone is updating a codebase, there’s this old saying from eXtreme Programming that we are doing it with value of courage.&lt;/p&gt;

&lt;p&gt;But that’s not just guts to do something.&lt;/p&gt;

&lt;p&gt;And by the way, the safe way of modifying code is finding ways to not modify the code. 🫠&lt;/p&gt;

&lt;p&gt;If that’s not the case, let’s continue.&lt;/p&gt;

&lt;p&gt;The courage comes from safety. The understanding that we have a set of automated tests that works as a safety net.&lt;/p&gt;

&lt;p&gt;I modify existing code adding a new scenario that will fail when I run it against the codebase. If it gets red, I’m free to change the behavior. When I do it correctly, I will get a green with tests passing again. Now I’m free to refactor and change structure, without changing the behavior.&lt;/p&gt;

&lt;p&gt;It’s pure Test Driven Development (TDD) red-green-refactor cycle.&lt;/p&gt;

&lt;p&gt;This is also a cycle that gives me courage to keep going, if I need to add new business rules to the current code.&lt;/p&gt;

&lt;p&gt;But, what if there’s no automated tests in place?&lt;/p&gt;

&lt;p&gt;We can create a “&lt;em&gt;thin ice&lt;/em&gt;” like set of tests, just to help us in the process. We can also look for a pair programming session with someone who knows about the codebase.&lt;/p&gt;

&lt;p&gt;Maybe an exploratory test session can help us understand how the addition will affect other parts of the system, since we only have a small part of the system covered with automated tests.&lt;/p&gt;

&lt;p&gt;Make sure you are also adding lints and other code audit tools to help you understand about code health. Tools like &lt;a href="https://drtools.site/"&gt;drTools&lt;/a&gt; or &lt;a href="https://www.sokrates.dev/"&gt;Sokrates&lt;/a&gt; can help us a lot, depending on the programming language in use.&lt;/p&gt;

&lt;p&gt;-- Daniel Wildt&lt;/p&gt;

</description>
      <category>tdd</category>
      <category>agile</category>
      <category>extremeprogramming</category>
    </item>
    <item>
      <title>xcrun: Error: Invalid Active Developer Path?</title>
      <dc:creator>Daniel Wildt</dc:creator>
      <pubDate>Fri, 26 Apr 2024 01:32:41 +0000</pubDate>
      <link>https://dev.to/dwildt/xcrun-error-invalid-active-developer-path-3p8g</link>
      <guid>https://dev.to/dwildt/xcrun-error-invalid-active-developer-path-3p8g</guid>
      <description>&lt;p&gt;It’s &lt;em&gt;xcrun&lt;/em&gt; not &lt;em&gt;scrum&lt;/em&gt;… but some people will say both are not good things to come across in life. 😛&lt;/p&gt;

&lt;p&gt;Well, after you update your Mac OS this error may show up when you try to use git:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun at: /Library/Developer/CommandLineTools/usr/bin/xcrun&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;The way to solve this problem is to run the command to install command line tools:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;xcode-select --install&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;-- Daniel Wildt&lt;/p&gt;

</description>
      <category>git</category>
      <category>macos</category>
    </item>
    <item>
      <title>Filters to never forget on github (using dates)</title>
      <dc:creator>Daniel Wildt</dc:creator>
      <pubDate>Tue, 12 Mar 2024 13:45:07 +0000</pubDate>
      <link>https://dev.to/dwildt/filters-to-never-forget-on-github-using-dates-3lfn</link>
      <guid>https://dev.to/dwildt/filters-to-never-forget-on-github-using-dates-3lfn</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzjtcytj2ctc4vhtwsmu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhzjtcytj2ctc4vhtwsmu.png" alt="Image description" width="800" height="98"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I'm working on github, sometimes I'm analyzing issues and looking for specific dates.&lt;/p&gt;

&lt;p&gt;And I keep going back to then documentation to remember how to run filters, or I use some saved URLs I have on my computer. But last time I needed this I was not in my computer and well, that's the trigger to create a blog post so I can't forget how to make date filters using github. &lt;/p&gt;

&lt;p&gt;To see issues created on March 1st, 2024: &lt;br&gt;
&lt;code&gt;created:2024-03-01&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;To see issues created after March 1st, 2024: &lt;br&gt;
&lt;code&gt;created:&amp;gt;=2024-03-01&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;We can use &lt;code&gt;&amp;gt;&lt;/code&gt;, &lt;code&gt;&amp;lt;&lt;/code&gt;, &lt;code&gt;&amp;lt;=&lt;/code&gt;, &lt;code&gt;&amp;gt;=&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;I then, I got a problem. I've wanted to see issues created during February 2024. We can use &lt;code&gt;..&lt;/code&gt; to set a "between":&lt;br&gt;
&lt;code&gt;created:2024-02-01..2024-02-29&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;I'm using &lt;code&gt;created&lt;/code&gt;, but I can also use other parameters like &lt;code&gt;updated&lt;/code&gt; and &lt;code&gt;closed&lt;/code&gt; where it's possible to filter issue dates. &lt;/p&gt;

&lt;p&gt;In the example I'm running now, if I need open issues from February, this is the filter: &lt;br&gt;
&lt;code&gt;is:issue is:open created:2024-02-01..2024-02-29&lt;/code&gt; &lt;/p&gt;

&lt;p&gt;Remember that this can also go to the URL:&lt;br&gt;
&lt;code&gt;https://github.com/&amp;lt;ORG&amp;gt;/&amp;lt;REPO&amp;gt;/issues?q=is:issue is:open created:2024-02-01..2024-02-29&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Let's go! &lt;/p&gt;

&lt;p&gt;-- Daniel Wildt&lt;/p&gt;

</description>
      <category>github</category>
    </item>
    <item>
      <title>Articles to read - Week 34/2023</title>
      <dc:creator>Daniel Wildt</dc:creator>
      <pubDate>Thu, 24 Aug 2023 20:16:48 +0000</pubDate>
      <link>https://dev.to/dwildt/articles-to-read-week-342023-7h1</link>
      <guid>https://dev.to/dwildt/articles-to-read-week-342023-7h1</guid>
      <description>&lt;p&gt;Here are some of the articles I've read and want to keep track.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;You have logs, I guess. How can you understand what's happening? &lt;a href="https://basta.substack.com/p/read-every-error-you-cant-read-every"&gt;Read every error. You can't read every error&lt;/a&gt; -- &lt;a href="https://substack.com/@basta"&gt;Matt Basta&lt;/a&gt;  &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Have you ever heard about &lt;a href="https://www.cloudflare.com/learning/access-management/role-based-access-control-rbac/"&gt;RBAC x ABAC&lt;/a&gt;? I was trying to understand how to play with different roles or access level when building information systems. Do you use any framework that helps when configuring or building this in your systems? Please share! &lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;You are a software developer like me, right? Do you develop products and maintain and keep all happening with security standards? I was reading more about CISO e security topics. &lt;a href="https://www.digitalguardian.com/blog/ciso%E2%80%99s-guide-data-loss-prevention-dlp-strategy-tips-quick-wins-and-myths-avoid"&gt;The CISO’s Guide to Data Loss Prevention: DLP Strategy Tips, Quick Wins, and Myths to Avoid&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;How can we move to a place where we are able to evolve as we are learning from our practice and our principles and values? &lt;a href="https://www.industriallogic.com/blog/prescriptive-agile-stuck-in-shu/"&gt;Prescriptive Agile / Stuck in Shu&lt;/a&gt;.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;-- Daniel Wildt&lt;/p&gt;

&lt;p&gt;P.S.: If you would like to suggest articles for me, please feel free to do it!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>architecture</category>
    </item>
    <item>
      <title>Oooops... errei no git. </title>
      <dc:creator>Daniel Wildt</dc:creator>
      <pubDate>Mon, 07 Dec 2020 16:05:54 +0000</pubDate>
      <link>https://dev.to/dwildt/oooops-errei-no-git-apm</link>
      <guid>https://dev.to/dwildt/oooops-errei-no-git-apm</guid>
      <description>&lt;p&gt;Por vezes a gente erra operando os comandos do git. Aqui relaciono algumas situações que passei e estou documentando aqui para eu me lembrar sobre o que fazer quando errar novamente. :P&lt;/p&gt;

&lt;h2&gt;
  
  
  Errei a mensagem do commit!
&lt;/h2&gt;

&lt;p&gt;É o uso do amend. Imagina que você fez um commit e deixou um typo na mensagem. Neste caso a gente manda um novo commit indicando &lt;code&gt;--amend&lt;/code&gt; e indicando a nova mensagem usando -m. Estrutura do comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git commit --amend -m "nova mensagem"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Adicionei arquivos errados!
&lt;/h2&gt;

&lt;p&gt;Aqui imaginando que você fez git add mas acabou adicionando arquivos que não deveria ter adicionado e se ligou só depois de fazer o commit. Você consegue desfazer este commit e deixar os arquivos modificados usando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;git reset --soft HEAD~1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este &lt;code&gt;--soft&lt;/code&gt; é muito importante. Ele que indica que os arquivos ficam localmente modificados.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DICA/CUIDADO 1:&lt;/strong&gt; se você usar &lt;code&gt;--hard&lt;/code&gt; você não só desfaz o commit como ainda volta os arquivos para o estado original. Este tipo de comando eu utilizo quando estou brincando com baby steps game em um coding dojo, e depois de passar o tempo do ciclo, todo código que não foi feito push precisa voltar para o estado original do início do ciclo.  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DICA/CUIDADO 2:&lt;/strong&gt; se ao invés de indicar &lt;code&gt;HEAD~1&lt;/code&gt; você identificar um ID de commit, exemplo "Commit1", o git vai voltar para este commit no seu tempo e todos os commits a frente (Commit2 e Commit3) vão se perder. Então exige bastante cuidado (e um bom motivo :P) estas voltas na linha do tempo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Commit1 -&amp;gt; Commit2 -&amp;gt; Commit3 | main/HEAD
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Quais comandos você já precisou para salvar o seu dia por aí? :P&lt;/p&gt;

&lt;p&gt;-- Daniel Wildt&lt;/p&gt;

&lt;p&gt;P.S.: querendo uma dica de FAQ de git? Olha por exemplo o &lt;a href="https://www.git-tower.com/learn/git/faq"&gt;git tower&lt;/a&gt;. Se tiver outros, sugere aí! &lt;/p&gt;

&lt;p&gt;P.S.2: imagem do post disponível no &lt;a href="https://flic.kr/p/5Q1Jxv"&gt;flickr&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>git</category>
    </item>
  </channel>
</rss>
