<?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>Forem: Juliano Moreno</title>
    <description>The latest articles on Forem by Juliano Moreno (@julianomoreno).</description>
    <link>https://forem.com/julianomoreno</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%2F1192176%2Ffe9205ad-6cff-4543-9d86-c1f8013b999d.jpeg</url>
      <title>Forem: Juliano Moreno</title>
      <link>https://forem.com/julianomoreno</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/julianomoreno"/>
    <language>en</language>
    <item>
      <title>Is Regression Testing really necessary?</title>
      <dc:creator>Juliano Moreno</dc:creator>
      <pubDate>Mon, 13 Apr 2026 02:13:37 +0000</pubDate>
      <link>https://forem.com/julianomoreno/is-regression-testing-really-necessary-8e7</link>
      <guid>https://forem.com/julianomoreno/is-regression-testing-really-necessary-8e7</guid>
      <description>&lt;p&gt;Are we testing wrong? Or coding wrong? Or planning wrong? Worse: are we getting everything wrong?&lt;/p&gt;

&lt;p&gt;What's the real advantage of adopting a microservices architecture or a segmented system if every software change automatically triggers a regression test request? Is this due to a legitimate fear of system impact? If so, are we truly refining and analyzing these impacts correctly before implementing changes? Or has this simply become a convention we follow without questioning?&lt;/p&gt;

&lt;p&gt;Regardless of the reason, it's the QA's role to question it. We must evaluate whether regression testing is genuinely necessary in all situations and propose more precise alternatives with a higher probability of ensuring software quality. Regression testing should be an exception, not the rule.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Cost (and Risk) of Regression Testing
&lt;/h2&gt;

&lt;p&gt;Regression testing is costly - whether done manually or automated.&lt;/p&gt;

&lt;p&gt;For manual tests, depending on the size and complexity of the software, we're talking about hours or even days of work. Yet, even then, there's no guarantee of adequate test coverage. Some parts of the system may remain untested, allowing defects to go unnoticed.&lt;/p&gt;

&lt;p&gt;In automated tests, the scenario can be similar. It's common practice to focus on main flows and critical functionalities, prioritizing what seems most relevant. However, this can leave significant gaps, compromising the overall reliability of the tests.&lt;/p&gt;

&lt;p&gt;Furthermore, pursuing the idea of automating every flow, interaction, and exception in the software can lead to chaos. &lt;br&gt;
Imagine a scenario where the test codebase surpasses the application's codebase in size. Maintaining this level of automation could become more expensive than evolving the software itself. Testing should add value, not become a bottleneck.&lt;/p&gt;

&lt;p&gt;Requesting regression tests for every change is like using a hammer to fix every problem. It's not always the right tool for the job.&lt;/p&gt;

&lt;h2&gt;
  
  
  How to Reduce Dependency on Regression Testing
&lt;/h2&gt;

&lt;p&gt;Honestly, there's no single or definitive answer to this question. However, some practices, when applied correctly, can help reduce the excessive reliance on regression testing while increasing confidence in the software.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Sound Architectural Practices&lt;/strong&gt;&lt;br&gt;
The system's architecture is the foundation. In modern architectures like microservices, it's crucial to clearly define the boundaries of each module and ensure their responsibilities are well-delimited.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Effective Unit and Integration Tests&lt;/strong&gt;&lt;br&gt;
Unit tests are the first line of defense. They ensure that each code unit functions as expected.&lt;br&gt;
Integration tests, in turn, validate whether the microservice interacts correctly with real dependencies (RabbitMQ, databases, external APIs). This reduces the need for broad regression tests by confirming the service's behavior in scenarios close to production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Strategic Test Planning&lt;/strong&gt;&lt;br&gt;
QA needs to invest more time in impact analysis. Software changes rarely affect the entire system. Understanding where the real impacts are is essential for planning more focused and relevant tests.&lt;/p&gt;

&lt;p&gt;Two approaches can help structure this planning more strategically:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Shift-Left Testing&lt;/strong&gt; &lt;br&gt;
This practice emphasizes prioritizing quality from the earliest stages of the development cycle. Unit, integration, and contract tests are executed as early as possible, in parallel with development, reducing the risk of accumulated issues that require extensive regression tests later. This also fosters a culture of collaboration between development and QA, enabling early identification of risks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- Risk-Based Testing&lt;/strong&gt;&lt;br&gt;
This strategy focuses on prioritizing areas of the system most likely to fail or with the greatest potential impact if something goes wrong. QA identifies critical functionalities, analyzes the risks associated with each change, and directs testing efforts to the areas that matter most. This allows for smarter coverage, minimizing the need to validate the entire system with regression tests.&lt;/p&gt;

&lt;p&gt;How These Practices Help:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;With shift-left testing, many problems are identified and fixed before reaching the integration stage, reducing the need for late-stage validations.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Risk-based testing ensures time and resources are spent where they truly make a difference, avoiding unnecessary effort in low-impact areas.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Automation Aligned with Business Goals&lt;/strong&gt;&lt;br&gt;
Automation should be strategic. Not everything needs to be automated, but what is automated should be carefully chosen. Prioritize critical scenarios and those that add real value to the business. Automating indiscriminately only increases costs and complexity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Monitoring in Production&lt;/strong&gt;&lt;br&gt;
Modern tools allow for monitoring software in production, identifying real usage problems that tests might not foresee. This continuous feedback complements testing and reduces the need for extensive regression suites.&lt;/p&gt;

&lt;h2&gt;
  
  
  Shifting Focus: Intelligent Quality
&lt;/h2&gt;

&lt;p&gt;Regression tests are often used as a safety net to compensate for deficiencies in other areas, such as planning, architecture, or development. They still have their place. In large-scale changes, such as extensive refactoring or critical updates, regression tests may be necessary to validate overall stability. However, they should be the exception, not the rule.&lt;/p&gt;

&lt;p&gt;Testing what truly matters is more important than attempting to test everything. This requires a joint effort between development, QA, and architecture to create more resilient systems and eliminate blind spots in the development cycle.&lt;/p&gt;

&lt;p&gt;In the end, quality is not just about testing. It's about strategically thinking ahead to prevent failures before they even exist.&lt;/p&gt;

</description>
      <category>smarttesting</category>
      <category>automationtesting</category>
      <category>regressionstrategy</category>
    </item>
    <item>
      <title>The system failed. Your log should explain why</title>
      <dc:creator>Juliano Moreno</dc:creator>
      <pubDate>Wed, 08 Apr 2026 14:58:00 +0000</pubDate>
      <link>https://forem.com/julianomoreno/the-system-failed-your-log-should-explain-why-2326</link>
      <guid>https://forem.com/julianomoreno/the-system-failed-your-log-should-explain-why-2326</guid>
      <description>&lt;p&gt;In the previous article, I brought up a point that is rarely discussed: &lt;a href="https://dev.to/julianomoreno/bad-logs-are-as-dangerous-as-bugs-in-production-5ij"&gt;a bad log can be as dangerous as a bug in production&lt;/a&gt;. &lt;/p&gt;

&lt;p&gt;That leads to a natural question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If logs are so critical, what should we actually analyze?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In practice, when something fails, the first reaction of the team is to check the logs. That is where everyone expects to find answers.&lt;/p&gt;

&lt;p&gt;The problem is that, most of the time, logs don’t deliver.&lt;/p&gt;

&lt;p&gt;They are verbose, full of long stack traces generated by frameworks, generic messages, and very little useful context. The information is there, but it is not actionable.&lt;/p&gt;

&lt;p&gt;The result is predictable: time wasted filtering noise, difficulty finding the real point of failure, and often the need to reproduce the issue just to understand what happened.&lt;/p&gt;

&lt;p&gt;This is not a tooling problem. It is a quality problem.&lt;/p&gt;

&lt;p&gt;From a QA perspective, logs are not technical output. Logs are &lt;strong&gt;operational evidence&lt;/strong&gt;, and evidence must be reliable.&lt;/p&gt;




&lt;h2&gt;
  
  
  Logs are not for developers. They are for the system to explain itself
&lt;/h2&gt;

&lt;p&gt;When an incident happens, no one cares how the code was written.&lt;/p&gt;

&lt;p&gt;The question is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;What happened?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the log doesn’t answer that, someone will have to investigate manually. And that costs time, trust, and money.&lt;/p&gt;




&lt;h2&gt;
  
  
  Standards already exist. The problem is not using them
&lt;/h2&gt;

&lt;p&gt;There is no lack of reference.&lt;/p&gt;

&lt;p&gt;The most common and widely adopted approaches are 5W + H (what, where, when, who, why, how) and Event + Context + Outcome. Standards like OpenTelemetry and Elastic Common Schema reinforce the same idea: logs must be structured, contextualized, and traceable.&lt;/p&gt;

&lt;p&gt;There is no complexity here. A good log describes an event with enough context, a clear outcome, and the ability to trace it.&lt;/p&gt;




&lt;h2&gt;
  
  
  What should be analyzed in logs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Flow reconstruction
&lt;/h3&gt;

&lt;p&gt;A good log should allow you to understand the beginning, middle, and end of a flow. If that is not possible, there is an observability problem. Missing logs are blind spots.&lt;/p&gt;

&lt;h3&gt;
  
  
  Context
&lt;/h3&gt;

&lt;p&gt;Logs must clearly show which entity was affected. Without identifiers like &lt;code&gt;orderId&lt;/code&gt;, &lt;code&gt;paymentId&lt;/code&gt;, or &lt;code&gt;userId&lt;/code&gt;, there is no investigation.&lt;/p&gt;

&lt;h3&gt;
  
  
  Clarity
&lt;/h3&gt;

&lt;p&gt;Messages must be direct and unambiguous. “Error processing” explains nothing. If you need to read the code to understand the log, it failed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Severity
&lt;/h3&gt;

&lt;p&gt;Severity must reflect impact. When everything is INFO or everything is ERROR, the signal is lost. Logs should distinguish normal behavior, controlled issues, and real failures.&lt;/p&gt;

&lt;h3&gt;
  
  
  Traceability
&lt;/h3&gt;

&lt;p&gt;In distributed systems, logs must be connected. Without &lt;code&gt;traceId&lt;/code&gt; or &lt;code&gt;correlationId&lt;/code&gt;, each log becomes an isolated piece, and isolated pieces don’t explain complex flows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Critical points
&lt;/h3&gt;

&lt;p&gt;Logs must exist where risk exists: external integrations, state changes, key decisions, retries, and fallbacks. If logs appear only at the final error, it is already too late.&lt;/p&gt;

&lt;h3&gt;
  
  
  System behavior
&lt;/h3&gt;

&lt;p&gt;Logs should explain what the system did after an event. Did it retry? Fallback? Abort? Without this, the diagnosis is incomplete.&lt;/p&gt;

&lt;h3&gt;
  
  
  Impact
&lt;/h3&gt;

&lt;p&gt;Knowing that something failed is not enough. Logs should show the impact: was the operation interrupted, was data affected, was the user impacted?&lt;/p&gt;

&lt;h3&gt;
  
  
  Noise
&lt;/h3&gt;

&lt;p&gt;More logs do not mean better logs. Too much information can be as harmful as too little.&lt;/p&gt;

&lt;h3&gt;
  
  
  Sensitive data
&lt;/h3&gt;

&lt;p&gt;Logs must not expose sensitive information such as passwords, tokens, or personal data. This is also a quality concern.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where QA should evaluate this
&lt;/h2&gt;

&lt;p&gt;Logs should not be evaluated only in production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code review
&lt;/h3&gt;

&lt;p&gt;Code reviews are usually done by developers, but log quality criteria must be present. Critical points should be logged, context must be sufficient, and messages must be clear. The role of QA is not to perform the review, but to ensure that these criteria exist and are applied.&lt;/p&gt;

&lt;h3&gt;
  
  
  Tests
&lt;/h3&gt;

&lt;p&gt;Logs should be validated mainly in development-level tests, such as integration tests and, when necessary, unit tests. It is important to verify if logs are generated in relevant scenarios, if the content is correct, and if there are unnecessary logs.&lt;/p&gt;

&lt;p&gt;At higher levels, such as E2E and API tests, logs act as support for diagnosis. They should help explain system behavior, allow flow correlation, and reduce the need to reproduce issues.&lt;/p&gt;

&lt;h3&gt;
  
  
  Incidents
&lt;/h3&gt;

&lt;p&gt;Logs must also be evaluated during incidents. Did they help or slow things down? Were there blind spots?&lt;/p&gt;




&lt;h2&gt;
  
  
  The real problem
&lt;/h2&gt;

&lt;p&gt;The problem is not the absence of logs. The problem is the absence of criteria.&lt;/p&gt;

&lt;p&gt;Without criteria, each developer logs in a different way, each service tells a different story, and each incident becomes a manual investigation.&lt;/p&gt;




&lt;h2&gt;
  
  
  A simple question
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Can you understand what happened without running the system again?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If the answer is no, there is a quality problem.&lt;/p&gt;




&lt;h2&gt;
  
  
  Final thoughts
&lt;/h2&gt;

&lt;p&gt;Logs are not a technical detail. They are not debug. They are not optional.&lt;/p&gt;

&lt;p&gt;Logs are part of the system, and they must be treated that way.&lt;/p&gt;

&lt;p&gt;Otherwise, when they are most needed, they will fail.&lt;/p&gt;

</description>
      <category>observability</category>
      <category>softwarequality</category>
      <category>qa</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>O sistema caiu. Seu log deveria explicar por quê.</title>
      <dc:creator>Juliano Moreno</dc:creator>
      <pubDate>Tue, 07 Apr 2026 14:01:27 +0000</pubDate>
      <link>https://forem.com/julianomoreno/o-sistema-caiu-seu-log-deveria-explicar-por-que-5041</link>
      <guid>https://forem.com/julianomoreno/o-sistema-caiu-seu-log-deveria-explicar-por-que-5041</guid>
      <description>&lt;p&gt;No artigo anterior, trouxe um ponto que pouca gente discute: &lt;a href="https://dev.to/julianomoreno/log-ruim-e-tao-perigoso-quanto-bug-em-producao-4040"&gt;&lt;strong&gt;um log ruim pode ser tão perigoso quanto um bug em produção&lt;/strong&gt;&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Agora vem a pergunta natural:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Se log é tão crítico assim, o que exatamente deveria ser analisado?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Na prática, quando algo falha, o primeiro movimento do time é olhar para o log. É ali que todos esperam encontrar respostas.&lt;/p&gt;

&lt;p&gt;O problema é que, na maioria das vezes, o log não cumpre esse papel.&lt;/p&gt;

&lt;p&gt;Logs verbosos, com stacktraces extensos gerados pelo framework, mensagens genéricas e pouco contexto útil. Informação existe, mas não é acionável.&lt;/p&gt;

&lt;p&gt;O resultado é previsível: tempo perdido filtrando ruído, dificuldade para chegar no ponto exato da falha e, muitas vezes, necessidade de reproduzir o problema para entender o que aconteceu.&lt;/p&gt;

&lt;p&gt;Isso não é problema de ferramenta. É problema de qualidade.&lt;/p&gt;

&lt;p&gt;Na visão de QA, log não é saída técnica. Log é &lt;strong&gt;evidência operacional&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;E evidência precisa ser confiável.&lt;/p&gt;




&lt;h2&gt;
  
  
  Log não é para o Dev. É para o sistema se explicar
&lt;/h2&gt;

&lt;p&gt;Quando um incidente acontece, ninguém quer saber como o código foi escrito.&lt;/p&gt;

&lt;p&gt;A pergunta é simples:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;O que aconteceu?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Se o log não responde isso, alguém vai ter que investigar manualmente.&lt;/p&gt;

&lt;p&gt;E isso custa tempo, confiança e dinheiro.&lt;/p&gt;




&lt;h2&gt;
  
  
  Padrões já existem. O problema é não usar
&lt;/h2&gt;

&lt;p&gt;Não falta referência.&lt;/p&gt;

&lt;p&gt;Os modelos mais simples e adotados são:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5W + H (o que, onde, quando, quem, por que e como)&lt;/li&gt;
&lt;li&gt;Event + Context + Outcome (evento, contexto e resultado)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Padrões como OpenTelemetry e Elastic Common Schema reforçam a mesma ideia:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;log precisa ser estruturado, contextualizado e rastreável.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Não tem complexidade aqui.&lt;/p&gt;

&lt;p&gt;Um bom log descreve um evento, com contexto suficiente, resultado claro e possibilidade de correlação.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que deve ser analisado em logs
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. O fluxo pode ser reconstruído?
&lt;/h3&gt;

&lt;p&gt;Dá para entender início, meio e fim? Se não dá, existe um problema de observabilidade. Buraco em log é ponto cego.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Existe contexto suficiente?
&lt;/h3&gt;

&lt;p&gt;Dá para saber qual entidade foi afetada? Sem &lt;code&gt;orderId&lt;/code&gt;, &lt;code&gt;paymentId&lt;/code&gt;, &lt;code&gt;userId&lt;/code&gt;, não existe investigação.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. A mensagem é clara?
&lt;/h3&gt;

&lt;p&gt;“Erro ao processar” não explica nada. Se precisa abrir o código para entender o log, ele falhou.&lt;/p&gt;

&lt;h3&gt;
  
  
  4. O nível de severidade faz sentido?
&lt;/h3&gt;

&lt;p&gt;Tudo como INFO ou tudo como ERROR é erro.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;INFO → fluxo normal relevante&lt;/li&gt;
&lt;li&gt;WARN → comportamento inesperado controlado&lt;/li&gt;
&lt;li&gt;ERROR → falha com impacto&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Severidade errada distorce leitura do sistema.&lt;/p&gt;

&lt;h3&gt;
  
  
  5. Existe rastreabilidade?
&lt;/h3&gt;

&lt;p&gt;Dá para seguir o fluxo entre serviços? Sem &lt;code&gt;traceId&lt;/code&gt; ou &lt;code&gt;correlationId&lt;/code&gt;, cada log vira uma peça isolada. Peça isolada não explica sistema distribuído.&lt;/p&gt;

&lt;h3&gt;
  
  
  6. Os pontos críticos estão logados?
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;integrações externas&lt;/li&gt;
&lt;li&gt;mudanças de estado&lt;/li&gt;
&lt;li&gt;decisões relevantes&lt;/li&gt;
&lt;li&gt;retries e fallbacks&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Log só no erro final não resolve.&lt;/p&gt;

&lt;h3&gt;
  
  
  7. O sistema se explica?
&lt;/h3&gt;

&lt;p&gt;O log mostra o que o sistema fez?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;tentou novamente?&lt;/li&gt;
&lt;li&gt;fez fallback?&lt;/li&gt;
&lt;li&gt;abortou?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sem isso, o diagnóstico fica incompleto.&lt;/p&gt;

&lt;h3&gt;
  
  
  8. Existe visão de impacto?
&lt;/h3&gt;

&lt;p&gt;Falhou. E daí?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;operação interrompida?&lt;/li&gt;
&lt;li&gt;dado inconsistente?&lt;/li&gt;
&lt;li&gt;impacto no usuário?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Log técnico sem impacto não ajuda decisão.&lt;/p&gt;

&lt;h3&gt;
  
  
  9. Existe ruído?
&lt;/h3&gt;

&lt;p&gt;Mais log não significa melhor log. Excesso atrapalha tanto quanto falta.&lt;/p&gt;

&lt;h3&gt;
  
  
  10. Existe exposição de dados sensíveis?
&lt;/h3&gt;

&lt;p&gt;Senha, token, CPF, cartão. Se aparece em log, existe problema.&lt;/p&gt;




&lt;h2&gt;
  
  
  Onde o QA deveria avaliar isso
&lt;/h2&gt;

&lt;p&gt;Log não deve ser avaliado só em produção.&lt;/p&gt;

&lt;h3&gt;
  
  
  Code Review (código do sistema)
&lt;/h3&gt;

&lt;p&gt;O review é feito pelos Devs. Ainda assim, critérios de log precisam estar presentes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;pontos críticos estão logados?&lt;/li&gt;
&lt;li&gt;existe contexto suficiente?&lt;/li&gt;
&lt;li&gt;a mensagem é clara?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O papel do QA não é executar o review. É garantir que o critério exista.&lt;/p&gt;

&lt;h3&gt;
  
  
  Testes
&lt;/h3&gt;

&lt;p&gt;Principalmente em testes de desenvolvimento (integração e, quando necessário, unitários):&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;logs são gerados nos cenários relevantes?&lt;/li&gt;
&lt;li&gt;o conteúdo está correto?&lt;/li&gt;
&lt;li&gt;existem logs indevidos?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aqui o log faz parte da validação.&lt;/p&gt;

&lt;p&gt;Em níveis mais integrados (E2E e APIs), o log vira suporte:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ajuda a explicar o comportamento?&lt;/li&gt;
&lt;li&gt;permite correlacionar fluxo?&lt;/li&gt;
&lt;li&gt;evita precisar reproduzir problema?&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Incidentes
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;o log ajudou ou atrapalhou?&lt;/li&gt;
&lt;li&gt;houve ponto cego?&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  O problema real
&lt;/h2&gt;

&lt;p&gt;Não é falta de log. É falta de critério.&lt;/p&gt;

&lt;p&gt;Sem critério:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;cada dev loga de um jeito&lt;/li&gt;
&lt;li&gt;cada serviço conta uma história diferente&lt;/li&gt;
&lt;li&gt;cada incidente vira investigação manual&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Uma pergunta simples
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Dá para entender o que aconteceu sem rodar o sistema novamente?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Se não dá, existe problema de qualidade.&lt;/p&gt;




&lt;h2&gt;
  
  
  Fechamento
&lt;/h2&gt;

&lt;p&gt;Log não é detalhe técnico. Não é debug. Não é opcional.&lt;/p&gt;

&lt;p&gt;Log é parte do sistema. E precisa ser tratado como tal.&lt;/p&gt;

&lt;p&gt;Caso contrário, no momento em que ele for necessário, ele não vai cumprir o seu papel.&lt;/p&gt;

</description>
      <category>softwarequality</category>
      <category>observability</category>
      <category>logging</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>Bad logs are as dangerous as bugs in production</title>
      <dc:creator>Juliano Moreno</dc:creator>
      <pubDate>Mon, 06 Apr 2026 15:20:48 +0000</pubDate>
      <link>https://forem.com/julianomoreno/bad-logs-are-as-dangerous-as-bugs-in-production-5ij</link>
      <guid>https://forem.com/julianomoreno/bad-logs-are-as-dangerous-as-bugs-in-production-5ij</guid>
      <description>&lt;p&gt;A normal workday. The system has a critical failure. The whole team runs to check the logs, and at that moment, they see that the logs have too much unnecessary information. This makes it hard to find the real point of failure. In some cases, logs have too little information. This forces the Dev and/or QA to debug the system, recreating the same conditions where the error happened to try to find the cause. In worse situations, there is no log at that point in the system. Who has never experienced something like this?&lt;/p&gt;

&lt;p&gt;Logs are rarely treated as critical points during architecture, code review, and validation phases. They should be. Logs are like home insurance: you only care when something bad happens. In my more than 20 years of experience, I have rarely seen teams treat logs the way they should.&lt;/p&gt;

&lt;p&gt;From a QA perspective, analyzing logs often feels like being Indiana Jones — doing archaeology work. Most of the time, logs are not structured and not objective. It becomes a tiring task: unclear messages, confusing stack traces, unnecessary or missing information. A lot of time is lost on something that should be fast. This directly impacts response time to customers, planning, and delivery of the fix. That is why QA often feels discouraged to do this work.&lt;/p&gt;

&lt;p&gt;There is usually no standard for logs in companies. Each product uses its own structure, naming, content, and data masking. On top of that, many Devs lack experience — or even technical knowledge — to use these patterns correctly, and mainly to know where in the code logs should be added.&lt;/p&gt;

&lt;p&gt;Now imagine this scenario in a critical system for a company. For example, a marketplace microservice responsible for charging credit cards goes down during Black Friday. What would be the team’s response time? How confident would they be that they are looking at the correct point that caused the failure?&lt;/p&gt;

&lt;p&gt;Logs should be planned during architecture, refined during development, and also used as a quality criterion in code review and tests.&lt;/p&gt;

&lt;p&gt;A good log should answer, at least, these questions:&lt;/p&gt;

&lt;p&gt;1- What happened?&lt;br&gt;
2- Where did it happen?&lt;br&gt;
3- In which context (which entity was affected)?&lt;br&gt;
4- What was the result (success, failure, fallback)?&lt;br&gt;
5- What was the impact on the system or the business?&lt;br&gt;
6- Why did it happen (when possible)?&lt;br&gt;
7- What did the system do after that (retry, fallback, abort)?&lt;br&gt;
8- How can I trace this event (traceId, correlationId)?&lt;br&gt;
9- Is this expected or abnormal behavior?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log is not debug.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Log is operational evidence.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;And bad evidence leads to wrong decisions.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>observability</category>
      <category>softwaredevelopment</category>
      <category>softwareengineering</category>
      <category>bugfix</category>
    </item>
    <item>
      <title>Log ruim é tão perigoso quanto bug em produção</title>
      <dc:creator>Juliano Moreno</dc:creator>
      <pubDate>Mon, 06 Apr 2026 14:52:09 +0000</pubDate>
      <link>https://forem.com/julianomoreno/log-ruim-e-tao-perigoso-quanto-bug-em-producao-4040</link>
      <guid>https://forem.com/julianomoreno/log-ruim-e-tao-perigoso-quanto-bug-em-producao-4040</guid>
      <description>&lt;p&gt;Dia comum de trabalho. O sistema apresenta uma falha crítica. O time todo corre para ver o log e, nesse momento, descobre que ele possui muitas informações desnecessárias, o que dificulta chegar ao ponto que realmente falhou. Em alguns casos, o log tem poucas informações, o que força o Dev e/ou QA a debugarem o sistema, recriando as mesmas condições em que o erro ocorreu para tentar identificar a causa da falha. Em situações ainda piores, não há disparo de log nesse ponto do sistema. Quem nunca passou por algo semelhante?&lt;/p&gt;

&lt;p&gt;Poucas vezes, nas fases de arquitetura, code review e validação, logs são tratados como pontos críticos. Deveriam ser. Log é como seguro de casa: você só dá importância no momento da catástrofe. Na minha experiência de mais de 20 anos de estrada, raramente vi times tratando esse tema da forma como deveria ser tratado.&lt;/p&gt;

&lt;p&gt;Na minha visão de QA, analisar logs muitas vezes é se sentir o Indiana Jones — fazer trabalho de arqueologia. Na maioria das vezes, eles não são estruturados e, muito menos, objetivos. É uma tarefa desgastante: mensagens pouco claras, stacktraces confusos, informações desnecessárias ou ausentes. Perde-se muito tempo em algo que deveria ser rápido. Isso impacta diretamente no tempo de resposta ao cliente, no planejamento e na entrega da correção. Por isso, muitas vezes o QA se sente desencorajado a executar essa tarefa.&lt;/p&gt;

&lt;p&gt;Normalmente há falta de padronização de logs nas empresas. Cada produto adota seu próprio padrão de estrutura, nomenclatura, conteúdo e ofuscamento de informações. Soma-se a isso a falta de experiência — ou até mesmo de conhecimento técnico — de muitos Devs para utilizar corretamente esses padrões e, principalmente, para saber onde, no código, a captura de logs deve ser feita.&lt;/p&gt;

&lt;p&gt;Agora imagine todo esse cenário em um software crítico para uma empresa. Por exemplo, um microsserviço de um marketplace responsável por débito em cartões de crédito fora do ar em plena Black Friday. Qual seria o tempo de resposta do time? Qual seria a confiança de que estão analisando o ponto correto que causou a falha?&lt;/p&gt;

&lt;p&gt;Log deveria começar a ser pensado na arquitetura, ser lapidado no desenvolvimento e, além disso, deveria ser critério de qualidade para barrar no Code Review e também nos testes.&lt;/p&gt;

&lt;p&gt;Um bom log deve responder, no mínimo, a estas perguntas:&lt;/p&gt;

&lt;p&gt;1- O que aconteceu?&lt;br&gt;
2- Onde aconteceu?&lt;br&gt;
3- Com qual contexto (qual entidade foi afetada)?&lt;br&gt;
4- Qual foi o resultado (sucesso, falha, fallback)?&lt;br&gt;
5- Qual foi o impacto no sistema ou no negócio?&lt;br&gt;
6- Por que aconteceu (quando possível identificar)?&lt;br&gt;
7- O que o sistema fez após isso (retry, fallback, abortou)?&lt;br&gt;
8- Como eu rastreio esse evento (traceId, correlationId)?&lt;br&gt;
9- Isso é um comportamento esperado ou anormal?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Log não é debug.&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Log é evidência operacional.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;E evidência ruim leva a decisões erradas.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>softwaredevelopment</category>
      <category>softwareengineering</category>
      <category>logs</category>
      <category>observability</category>
    </item>
    <item>
      <title>Why testing became a commodity?</title>
      <dc:creator>Juliano Moreno</dc:creator>
      <pubDate>Mon, 06 Apr 2026 14:48:06 +0000</pubDate>
      <link>https://forem.com/julianomoreno/why-testing-became-a-commodity-114</link>
      <guid>https://forem.com/julianomoreno/why-testing-became-a-commodity-114</guid>
      <description>&lt;p&gt;We are entering a new phase in software engineering. AI can generate code, create tests, execute scenarios, and validate behavior at scale.&lt;/p&gt;

&lt;p&gt;Execution is no longer the hard part.&lt;/p&gt;

&lt;p&gt;This creates an uncomfortable reality: testing, as an activity, is losing value.&lt;/p&gt;

&lt;p&gt;QA will not stop testing. Testing will still happen, but it will focus on critical parts of the system — where failures really matter. Most of the time, QA will act at a system level and at a strategic level, understanding risk and deciding what to do about it.&lt;/p&gt;

&lt;p&gt;The problem is not speed. The problem is decision. More tests, executed faster, do not mean better quality. They often create a false sense of control.&lt;/p&gt;

&lt;p&gt;This is the point that few people are discussing.&lt;/p&gt;

&lt;h2&gt;
  
  
  The structural problem in QA today
&lt;/h2&gt;

&lt;p&gt;Inside software engineering, in my opinion, there is a structural problem happening. QA professionals are still treated as executors of an activity that can be replaced by AI. In practice, what is being replaced is not the QA professional, but the superficial model that the market accepted for a long time.&lt;/p&gt;

&lt;p&gt;AI can generate code, create tests, execute scenarios, and validate behavior. This leads to a direct conclusion: testing has become a commodity. Everything that becomes a commodity loses value over time.&lt;/p&gt;

&lt;p&gt;The problem was never testing. The problem has always been understanding the system well enough to know where it can fail and what to do about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  System-level QA: understanding to see risk
&lt;/h2&gt;

&lt;p&gt;Important failures do not appear only in the interface. They do not appear when testing API endpoints or changing payloads in isolation. The failures that really matter usually come from architecture, data flow, consistency, messaging, integrations, and side effects.&lt;/p&gt;

&lt;p&gt;This type of problem is not visible by looking at the screen or only checking requests and responses. Understanding the system is essential. Without a system view, there is no real risk analysis — only superficial validation, which is exactly what AI can do very well.&lt;/p&gt;

&lt;p&gt;AI is not eliminating QA professionals. It is eliminating QA that never went beyond the surface. A new level of understanding is required: a QA professional who understands architecture, understands data flow, sees distributed behavior, anticipates side effects, and identifies real failure points.&lt;/p&gt;

&lt;p&gt;This is the system-level QA profile. It does not focus only on validating behavior. It understands how the system really works and anticipates where it can fail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Strategic QA: deciding about risk
&lt;/h2&gt;

&lt;p&gt;Understanding the system is not enough. A professional can deeply understand the architecture, identify complex risks, and still not generate real impact. Value is not only in seeing the problem, but in deciding what to do about it.&lt;/p&gt;

&lt;p&gt;QA at this level involves prioritization, context, understanding business impact, defining the right level of evidence, and making conscious decisions about risk. Without these elements, technical knowledge becomes just opinion — and opinion does not scale.&lt;/p&gt;

&lt;p&gt;Real value is in the combination. System-level QA sees the risk, and strategic QA decides what to do about it. Without system understanding, the problem is not seen. Without decision, the problem remains.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;In the current AI scenario, execution is no longer a differentiator. Any team using AI can produce fast. The difference is in who can make decisions without breaking what supports the business.&lt;/p&gt;

&lt;p&gt;This is not a testing problem. This is a decision problem.&lt;/p&gt;

&lt;p&gt;AI is not replacing QA professionals. It is separating two profiles: those who validate behavior and those who understand the system and make decisions based on risk. One will disappear, and the other will become essential.&lt;/p&gt;

&lt;p&gt;The question is no longer “how can I test better?” It becomes more fundamental: do I understand the system well enough to see risk? Can I turn that into decisions that protect the business?&lt;/p&gt;

&lt;p&gt;Without this capability, moving faster only makes failures happen faster.&lt;/p&gt;

</description>
      <category>qualityassurance</category>
      <category>ai</category>
      <category>softwareengineering</category>
      <category>qa</category>
    </item>
    <item>
      <title>Por que testar virou commodity?</title>
      <dc:creator>Juliano Moreno</dc:creator>
      <pubDate>Mon, 06 Apr 2026 14:43:00 +0000</pubDate>
      <link>https://forem.com/julianomoreno/por-que-testar-virou-commodity-21jp</link>
      <guid>https://forem.com/julianomoreno/por-que-testar-virou-commodity-21jp</guid>
      <description>&lt;p&gt;Estamos entrando em um dos momentos mais contraditórios da engenharia de software. Nunca produzimos tanto, nunca produzimos tão rápido e, ainda assim, nunca estivemos tão próximos de perder o controle sobre o que estamos produzindo. A IA está acelerando tudo — código, testes e decisões operacionais. Esse cenário expõe uma constatação incômoda: testar, como atividade, está perdendo valor.&lt;/p&gt;

&lt;p&gt;Produzir mais não significa entregar melhor, assim como produzir mais rápido não significa ter mais controle. Esse é o ponto que pouca gente está discutindo.&lt;/p&gt;

&lt;h2&gt;
  
  
  O erro estrutural do QA atual
&lt;/h2&gt;

&lt;p&gt;Dentro da engenharia de software, na minha opinião, existe um erro estrutural acontecendo. O profissional de QA ainda é tratado como executor de uma atividade substituível pela IA, quando, na prática, o que está sendo substituído não é quem atua em QA, mas sim o modelo superficial que o mercado se acostumou a aceitar.&lt;/p&gt;

&lt;p&gt;A capacidade atual da IA de gerar código, gerar testes, executar cenários e validar comportamento exige uma conclusão direta: testar virou commodity. Tudo que se torna commodity perde valor com o tempo.&lt;/p&gt;

&lt;p&gt;O problema nunca foi testar. O problema sempre foi entender o sistema o suficiente para saber onde ele pode falhar.&lt;/p&gt;

&lt;h2&gt;
  
  
  QA sistêmico: entender para enxergar o risco
&lt;/h2&gt;

&lt;p&gt;Falhas relevantes não aparecem apenas na interface. Elas não surgem ao testar endpoints de API ou ao variar payloads de forma isolada. As falhas que realmente importam costumam emergir na arquitetura, no fluxo de dados, na consistência, na mensageria, nas integrações e nos efeitos colaterais.&lt;/p&gt;

&lt;p&gt;Esse tipo de problema não é visível olhando tela, tampouco analisando apenas requisição e resposta. O entendimento do sistema torna-se essencial. Sem visão sistêmica, não existe análise real de risco — existe apenas validação superficial, exatamente o tipo de atividade que a IA executa melhor.&lt;/p&gt;

&lt;p&gt;A IA não está eliminando quem atua em QA. Ela está eliminando o QA que nunca saiu da superfície. Surge, então, a necessidade de um novo nível de entendimento: um profissional de QA que compreende arquitetura, entende fluxo de dados, enxerga comportamento distribuído, antecipa efeitos colaterais e identifica pontos reais de falha.&lt;/p&gt;

&lt;p&gt;Esse é o perfil de QA sistêmico. Não se limita a validar comportamento, entende como o sistema realmente se comporta e antecipa onde ele pode falhar.&lt;/p&gt;

&lt;h2&gt;
  
  
  QA estratégico: decidir sobre o risco
&lt;/h2&gt;

&lt;p&gt;Entender o sistema não é suficiente. Um profissional pode conhecer profundamente a arquitetura, identificar riscos complexos e, ainda assim, não gerar impacto real. O valor não está apenas em enxergar o problema, mas em decidir o que fazer com ele.&lt;/p&gt;

&lt;p&gt;A atuação de QA nesse nível envolve priorização, contexto, entendimento do impacto de negócio, definição do nível de evidência necessário e, principalmente, uma avaliação consciente sobre risco. Sem esses elementos, conhecimento técnico se reduz a opinião — e opinião não escala.&lt;/p&gt;

&lt;p&gt;O valor real está na interseção. O QA sistêmico enxerga o risco, enquanto o QA estratégico decide o que fazer com ele. Sem visão sistêmica, o problema passa despercebido. Sem visão estratégica, o problema permanece.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;No cenário atual com a IA, a execução deixa de ser diferencial, assim como velocidade também deixa de ser. Qualquer time com IA consegue produzir rápido. A diferença passa a estar em quem consegue mudar rápido sem quebrar o que sustenta o negócio. Trata-se de um problema de decisão, não de teste.&lt;/p&gt;

&lt;p&gt;A IA não está substituindo o profissional de QA. Ela está separando dois perfis: quem valida comportamento e quem entende o sistema e decide com base em risco. Um tende a desaparecer, enquanto o outro tende a se tornar essencial.&lt;/p&gt;

&lt;p&gt;A pergunta deixa de ser “como eu testo melhor?” e passa a ser mais fundamental: entender o sistema o suficiente para enxergar risco e transformar isso em decisão que protege o negócio.&lt;/p&gt;

&lt;p&gt;Sem essa capacidade, acelerar mais só faz quebrar mais rápido.&lt;/p&gt;

</description>
      <category>qa</category>
      <category>ia</category>
      <category>ai</category>
      <category>qualidadedesostware</category>
    </item>
    <item>
      <title>More Than a Bug: How Root Cause Analysis Helped Payroll</title>
      <dc:creator>Juliano Moreno</dc:creator>
      <pubDate>Thu, 17 Jul 2025 23:54:00 +0000</pubDate>
      <link>https://forem.com/julianomoreno/more-than-a-bug-how-root-cause-analysis-helped-payroll-2fd5</link>
      <guid>https://forem.com/julianomoreno/more-than-a-bug-how-root-cause-analysis-helped-payroll-2fd5</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;“The payroll is wrong. Many workers got double night bonus.”&lt;/p&gt;

&lt;p&gt;I saw this message in the support channel on Monday morning. I thought it was only one more bug in production. But when we looked more, we saw the problem was not only one &lt;code&gt;if&lt;/code&gt; in the code.&lt;/p&gt;

&lt;p&gt;It was time to stop fixing only what we see. We needed to find &lt;strong&gt;the real reason&lt;/strong&gt; for the problem. It was time to use &lt;strong&gt;Root Cause Analysis (RCA)&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;p&gt;Note: Examples in this post use Brazilian labor law for night shift calculations.&lt;/p&gt;




&lt;h2&gt;
  
  
  The Start: Just Another Bug?
&lt;/h2&gt;

&lt;p&gt;The team who works with the &lt;strong&gt;payroll module&lt;/strong&gt; in our ERP got a message.&lt;br&gt;
Clients said the &lt;strong&gt;night bonus was wrong&lt;/strong&gt; in the last month.&lt;/p&gt;

&lt;p&gt;One developer checked and saw that people who &lt;strong&gt;clocked in from 10pm to midnight&lt;/strong&gt; got the bonus &lt;strong&gt;twice or on the wrong day&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;The code was using the time from the database in UTC:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;nightBonusStart&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;dayjs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;clockIn&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Our server uses UTC, but data comes from Brazil (BRT). So “10pm” in Brazil became “1am” next day in database.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I just need to fix the time, I will change and deploy.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Done. Payroll fixed. HR happy.&lt;br&gt;
&lt;strong&gt;But next month, the bug was back in another part of the code.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Then we understood: we were fixing &lt;strong&gt;results&lt;/strong&gt;, not &lt;strong&gt;causes&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why RCA Is Important
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Root Cause Analysis (RCA)&lt;/strong&gt; helps you find &lt;strong&gt;the real reason&lt;/strong&gt; for a problem. Not only what you see.&lt;/p&gt;

&lt;p&gt;People use RCA in software, DevOps, quality, and also in health and industry.&lt;/p&gt;

&lt;p&gt;Instead of asking:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“How can I fix this bug now?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;RCA asks:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Why did this happen, and how can I stop it forever?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  How We Used RCA
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Method: &lt;strong&gt;5 Whys&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We start with a simple way: we ask “why?” many times until we find the root cause.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Example in our case:&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Why is night bonus wrong?&lt;/strong&gt;
Because calculation used wrong time.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why wrong time?&lt;/strong&gt;
Because time was saved in UTC.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why do we use UTC without change?&lt;/strong&gt;
Because the code used &lt;code&gt;dayjs&lt;/code&gt; without timezone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why not set timezone?&lt;/strong&gt;
Because new library (&lt;code&gt;day.js&lt;/code&gt;) does not change timezone alone.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Why we did not find before?&lt;/strong&gt;
Because tests &lt;strong&gt;do not check timezone or 10pm and midnight.&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Conclusion:&lt;/strong&gt;&lt;br&gt;
The problem was not only code. It was also &lt;strong&gt;missing timezone&lt;/strong&gt; and &lt;strong&gt;no test for this case&lt;/strong&gt;.&lt;/p&gt;




&lt;h3&gt;
  
  
  2. Method: &lt;strong&gt;Change Analysis&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We check &lt;strong&gt;what changed before the problem&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What we saw:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Two days before, a PR changed &lt;code&gt;moment.js&lt;/code&gt; to &lt;code&gt;day.js&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;We wanted better performance.&lt;/li&gt;
&lt;li&gt;But &lt;code&gt;day.js&lt;/code&gt; &lt;strong&gt;does not have timezone by default&lt;/strong&gt;. Need plugins.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A small change in code made a big problem because we did not check the business rules.&lt;/p&gt;




&lt;h3&gt;
  
  
  3. Method: &lt;strong&gt;Barrier Analysis&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We check what should protect us but did not work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Problems:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Automated tests?&lt;/strong&gt;&lt;br&gt;
They exist, but &lt;strong&gt;no test for timezone or night shift&lt;/strong&gt;. Data was always 8am–5pm. No night. So tests “passed” but real problem was there.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Code review?&lt;/strong&gt;&lt;br&gt;
It happened, but a junior dev who does not know payroll did the review. No meeting between dev and product teams. Rules (like night bonus, timezones) are not clear for all.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Acceptance test?&lt;/strong&gt;&lt;br&gt;
Dev team used only simple data. &lt;strong&gt;No test for night shift.&lt;/strong&gt; Product team did not check before production.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Many protections failed. Problem is in process, not only code.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  4. Complementary Technique: &lt;strong&gt;Ishikawa Diagram (Fishbone Diagram)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;This technique helps &lt;strong&gt;visualize categories of causes&lt;/strong&gt; around the problem.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Cause&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;People&lt;/td&gt;
&lt;td&gt;Reviewer with no payroll experience&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tools&lt;/td&gt;
&lt;td&gt;CI without timezone-related tests&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Process&lt;/td&gt;
&lt;td&gt;Functional staging not required&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Environment&lt;/td&gt;
&lt;td&gt;Server uses UTC, users are in BRT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Data&lt;/td&gt;
&lt;td&gt;Seed does not cover night shift&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tests&lt;/td&gt;
&lt;td&gt;No coverage for calculations between 10pm and 5am&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;This reinforces that &lt;strong&gt;the problem is multifactorial&lt;/strong&gt;, not just a simple isolated bug.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;See below how we represented this in an Ishikawa diagram:&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%2F6yb5pvp5bkhg6cajljff.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%2F6yb5pvp5bkhg6cajljff.png" alt="Fishbone diagram showing the multifactorial causes of incorrect night shift calculation across People, Tools, Process, Environment, Data, and Tests." width="800" height="362"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It’s worth noting that the diagram was also refined over time. Some causes were condensed to avoid redundancy (for example, “weak staging” and “no calculation review”), while others were highlighted in more detail, such as misalignment with the Product team. This exercise helps the team visualize causal relationships and make decisions on where to act first.&lt;/p&gt;

&lt;h4&gt;
  
  
  How we built the Ishikawa Diagram
&lt;/h4&gt;

&lt;p&gt;The &lt;strong&gt;Ishikawa Diagram&lt;/strong&gt;, also called the &lt;strong&gt;Fishbone Diagram&lt;/strong&gt;, is a visual technique used to organize the causes of a problem into categories.&lt;/p&gt;

&lt;p&gt;In this case, the problem analyzed was:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Night shift allowance calculated incorrectly"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;From there, we identified &lt;strong&gt;six major categories of causes&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;People&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tools&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Process&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Environment&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Data&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Tests&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For each category, we listed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Detail:&lt;/strong&gt; direct causes&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sub-detail:&lt;/strong&gt; more specific causes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For example, in the &lt;strong&gt;People&lt;/strong&gt; category:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Detail: Junior reviewer&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sub-detail: No experience in payroll&lt;/li&gt;
&lt;li&gt;Sub-detail: Undocumented rule&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;This process was conducted collaboratively with the team, combining:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;The &lt;strong&gt;5 Whys&lt;/strong&gt; technique&lt;/li&gt;
&lt;li&gt;Change analysis&lt;/li&gt;
&lt;li&gt;Code inspection&lt;/li&gt;
&lt;li&gt;Identification of failed safeguards&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By visualizing the causes this way, it became clear that &lt;strong&gt;it wasn’t just a bug in the code&lt;/strong&gt;, but rather a &lt;strong&gt;chain of organizational, technical, and communication failures&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Problems and Solutions
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Original Problem&lt;/th&gt;
&lt;th&gt;How We Fixed&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Product must review PRs&lt;/td&gt;
&lt;td&gt;Product does not review code, but must check rules. For sensitive code (payroll, finance), do a meeting and check together before final approve.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“Seed” not explained&lt;/td&gt;
&lt;td&gt;Now we explain: seed is fake data for test&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“DST ignored” could confuse&lt;/td&gt;
&lt;td&gt;Now we say: no test for Daylight Saving Time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No test for 10pm–5am&lt;/td&gt;
&lt;td&gt;We keep and explain more about night bonus&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Simple Takeaway
&lt;/h2&gt;

&lt;p&gt;The diagram showed that the bug did not come from only one place, but &lt;strong&gt;many parts of the system not working together&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What We Changed
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Quick fixes:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Fix the code to use timezone:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;  &lt;span class="nx"&gt;dayjs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;clockIn&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;America/Sao_Paulo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Redo payroll for all affected clients.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Prevention:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Add new tests for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;10pm, midnight, 5am&lt;/li&gt;
&lt;li&gt;Different timezones (BRT, UTC)&lt;/li&gt;
&lt;li&gt;Daylight Saving Time (DST)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Make a checklist for all PRs that change payroll, calculation or finance rules.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Always set timezone in API, backend, and tests.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Add product team to check sensitive PRs.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  Why Tell This Story?
&lt;/h2&gt;

&lt;p&gt;We did not write a boring postmortem. We told a story.&lt;/p&gt;

&lt;p&gt;This helps to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Make team pay attention&lt;/li&gt;
&lt;li&gt;Help non-technical people understand&lt;/li&gt;
&lt;li&gt;Make lessons easy to remember&lt;/li&gt;
&lt;li&gt;Build a team that wants to improve&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Final Lessons: RCA Is Necessary
&lt;/h2&gt;

&lt;p&gt;Fixing bugs without knowing the real reason is like &lt;strong&gt;cleaning water without fixing the leak&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;RCA helps to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Stop fixing the same bug again and again&lt;/li&gt;
&lt;li&gt;Learn every time&lt;/li&gt;
&lt;li&gt;Make stronger systems&lt;/li&gt;
&lt;li&gt;Improve your work step by step&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  RCA Checklist
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Did we stop and think about the error?&lt;/li&gt;
&lt;li&gt;[ ] Did we check what changed before?&lt;/li&gt;
&lt;li&gt;[ ] Did we use the 5 Whys?&lt;/li&gt;
&lt;li&gt;[ ] Did we check which protections failed?&lt;/li&gt;
&lt;li&gt;[ ] Did we write a postmortem to share?&lt;/li&gt;
&lt;li&gt;[ ] Did we do prevention, not only a fix?&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;This “timezone bug” showed us problems in code, process, and team work.&lt;/p&gt;

&lt;p&gt;RCA helped us &lt;strong&gt;work better, not just fix a bug&lt;/strong&gt;. This is the difference between teams who only fix, and teams who grow.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Are you only fixing bugs, or fixing the real problem?&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>softwarequality</category>
      <category>rootcause</category>
      <category>bugfix</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>Muito além do Bug: Como a Análise de Causa Raiz salvou a folha de pagamento</title>
      <dc:creator>Juliano Moreno</dc:creator>
      <pubDate>Wed, 16 Jul 2025 17:05:34 +0000</pubDate>
      <link>https://forem.com/julianomoreno/muito-alem-do-bug-como-a-analise-de-causa-raiz-salvou-a-folha-de-pagamento-1gm4</link>
      <guid>https://forem.com/julianomoreno/muito-alem-do-bug-como-a-analise-de-causa-raiz-salvou-a-folha-de-pagamento-1gm4</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;“A folha saiu errada. Vários funcionários receberam o dobro de adicional noturno.”&lt;/p&gt;

&lt;p&gt;Essa frase, que chegou via mensagem no canal de suporte numa manhã de segunda-feira, parecia apenas mais um bug em produção. Mas, à medida que o time mergulhava na investigação, percebemos que o problema ia muito além de um &lt;code&gt;if&lt;/code&gt; mal posicionado.&lt;/p&gt;

&lt;p&gt;Era hora de parar de tapar buracos e começar a entender &lt;strong&gt;o porquê real&lt;/strong&gt; das falhas. Era hora de aplicar a &lt;strong&gt;Análise de Causa Raiz&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  O começo: um bug como qualquer outro
&lt;/h2&gt;

&lt;p&gt;O time responsável pelo módulo de &lt;strong&gt;folha de pagamento&lt;/strong&gt; do nosso ERP recebeu a notificação:&lt;br&gt;
clientes estavam reportando &lt;strong&gt;valores incorretos no adicional noturno&lt;/strong&gt; do mês anterior.&lt;/p&gt;

&lt;p&gt;Após uma análise inicial, o dev de plantão identificou que funcionários que &lt;strong&gt;bateram ponto entre 22h e 00h&lt;/strong&gt; estavam tendo o adicional &lt;strong&gt;duplicado ou deslocado para o dia seguinte&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;No código, a lógica de cálculo baseava-se no horário UTC da base de dados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;inicioAdicional&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nf"&gt;dayjs&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entrada&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como o servidor rodava em UTC e os dados vinham em BRT, o horário registrado como "22h" no Brasil aparecia como "01h" do dia seguinte no banco.&lt;/p&gt;

&lt;p&gt;— “Ah, é só ajustar a conversão do horário, já corrijo isso e faço o deploy.”&lt;/p&gt;

&lt;p&gt;Feito. A folha foi reprocessada. RHs acalmaram-se. Vida que segue.&lt;br&gt;
&lt;strong&gt;Mas no mês seguinte… o erro voltou, só que em outro ponto do cálculo.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;E aí a ficha caiu: estávamos tratando &lt;strong&gt;efeitos&lt;/strong&gt;, não &lt;strong&gt;a causa&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Por que Análise de Causa Raiz (RCA) importa tanto?
&lt;/h2&gt;

&lt;p&gt;A &lt;strong&gt;Análise de Causa Raiz (Root Cause Analysis)&lt;/strong&gt; é uma técnica usada para identificar a &lt;strong&gt;verdadeira origem&lt;/strong&gt; de um problema — não apenas a sua manifestação visível.&lt;/p&gt;

&lt;p&gt;Ela é amplamente utilizada em engenharia de software, SRE, DevOps, qualidade, e até em setores como saúde, segurança e indústria.&lt;/p&gt;

&lt;p&gt;Ao invés de perguntar:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Como eu resolvo esse bug agora?”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;A RCA propõe:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;“Por que isso aconteceu em primeiro lugar e o que posso mudar para que nunca aconteça de novo?”&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Como aplicamos RCA na prática
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Técnica: &lt;strong&gt;5 Porquês (Five Whys)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Começamos com a técnica mais simples: perguntar repetidamente “por quê?” até chegar à causa raiz.&lt;/p&gt;

&lt;h4&gt;
  
  
  Aplicação no nosso caso:
&lt;/h4&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Por que os adicionais noturnos estavam errados?&lt;/strong&gt;&lt;br&gt;
Porque estavam sendo calculados para o horário errado.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Por que o cálculo usou o horário errado?&lt;/strong&gt;&lt;br&gt;
Porque o horário do ponto foi registrado em UTC.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Por que estávamos usando UTC sem converter?&lt;/strong&gt;&lt;br&gt;
Porque a função de cálculo usava &lt;code&gt;dayjs&lt;/code&gt; sem configuração de timezone.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Por que o timezone não foi configurado corretamente?&lt;/strong&gt;&lt;br&gt;
Porque a nova lib (&lt;code&gt;day.js&lt;/code&gt;) não ajusta automaticamente o fuso horário.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Por que isso não foi detectado antes?&lt;/strong&gt;&lt;br&gt;
Porque os testes automatizados &lt;strong&gt;não cobriam fuso horário e horários críticos como 22h ou 00h.&lt;/strong&gt;&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Conclusão:&lt;/strong&gt; o problema não era apenas técnico — era &lt;strong&gt;estrutural&lt;/strong&gt;: ausência de configuração de timezone + lacunas de teste.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  2. Técnica: &lt;strong&gt;Análise de Mudança (Change Analysis)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Aqui, buscamos &lt;strong&gt;o que mudou recentemente&lt;/strong&gt; que poderia ter causado o problema.&lt;/p&gt;

&lt;h4&gt;
  
  
  Aplicação:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;Dois dias antes do incidente, foi feito merge de um PR que trocou &lt;code&gt;moment.js&lt;/code&gt; por &lt;code&gt;day.js&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;O objetivo era otimizar o bundle e melhorar performance.&lt;/li&gt;
&lt;li&gt;Porém, &lt;code&gt;day.js&lt;/code&gt; &lt;strong&gt;não tem suporte nativo para timezone&lt;/strong&gt; — exige o uso de plugin &lt;code&gt;utc&lt;/code&gt; + &lt;code&gt;timezone&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Uma pequena mudança técnica acabou gerando um impacto funcional crítico, porque &lt;strong&gt;o contexto de negócio não foi considerado&lt;/strong&gt;.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  3. Técnica: &lt;strong&gt;Análise de Barreiras&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Esta técnica nos ajuda a identificar &lt;strong&gt;quais proteções falharam&lt;/strong&gt; e permitiram que o bug escapasse.&lt;/p&gt;

&lt;h4&gt;
  
  
  Aplicação:
&lt;/h4&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Testes automatizados?&lt;/strong&gt;&lt;br&gt;
Existiam, mas &lt;strong&gt;não cobriam cenários com fuso horário nem jornadas noturnas.&lt;/strong&gt; Os dados simulados usados em desenvolvimento seguiam uma jornada fixa de 08h–17h, que não refletia os casos reais de trabalho noturno ou de virada de dia. Como resultado, os testes automatizados não cobriam cenários com adicional noturno, viradas de datas ou DST (horário de verão). Isso criou uma falsa sensação de segurança, já que os testes “passavam”, mesmo com a regra incorreta no código.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Revisão de código?&lt;/strong&gt;&lt;br&gt;
Foi feita, mas por um revisor júnior sem conhecimento de folha. Outro ponto importante foi a falta de alinhamento entre os times técnico e de produto. A ausência de um entendimento compartilhado das regras de negócio (como adicional noturno, jornada cruzando datas e impacto de timezone) dificultou a prevenção da falha. Quando o conhecimento está isolado ou implícito em um único time, decisões técnicas acabam desconsiderando aspectos funcionais fundamentais.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Homologação funcional?&lt;/strong&gt;&lt;br&gt;
Foi realizada pelo time técnico e com dados genéricos, &lt;strong&gt;sem simular casos reais como jornada noturna.&lt;/strong&gt; O deploy foi direto para produção sem validação do time de produto.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;blockquote&gt;
&lt;p&gt;Múltiplas barreiras falharam em sequência, revelando fragilidade no processo, não apenas no código.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h3&gt;
  
  
  4. Técnica complementar: &lt;strong&gt;Diagrama de Ishikawa (Espinha de Peixe)&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Essa técnica ajuda a &lt;strong&gt;visualizar categorias de causas&lt;/strong&gt; em torno do problema.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Categoria&lt;/th&gt;
&lt;th&gt;Causa&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Pessoas&lt;/td&gt;
&lt;td&gt;Revisor sem experiência em folha de pagamento&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ferramentas&lt;/td&gt;
&lt;td&gt;CI sem testes com timezone&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Processo&lt;/td&gt;
&lt;td&gt;Homologação funcional não exigida&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Ambiente&lt;/td&gt;
&lt;td&gt;Servidor usa UTC, usuários estão em BRT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Dados&lt;/td&gt;
&lt;td&gt;Seed não contempla jornada noturna&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testes&lt;/td&gt;
&lt;td&gt;Sem cobertura de cálculos entre 22h e 05h&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;Isso reforça que &lt;strong&gt;o problema é multifatorial&lt;/strong&gt;, não um simples bug isolado.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Veja abaixo como representamos isso em um diagrama de Ishikawa:&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%2Ftzv21pjracm2lwxnj3ku.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%2Ftzv21pjracm2lwxnj3ku.png" alt=" " width="800" height="363"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vale observar que o diagrama também passou por refinamentos. Algumas causas foram condensadas para evitar redundância (por exemplo, “homologação fraca” e “sem revisão de cálculo”), enquanto outras foram mais bem destacadas. Esse exercício ajuda o time a visualizar as relações de causa e a tomar decisões sobre onde atuar primeiro.&lt;/p&gt;

&lt;h4&gt;
  
  
  Como construímos o Diagrama de Ishikawa
&lt;/h4&gt;

&lt;p&gt;O &lt;strong&gt;Diagrama de Ishikawa&lt;/strong&gt;, também chamado de &lt;strong&gt;Espinha de Peixe&lt;/strong&gt;, é uma técnica visual usada para organizar as causas de um problema em categorias.&lt;/p&gt;

&lt;p&gt;Nesse caso, o problema analisado foi:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;"Adicional noturno calculado errado"&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A partir dele, identificamos &lt;strong&gt;6 grandes categorias de causas&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Pessoas&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ferramentas&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Processo&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ambiente&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dados&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Testes&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Para cada categoria, listamos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Detail&lt;/strong&gt;: causas diretas&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sub-detail&lt;/strong&gt;: causas mais específicas&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Por exemplo, na categoria &lt;strong&gt;Pessoas&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Detail: Revisor júnior&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Sub-detail: Sem experiência em folha&lt;/li&gt;
&lt;li&gt;Sub-detail: Regra não documentada&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;Esse processo foi feito em conjunto com o time, combinando:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Técnica dos &lt;strong&gt;5 Porquês&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Análise de mudança&lt;/li&gt;
&lt;li&gt;Inspeção do código&lt;/li&gt;
&lt;li&gt;Levantamento de barreiras que falharam&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Ao visualizar as causas dessa forma, ficou claro que &lt;strong&gt;não foi apenas um erro na linha de código&lt;/strong&gt;, mas sim uma &lt;strong&gt;cadeia de falhas organizacionais, técnicas e de comunicação&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Contradições corrigidas:
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Problema Original&lt;/th&gt;
&lt;th&gt;Correção Aplicada&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Produto deveria revisar PR&lt;/td&gt;
&lt;td&gt;Embora o time de Produto não revise código diretamente, é fundamental que ele esteja envolvido na validação das regras de negócio implementadas. Para PRs que afetam processos sensíveis como folha ou financeiro, o time técnico pode incluir uma etapa de validação funcional conjunta com Produto antes da homologação final. Essa colaboração evita que regras críticas passem despercebidas por quem entende mais do código do que da lógica do negócio.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Termo “seed” não explicado&lt;/td&gt;
&lt;td&gt;Agora explicado como conjunto de dados simulados para testes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;“DST ignorado” poderia confundir&lt;/td&gt;
&lt;td&gt;Explicado como ausência de testes em dias de ajuste de horário de verão&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;




&lt;h2&gt;
  
  
  Conclusão didática
&lt;/h2&gt;

&lt;p&gt;Ao final da análise, o diagrama serviu como um &lt;strong&gt;mapa visual da falha&lt;/strong&gt;. Ele mostrou que o erro não veio de um só lugar — mas sim de &lt;strong&gt;várias partes do sistema que não estavam conversando bem entre si&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que fizemos diferente desta vez
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Ações corretivas imediatas:
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Corrigimos o cálculo com suporte explícito a timezone:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="nx"&gt;dayjs&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;tz&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;entrada&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;America/Sao_Paulo&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nf"&gt;hour&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Reprocessamos as folhas dos clientes afetados.&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Ações preventivas (de verdade):
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;Adicionamos testes automatizados com:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Horários limítrofes (22h, 00h, 05h)&lt;/li&gt;
&lt;li&gt;Fusos diferentes (BRT, UTC, etc.)&lt;/li&gt;
&lt;li&gt;Casos de horário de verão (DST)&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Criamos um &lt;strong&gt;checklist obrigatório para PRs&lt;/strong&gt; que alteram regras de negócio sensíveis (folha, cálculo, financeiro).&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Padronizamos o uso de timezone nas camadas de API, backend e testes.&lt;/p&gt;&lt;/li&gt;

&lt;li&gt;&lt;p&gt;Integramos o time de analistas de produto para revisão de regras em PRs sensíveis.&lt;/p&gt;&lt;/li&gt;

&lt;/ul&gt;




&lt;h2&gt;
  
  
  O valor do postmortem com storytelling
&lt;/h2&gt;

&lt;p&gt;Em vez de documentar esse incidente em um postmortem seco e técnico, optamos por um formato com &lt;strong&gt;storytelling&lt;/strong&gt; — narrando o que aconteceu como uma história.&lt;/p&gt;

&lt;p&gt;Isso ajudou a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Engajar o time&lt;/li&gt;
&lt;li&gt;Facilitar o entendimento para pessoas não técnicas&lt;/li&gt;
&lt;li&gt;Tornar o aprendizado mais memorável&lt;/li&gt;
&lt;li&gt;Alimentar uma cultura de engenharia focada em melhoria contínua&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Lições finais: RCA não é luxo — é sobrevivência
&lt;/h2&gt;

&lt;p&gt;Corrigir bugs sem entender sua causa é como &lt;strong&gt;secar o chão sem consertar o cano&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A RCA ajuda a:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parar de apagar incêndios recorrentes&lt;/li&gt;
&lt;li&gt;Aprender com cada falha&lt;/li&gt;
&lt;li&gt;Criar um sistema mais robusto&lt;/li&gt;
&lt;li&gt;Evoluir processos de forma sustentável&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Checklist para aplicar RCA no seu time
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Paramos para refletir sobre o erro?&lt;/li&gt;
&lt;li&gt;[ ] Investigamos o que mudou no sistema?&lt;/li&gt;
&lt;li&gt;[ ] Aplicamos os “5 Porquês”?&lt;/li&gt;
&lt;li&gt;[ ] Mapeamos as barreiras que falharam?&lt;/li&gt;
&lt;li&gt;[ ] Produzimos um postmortem claro e compartilhável?&lt;/li&gt;
&lt;li&gt;[ ] Tomamos ações preventivas reais?&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Conclusão
&lt;/h2&gt;

&lt;p&gt;Aquele bug que começou como um “problema de fuso” revelou &lt;strong&gt;lacunas técnicas, falhas de processo e falta de alinhamento de negócio&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Mais do que resolver o incidente, usamos a RCA para &lt;strong&gt;melhorar a forma como trabalhamos&lt;/strong&gt; — e isso é o que diferencia times que só corrigem bugs dos que evoluem de verdade.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;E você? Está apagando incêndios ou resolvendo o problema certo?&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>rootcause</category>
      <category>qa</category>
      <category>softwaretesting</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Juliano Moreno</dc:creator>
      <pubDate>Fri, 27 Jun 2025 21:59:51 +0000</pubDate>
      <link>https://forem.com/julianomoreno/-l9j</link>
      <guid>https://forem.com/julianomoreno/-l9j</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/julianomoreno/what-still-prevents-qa-from-being-strategic-and-how-to-change-the-game-1kep" class="crayons-story__hidden-navigation-link"&gt;What still prevents QA from being strategic? (And how to change the game)&lt;/a&gt;


  &lt;div class="crayons-story__body crayons-story__body-full_post"&gt;
    &lt;div class="crayons-story__top"&gt;
      &lt;div class="crayons-story__meta"&gt;
        &lt;div class="crayons-story__author-pic"&gt;

          &lt;a href="/julianomoreno" class="crayons-avatar  crayons-avatar--l  "&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%2Fuser%2Fprofile_image%2F1192176%2Ffe9205ad-6cff-4543-9d86-c1f8013b999d.jpeg" alt="julianomoreno profile" class="crayons-avatar__image" width="800" height="600"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/julianomoreno" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Juliano Moreno
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Juliano Moreno
                
              
              &lt;div id="story-author-preview-content-2631076" class="profile-preview-card__content crayons-dropdown branded-7 p-4 pt-0"&gt;
                &lt;div class="gap-4 grid"&gt;
                  &lt;div class="-mt-4"&gt;
                    &lt;a href="/julianomoreno" class="flex"&gt;
                      &lt;span class="crayons-avatar crayons-avatar--xl mr-2 shrink-0"&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%2Fuser%2Fprofile_image%2F1192176%2Ffe9205ad-6cff-4543-9d86-c1f8013b999d.jpeg" class="crayons-avatar__image" alt="" width="800" height="600"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Juliano Moreno&lt;/span&gt;
                    &lt;/a&gt;
                  &lt;/div&gt;
                  &lt;div class="print-hidden"&gt;
                    
                      Follow
                    
                  &lt;/div&gt;
                  &lt;div class="author-preview-metadata-container"&gt;&lt;/div&gt;
                &lt;/div&gt;
              &lt;/div&gt;
            &lt;/div&gt;

          &lt;/div&gt;
          &lt;a href="https://dev.to/julianomoreno/what-still-prevents-qa-from-being-strategic-and-how-to-change-the-game-1kep" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 27 '25&lt;/time&gt;&lt;span class="time-ago-indicator-initial-placeholder"&gt;&lt;/span&gt;&lt;/a&gt;
        &lt;/div&gt;
      &lt;/div&gt;

    &lt;/div&gt;

    &lt;div class="crayons-story__indention"&gt;
      &lt;h2 class="crayons-story__title crayons-story__title-full_post"&gt;
        &lt;a href="https://dev.to/julianomoreno/what-still-prevents-qa-from-being-strategic-and-how-to-change-the-game-1kep" id="article-link-2631076"&gt;
          What still prevents QA from being strategic? (And how to change the game)
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/strategicqa"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;strategicqa&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/sharedresponsibility"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;sharedresponsibility&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/softwarequality"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;softwarequality&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/qualityengineering"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;qualityengineering&lt;/a&gt;
        &lt;/div&gt;
      &lt;div class="crayons-story__bottom"&gt;
        &lt;div class="crayons-story__details"&gt;
            &lt;a href="https://dev.to/julianomoreno/what-still-prevents-qa-from-being-strategic-and-how-to-change-the-game-1kep#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              Comments


              &lt;span class="hidden s:inline"&gt;Add Comment&lt;/span&gt;
            &lt;/a&gt;
        &lt;/div&gt;
        &lt;div class="crayons-story__save"&gt;
          &lt;small class="crayons-story__tertiary fs-xs mr-2"&gt;
            4 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success"&gt;
                

              &lt;/span&gt;
            
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>strategicqa</category>
      <category>sharedresponsibility</category>
      <category>softwarequality</category>
      <category>qualityengineering</category>
    </item>
    <item>
      <title>What still prevents QA from being strategic? (And how to change the game)</title>
      <dc:creator>Juliano Moreno</dc:creator>
      <pubDate>Fri, 27 Jun 2025 15:39:35 +0000</pubDate>
      <link>https://forem.com/julianomoreno/what-still-prevents-qa-from-being-strategic-and-how-to-change-the-game-1kep</link>
      <guid>https://forem.com/julianomoreno/what-still-prevents-qa-from-being-strategic-and-how-to-change-the-game-1kep</guid>
      <description>&lt;p&gt;&lt;strong&gt;By Juliano Moreno&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;QA Specialist | Platform Engineering&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Everyone already understands (or pretends to understand) that quality is everyone's responsibility. That testing isn't just done at the end. That automation is essential. That QA isn't a phase, it's a flow.&lt;/p&gt;

&lt;p&gt;But the question remains relevant:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;If the theory is so clear, why does nothing change in practice?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Squads continue to outsource quality to QA. Developers keep pushing code without coverage. PMs continue to prioritize speed and deliver technical debt. And QA is still called at the end with a simple: "Can you validate this for us?"&lt;/p&gt;

&lt;p&gt;The culture of quality remains just talk.&lt;/p&gt;




&lt;h2&gt;
  
  
  The biggest barrier isn't technical. It's a lazy mindset. And a lack of courage.
&lt;/h2&gt;

&lt;p&gt;What's missing isn't a tool. It's commitment.&lt;br&gt;
It's not more pipelines that will save us. It's a change in behavior.&lt;/p&gt;

&lt;p&gt;Companies say quality is a priority — but they keep QA isolated.&lt;br&gt;
Developers say they test — but they leave 80% of coverage for QA.&lt;br&gt;
PMs say they trust the team — but they don't involve QA in conception.&lt;br&gt;
And QAs themselves often wait to be called instead of prompting change.&lt;/p&gt;




&lt;h2&gt;
  
  
  The truth is simple (and uncomfortable):
&lt;/h2&gt;

&lt;p&gt;As long as QA is seen as the "delivery guarantor," engineering will continue to make mistakes with confidence.&lt;/p&gt;




&lt;h2&gt;
  
  
  Three behaviors that still hinder evolution
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. QA as a ready-code inspector
&lt;/h3&gt;

&lt;p&gt;If you call QA after everything has been delivered, you don't want quality.&lt;br&gt;
You want someone to clean up the mess.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Developer as a feature delivery person
&lt;/h3&gt;

&lt;p&gt;Code without tests, without rollback, without contract, without traceability.&lt;br&gt;
But the commit is there: "finished successfully."&lt;/p&gt;

&lt;h3&gt;
  
  
  3. PM as a backlog dispatcher
&lt;/h3&gt;

&lt;p&gt;"Deliver first, then we'll see if it's good."&lt;br&gt;
Let the customer experience suffer.&lt;/p&gt;




&lt;h2&gt;
  
  
  What each role needs to face head-on
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Developers
&lt;/h3&gt;

&lt;p&gt;If you think testing is QA's job, you're not an engineer.&lt;br&gt;
You're a code assembler hoping it works out.&lt;br&gt;
&lt;strong&gt;If your code has no coverage, it's not ready. Period.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Tech Leads
&lt;/h3&gt;

&lt;p&gt;If you don't demand tests, don't prioritize observability, and don't ensure testable architecture, you're leading the squad towards silent chaos.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The responsibility for failures that only appear in production is yours.&lt;/strong&gt;&lt;br&gt;
Don't outsource it to QA.&lt;/p&gt;




&lt;h4&gt;
  
  
  Product Managers / POs
&lt;/h4&gt;

&lt;p&gt;If your measure of success is just on-time delivery, you're delivering wrong.&lt;br&gt;
A feature with a bug isn't delivery.&lt;br&gt;
It's cost, rework, and loss of trust disguised as value.&lt;/p&gt;




&lt;h3&gt;
  
  
  QAs
&lt;/h3&gt;

&lt;p&gt;If you're still waiting to be triggered to "validate," you're behind.&lt;br&gt;
If you don't master tools, automation, test architecture, CI/CD, and risk analysis, your relevance is in countdown.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;You're not here to validate.&lt;br&gt;
You're here to build quality together — from the start.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Do we really need a QA Coach?
&lt;/h2&gt;

&lt;p&gt;The concept of a QA Coach can be valuable in contexts where the quality culture is still in its early stages. However, it's important to reflect: if &lt;strong&gt;Quality Engineers and QA Managers&lt;/strong&gt; can operate at their full potential, fostering the culture and practices from conception, the role of a QA Coach can naturally integrate into their responsibilities. Perhaps the issue isn't creating a new function, but rather empowering and demanding more from existing ones. What we truly need is more &lt;strong&gt;courage to apply what we already know.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  The right structure already exists — but needs to be taken seriously
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Strategic Quality Engineer
&lt;/h3&gt;

&lt;p&gt;Translates quality policy into concrete technical decisions.&lt;br&gt;
Doesn't execute tests. They provoke, structure, and ensure the team delivers reliability.&lt;/p&gt;

&lt;h3&gt;
  
  
  QA Lead / Manager
&lt;/h3&gt;

&lt;p&gt;Defines strategy, governs practices, and measures the real impact of quality.&lt;br&gt;
If limited to tracking bugs per squad? It's underutilized.&lt;/p&gt;




&lt;h2&gt;
  
  
  The real transformation only begins when everyone stops hiding behind QA
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;A developer who doesn't test is scheduled rework.&lt;/li&gt;
&lt;li&gt;A PM who ignores QA in discovery is prioritizing failure.&lt;/li&gt;
&lt;li&gt;A Tech Lead who doesn't demand technical quality is just managing delivery, not leading.&lt;/li&gt;
&lt;li&gt;A QA who doesn't challenge the team is settling for the role of a filter.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Senior leadership is the pillar of quality
&lt;/h2&gt;

&lt;p&gt;Quality culture doesn't just sprout from the ground. It is &lt;strong&gt;sown and cultivated by leadership&lt;/strong&gt;. If directors, VPs, and CTOs don't embody quality, don't demand it, and don't reward it, all foundational efforts will be in vain. It is the role of senior management to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Define &lt;strong&gt;quality as a strategic and non-negotiable priority&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Invest in &lt;strong&gt;training and upskilling&lt;/strong&gt; to raise the technical bar for all of engineering.&lt;/li&gt;
&lt;li&gt;Adjust &lt;strong&gt;incentive systems&lt;/strong&gt;: Reward teams for quality and stability, not just raw delivery speed. Costly production errors should lead to reflection and learning, not just temporary fixes.&lt;/li&gt;
&lt;li&gt;Break down silos: Encourage collaboration and shared responsibility, making it clear that quality is a &lt;strong&gt;success metric for the entire product&lt;/strong&gt;, not just a single team or individual.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Change hurts, but the cost of non-quality hurts more
&lt;/h2&gt;

&lt;p&gt;Thinking that "speed" means delivering anything quickly is an expensive illusion. A bug in production isn't just an inconvenience; it's &lt;strong&gt;direct damage&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Rework: The time spent fixing post-launch bugs is far greater than preventing them early on.&lt;/li&gt;
&lt;li&gt;Revenue loss: Frustrated customers migrate to competitors.&lt;/li&gt;
&lt;li&gt;Brand damage: Your company's reputation is harmed.&lt;/li&gt;
&lt;li&gt;Operational cost: Incidents generate overtime, on-call teams, and can even lead to fines or compliance issues.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;View quality as a &lt;strong&gt;strategic investment&lt;/strong&gt;, not a cost. Every hour invested in prevention is a saving of days (or weeks!) of future headaches and losses.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusion: Who has the courage to build quality?
&lt;/h2&gt;

&lt;p&gt;QA won't disappear. But those who don't evolve will.&lt;br&gt;
The squad that still treats QA as the final stage has already lost. They just haven't realized it yet.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The question isn't "who tests."&lt;br&gt;
The question is: &lt;strong&gt;who has the courage to ensure that quality is being built every day — from the first commit?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;And, more importantly: &lt;strong&gt;who has the courage to be the voice of quality, even when it's unpopular or challenges the status quo?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>strategicqa</category>
      <category>sharedresponsibility</category>
      <category>softwarequality</category>
      <category>qualityengineering</category>
    </item>
    <item>
      <title>O que ainda impede o QA de ser estratégico? (E como virar o jogo)</title>
      <dc:creator>Juliano Moreno</dc:creator>
      <pubDate>Fri, 27 Jun 2025 14:37:46 +0000</pubDate>
      <link>https://forem.com/julianomoreno/o-que-ainda-impede-o-qa-de-ser-estrategico-e-como-virar-o-jogo-492k</link>
      <guid>https://forem.com/julianomoreno/o-que-ainda-impede-o-qa-de-ser-estrategico-e-como-virar-o-jogo-492k</guid>
      <description>&lt;p&gt;&lt;strong&gt;Por Juliano Moreno&lt;/strong&gt;&lt;br&gt;
&lt;em&gt;QA Specialist | Engenharia de Plataforma&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Todo mundo já entendeu (ou fingiu que entendeu) que qualidade é responsabilidade de todos. Que não se testa só no fim. Que automação é essencial. Que QA não é fase, é fluxo.&lt;/p&gt;

&lt;p&gt;Mas a pergunta segue atual:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Se a teoria é tão clara, por que na prática nada muda?&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Squads continuam terceirizando a qualidade para o QA. Desenvolvedores continuam empurrando código sem cobertura. PMs continuam priorizando velocidade e entregando dívida. E o QA continua sendo chamado no fim com um singelo: &lt;strong&gt;“Pode validar pra gente?”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A cultura da qualidade continua sendo só discurso.&lt;/p&gt;




&lt;h2&gt;
  
  
  A maior barreira não é técnica. É mentalidade preguiçosa. E falta de coragem.
&lt;/h2&gt;

&lt;p&gt;O que falta não é ferramenta. É compromisso.&lt;br&gt;
Não é mais pipeline que vai salvar. É mudança de comportamento.&lt;/p&gt;

&lt;p&gt;As empresas dizem que qualidade é prioridade — mas mantêm o QA isolado.&lt;br&gt;
Os desenvolvedores dizem que testam — mas deixam 80% da cobertura para o QA.&lt;br&gt;
Os PMs dizem que confiam no time — mas não envolvem QA na concepção.&lt;br&gt;
E os próprios QAs, muitas vezes, esperam ser chamados ao invés de provocar a mudança.&lt;/p&gt;




&lt;h2&gt;
  
  
  A verdade é simples (e desconfortável):
&lt;/h2&gt;

&lt;p&gt;Enquanto o QA for visto como o "garantidor da entrega", a engenharia vai continuar errando com confiança.&lt;/p&gt;




&lt;h2&gt;
  
  
  Três comportamentos que ainda travam a evolução
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. QA como fiscal de código pronto
&lt;/h3&gt;

&lt;p&gt;Se você chama o QA depois que tudo foi entregue, você não quer qualidade.&lt;br&gt;
Você quer alguém para limpar a bagunça.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Desenvolvedor como entregador de feature
&lt;/h3&gt;

&lt;p&gt;Código sem teste, sem rollback, sem contrato, sem rastreabilidade.&lt;br&gt;
Mas o commit está lá: "finalizado com sucesso".&lt;/p&gt;

&lt;h3&gt;
  
  
  3. PM como despachante de backlog
&lt;/h3&gt;

&lt;p&gt;"Entrega primeiro, depois a gente vê se está bom".&lt;br&gt;
A experiência do cliente que lute.&lt;/p&gt;




&lt;h2&gt;
  
  
  O que cada papel precisa encarar de frente
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Desenvolvedores
&lt;/h3&gt;

&lt;p&gt;Se você acha que testar é trabalho do QA, você não é engenheiro.&lt;br&gt;
Você é um montador de código que torce para dar certo.&lt;br&gt;
&lt;strong&gt;Se seu código não tem cobertura, não está pronto. Ponto.&lt;/strong&gt;&lt;/p&gt;




&lt;h3&gt;
  
  
  Tech Leads
&lt;/h3&gt;

&lt;p&gt;Se você não exige testes, não prioriza observabilidade e não garante arquitetura testável, está liderando a squad rumo ao caos silencioso.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A responsabilidade pela falha que só aparece em produção é sua.&lt;/strong&gt;&lt;br&gt;
Não adianta terceirizar para o QA.&lt;/p&gt;




&lt;h3&gt;
  
  
  Product Managers / POs
&lt;/h3&gt;

&lt;p&gt;Se sua régua de sucesso é só entrega no prazo, você está entregando errado.&lt;br&gt;
Feature com bug não é entrega.&lt;br&gt;
É custo, retrabalho e perda de confiança disfarçados de valor.&lt;/p&gt;




&lt;h3&gt;
  
  
  QAs
&lt;/h3&gt;

&lt;p&gt;Se você ainda está esperando ser acionado para "validar", você está atrasado.&lt;br&gt;
Se você não domina ferramentas, automação, arquitetura de testes, CI/CD e análise de risco, sua relevância está em contagem regressiva.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Você não está aqui para validar.&lt;br&gt;
Está aqui para construir qualidade junto — desde o começo.&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Precisamos mesmo de um QA Coach?
&lt;/h2&gt;

&lt;p&gt;O conceito de QA Coach pode ser valioso em contextos onde a cultura de qualidade ainda está em estágios iniciais. No entanto, é importante refletir: se os &lt;strong&gt;Engenheiros de Qualidade e QA Managers&lt;/strong&gt; conseguem atuar em seu potencial máximo, fomentando a cultura e as práticas desde a concepção, o papel de um QA Coach pode se integrar naturalmente às suas responsabilidades. Talvez a questão não seja criar uma nova função, mas sim empoderar e exigir mais das que já existem. O que realmente precisamos é de mais &lt;strong&gt;coragem para aplicar o que já sabemos&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  A estrutura certa já existe — mas precisa ser ocupada com seriedade
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Engenheiro de qualidade estratégico
&lt;/h3&gt;

&lt;p&gt;Traduz a política de qualidade em decisões técnicas concretas.&lt;br&gt;
Não executa testes. Ele provoca, estrutura e garante que o time entregue confiabilidade.&lt;/p&gt;

&lt;h3&gt;
  
  
  QA Lead / Manager
&lt;/h3&gt;

&lt;p&gt;Define a estratégia, governa as práticas e mede o impacto real da qualidade.&lt;br&gt;
Se limita a acompanhar bug por squad? Está subutilizado.&lt;/p&gt;




&lt;h2&gt;
  
  
  A real transformação só começa quando todo mundo para de se esconder atrás do QA
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Desenvolvedor que não testa é retrabalho programado.&lt;/li&gt;
&lt;li&gt;PM que ignora QA no discovery está priorizando falha.&lt;/li&gt;
&lt;li&gt;Tech Lead que não cobra qualidade técnica está só gerenciando entrega, não liderando.&lt;/li&gt;
&lt;li&gt;QA que não desafia o time está se contentando com o papel de filtro.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  A liderança sênior é o pilar da qualidade
&lt;/h2&gt;

&lt;p&gt;A cultura de qualidade não brota do chão. Ela é &lt;strong&gt;semeada e cultivada pela liderança&lt;/strong&gt;. Se diretores, VPs e CTOs não respiram qualidade, não a cobram e não a recompensam, todo o esforço de base será em vão. É papel da alta gestão:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Definir a &lt;strong&gt;qualidade como prioridade estratégica e inegociável&lt;/strong&gt;.&lt;/li&gt;
&lt;li&gt;Investir em &lt;strong&gt;treinamento e capacitação&lt;/strong&gt; para elevar a régua técnica de toda a engenharia.&lt;/li&gt;
&lt;li&gt;Ajustar os &lt;strong&gt;sistemas de incentivo&lt;/strong&gt;: Recompense times pela qualidade e estabilidade, não apenas pela velocidade de entrega bruta. Erros caros em produção devem gerar reflexão e aprendizado, não apenas correção pontual.&lt;/li&gt;
&lt;li&gt;Quebrar silos: Incentive a colaboração e a responsabilidade compartilhada, deixando claro que a qualidade é uma &lt;strong&gt;métrica de sucesso de todo o produto&lt;/strong&gt;, não de um único time ou indivíduo.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Mudar dói, mas o custo da não-qualidade dói mais
&lt;/h2&gt;

&lt;p&gt;Achar que "velocidade" é entregar qualquer coisa rápido é uma ilusão que custa caro. Um bug em produção não é só um incômodo; é &lt;strong&gt;prejuízo direto&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Retrabalho: O tempo gasto para corrigir bugs pós-lançamento é muito maior do que preveni-los no início.&lt;/li&gt;
&lt;li&gt;Perda de receita: Clientes frustrados migram para a concorrência.&lt;/li&gt;
&lt;li&gt;Dano à marca: A reputação da sua empresa é abalada.&lt;/li&gt;
&lt;li&gt;Custo operacional: Incidentes geram horas extras, equipes de plantão, e podem até levar a multas ou problemas de conformidade.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Encare a qualidade como um &lt;strong&gt;investimento estratégico&lt;/strong&gt;, não um custo. Cada hora investida em prevenção é uma economia de dias (ou semanas!) de dor de cabeça e prejuízo futuro.&lt;/p&gt;




&lt;h2&gt;
  
  
  Conclusão: Quem tem coragem de construir qualidade?
&lt;/h2&gt;

&lt;p&gt;O QA não vai acabar. Mas quem não evoluir, vai.&lt;br&gt;
A squad que ainda trata o QA como etapa final já perdeu. Só não percebeu.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;A pergunta não é “quem testa”.&lt;br&gt;
A pergunta é: &lt;strong&gt;quem tem coragem de garantir que a qualidade está sendo construída todos os dias — desde o primeiro commit?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;E, mais importante: &lt;strong&gt;quem tem a coragem de ser a voz da qualidade, mesmo quando ela é impopular ou desafia o status quo?&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>qa</category>
      <category>engenhariaqualidade</category>
      <category>qualidadedesoftware</category>
    </item>
  </channel>
</rss>
