<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Cyber Technology</title>
    <description>The latest articles on DEV Community by Cyber Technology (@cybertechnology_sh).</description>
    <link>https://dev.to/cybertechnology_sh</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4072261%2Fbbb615c4-e156-46a9-b8dd-38741bd559de.png</url>
      <title>DEV Community: Cyber Technology</title>
      <link>https://dev.to/cybertechnology_sh</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/cybertechnology_sh"/>
    <language>en</language>
    <item>
      <title>A green pipeline isn't the same thing as a safe deploy</title>
      <dc:creator>Cyber Technology</dc:creator>
      <pubDate>Wed, 12 Aug 2026 16:39:39 +0000</pubDate>
      <link>https://dev.to/cybertechnology_sh/a-green-pipeline-isnt-the-same-thing-as-a-safe-deploy-204</link>
      <guid>https://dev.to/cybertechnology_sh/a-green-pipeline-isnt-the-same-thing-as-a-safe-deploy-204</guid>
      <description>&lt;p&gt;Every team eventually builds the same mental shortcut: green pipeline means it's safe to ship. Tests passed, the build compiled, the checks are all checkmarks. Merge, deploy, move on.&lt;/p&gt;

&lt;p&gt;That shortcut is wrong more often than most postmortems admit, and it's wrong in a specific, repeatable way: &lt;strong&gt;CI/CD pipelines are very good at verifying that code does what it's supposed to do, and almost silent about whether the environment it's about to land in still matches the one it was tested against.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Three places this gap actually bites, in order of how often I've seen each one cause a real incident.&lt;/p&gt;

&lt;h2&gt;
  
  
  1. The test suite passed against a database that no longer looks like production
&lt;/h2&gt;

&lt;p&gt;Migrations are the classic case. A pipeline runs unit and integration tests against a freshly-migrated test database, everything's green, and the deploy goes out. What the pipeline didn't check: whether that migration is actually safe to run against a production table with real row counts, real lock contention, and real traffic hitting it mid-migration.&lt;/p&gt;

&lt;p&gt;A migration that adds a &lt;code&gt;NOT NULL&lt;/code&gt; column with no default locks the table for the duration of the backfill on most engines. On a test database with a thousand rows, that's invisible — it finishes before you'd notice. On a production table with tens of millions of rows, it can hold a lock long enough to back up every write for minutes, which looks nothing like "the tests failed" and everything like "the site is down."&lt;/p&gt;

&lt;p&gt;The fix isn't a smarter test — it's a different question in the pipeline: not "does this migration produce the right schema," but "is this migration safe to run online, at this table's actual size, without an explicit maintenance window." That's a check most CI setups never encode, because it requires knowing something about production the pipeline usually isn't told.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. The deploy succeeded, but nobody ever tested the rollback
&lt;/h2&gt;

&lt;p&gt;Almost every deploy pipeline is optimized to answer one question: did the new version start successfully? Very few are set up to actually exercise the answer to "if this version is bad, can we get back to the old one without a human improvising at 2am?"&lt;/p&gt;

&lt;p&gt;Rollback usually gets tested for the first time during an actual incident, which is the worst possible time to discover that the previous image was already garbage-collected off the registry, or that a schema migration in the new release isn't backward-compatible with the old code, or that a feature flag the new version depends on doesn't exist in the old one's code path.&lt;/p&gt;

&lt;p&gt;If a pipeline can deploy a version, it should also be able to prove it can un-deploy that version, on a schedule, not just in theory. That's a genuinely different pipeline stage than "ship the new thing" — most teams have the first and skip the second.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Staging is green because staging quietly drifted from what production actually runs
&lt;/h2&gt;

&lt;p&gt;This is the slow one. Staging starts as an accurate mirror of production. Six months later, staging is running a slightly older version of a managed service, a smaller instance class, a different set of feature flags, or a mocked-out third-party dependency that production talks to for real. Every pipeline run against staging is honestly green — the code really does work, in an environment that no longer represents what it's about to be deployed into.&lt;/p&gt;

&lt;p&gt;Nobody decides to let this happen. It accumulates one small, individually-reasonable shortcut at a time: "let's just mock that API in staging for now," "we'll upgrade staging's database version next sprint." Each shortcut is fine in isolation. The sum of them is a green pipeline that's answering a question nobody's actually asking anymore.&lt;/p&gt;

&lt;p&gt;The only real defense is treating environment parity as something that gets checked, not assumed — a periodic, automated diff between staging's actual configuration and production's, not a one-time setup step everyone trusts forever after.&lt;/p&gt;

&lt;h2&gt;
  
  
  The pattern underneath all three
&lt;/h2&gt;

&lt;p&gt;None of these are exotic failures. They're the ordinary, boring result of a pipeline that was built to answer "does the code work" being trusted to also answer "is it safe to put this in front of real traffic right now" — a question it was never actually wired to check.&lt;/p&gt;

&lt;p&gt;Closing that gap isn't about adding more tests in the traditional sense. It's about adding a small number of specific, deliberate checks that ask about the deploy itself, not just the code: is this migration safe at production scale, is rollback actually exercised, does staging still resemble what's about to receive this change. Each one is cheap to build once someone decides it's a gap worth closing — the hard part is noticing the gap exists before an incident points it out.&lt;/p&gt;




&lt;p&gt;I do this kind of infrastructure/CI-CD hardening work professionally through &lt;a href="https://cybertechnology.sh?ref=devto" rel="noopener noreferrer"&gt;CyberTechnology&lt;/a&gt; — happy to talk through a specific pipeline if any of this sounds familiar.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cicd</category>
      <category>kubernetes</category>
      <category>architecture</category>
    </item>
    <item>
      <title>O padrão que aparece em quase todo produto construído rápido com IA</title>
      <dc:creator>Cyber Technology</dc:creator>
      <pubDate>Tue, 11 Aug 2026 04:05:27 +0000</pubDate>
      <link>https://dev.to/cybertechnology_sh/o-padrao-que-aparece-em-quase-todo-produto-construido-rapido-com-ia-53ko</link>
      <guid>https://dev.to/cybertechnology_sh/o-padrao-que-aparece-em-quase-todo-produto-construido-rapido-com-ia-53ko</guid>
      <description>&lt;p&gt;Um padrão que aparece com frequência em produtos construídos rápido com ferramentas de IA (Lovable, Cursor, Claude Code, N8N, Supabase, entre outras): múltiplos provedores de LLM — Claude, GPT, Gemini — por trás de uma camada de integração fina, sem observabilidade real de custo, latência ou taxa de erro por provedor.&lt;/p&gt;

&lt;p&gt;Funciona perfeitamente até o dia em que:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;um provider degrada e ninguém percebe na hora;&lt;/li&gt;
&lt;li&gt;o custo por chamada dobra silenciosamente;&lt;/li&gt;
&lt;li&gt;um bug de prompt sutil começa a gerar respostas erradas para uma fração dos usuários, e não existe log estruturado para achar isso rápido.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Nada disso é sobre trocar de stack ou "fazer certo desde o início". É sobre colocar instrumentação, circuit breakers e rastreabilidade onde hoje só existe "chama a API e reza" — depois que o produto já está em produção, com clientes de verdade usando.&lt;/p&gt;

&lt;h2&gt;
  
  
  Por que isso é comum, não uma exceção
&lt;/h2&gt;

&lt;p&gt;Ferramentas de IA aceleram muito bem a parte de "fazer funcionar". Elas não respondem — e não deveriam responder — a perguntas como:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;o que acontece quando esse provider está fora do ar?&lt;/li&gt;
&lt;li&gt;como eu sei que uma resposta está errada antes do cliente perceber?&lt;/li&gt;
&lt;li&gt;quanto isso vai custar em escala, e onde está o log que me diz isso?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Essas são perguntas de arquitetura, não de velocidade de entrega. E é exatamente aí que a maioria dos produtos vibe-coded para de crescer sem dor.&lt;/p&gt;

&lt;h2&gt;
  
  
  O que muda na prática
&lt;/h2&gt;

&lt;p&gt;Não é reescrever do zero. É adicionar, em cima do que já existe:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;Observabilidade por provedor&lt;/strong&gt; — custo, latência e taxa de erro separados por Claude/GPT/Gemini/etc, não agregados.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Circuit breakers reais&lt;/strong&gt; — fallback automático quando um provider degrada, não descoberto às 3h da manhã por um cliente reclamando.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Log estruturado de prompt/resposta&lt;/strong&gt; — para conseguir investigar um bug silencioso em minutos, não em dias.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Se o seu produto tem uma camada de IA que ninguém revisou desde que "funcionou na v1", essa é a conversa que vale ter antes que o próximo cliente grande apareça.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Trabalho com arquitetura de cloud, DevOps e produtização de sistemas de IA na &lt;a href="https://cybertechnology.sh" rel="noopener noreferrer"&gt;CyberTechnology&lt;/a&gt;. Se esse padrão descreve onde seu produto está agora, &lt;a href="https://calendly.com/contact-cybertechnology/30min" rel="noopener noreferrer"&gt;marca 20 min&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>devops</category>
      <category>architecture</category>
      <category>braziliandevs</category>
    </item>
  </channel>
</rss>
