<?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: Lazypl82</title>
    <description>The latest articles on DEV Community by Lazypl82 (@lazypl82).</description>
    <link>https://dev.to/lazypl82</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%2F3793705%2Fa44b5cbf-1996-44c7-a0c5-4e75e6d0aa97.png</url>
      <title>DEV Community: Lazypl82</title>
      <link>https://dev.to/lazypl82</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/lazypl82"/>
    <language>en</language>
    <item>
      <title>Why post-deploy verification deserves its own category</title>
      <dc:creator>Lazypl82</dc:creator>
      <pubDate>Tue, 12 May 2026 04:37:32 +0000</pubDate>
      <link>https://dev.to/lazypl82/why-post-deploy-verification-deserves-its-own-category-1po</link>
      <guid>https://dev.to/lazypl82/why-post-deploy-verification-deserves-its-own-category-1po</guid>
      <description>&lt;p&gt;After a deploy, the hard part is often not the deploy.&lt;/p&gt;

&lt;p&gt;CI has already passed. The rollout has started. Dashboards mostly look normal. Then one small runtime signal moves, and someone has to decide whether it came from this deploy or whether it is just noise.&lt;/p&gt;

&lt;p&gt;That window is short. Usually the first 15 minutes. But it shows up every time a team ships, and the more I worked around it, the less it felt like a normal monitoring problem.&lt;/p&gt;

&lt;h2&gt;
  
  
  The decision is not "is the system healthy"
&lt;/h2&gt;

&lt;p&gt;When I first started, I assumed this was a subset of observability. The signals are runtime signals. The dashboards are the same dashboards. The Sentry events are the same Sentry events.&lt;/p&gt;

&lt;p&gt;But the decision is different.&lt;/p&gt;

&lt;p&gt;Monitoring is mostly about ongoing system state. Is the service up. Are the latencies in range. Are the error rates trending. The decisions monitoring drives are continuous: alert on threshold breach, page on saturation, dashboards for capacity planning.&lt;/p&gt;

&lt;p&gt;The post-deploy decision is much narrower. This deploy went out a few minutes ago. A signal just shifted. Is that shift attributable to the deploy? Is it strong enough to act on? What should happen next?&lt;/p&gt;

&lt;p&gt;Notice that the inputs overlap with monitoring. The decision does not.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why existing observability tools do not close it
&lt;/h2&gt;

&lt;p&gt;The existing stack does inspect the right signals. Datadog can show error rate per service. Sentry can show new exception fingerprints. Grafana can correlate latency to deploy markers.&lt;/p&gt;

&lt;p&gt;What none of them do, by default, is close the decision.&lt;/p&gt;

&lt;p&gt;They give you the inputs. They show you the picture. The interpretation sits in the operator's head: is this fine, is this WATCH, is this RISK. That interpretation is the actual bottleneck.&lt;/p&gt;

&lt;p&gt;In small teams, that bottleneck is invisible because one person knows the deploy, knows the service, sees the dashboards, and makes the call in a few seconds. The mental model is in their head.&lt;/p&gt;

&lt;p&gt;In larger teams, especially in MSA setups where multiple teams ship in parallel, the bottleneck shows up. Service A and Service B both deployed in the last 30 minutes. Error rate is up on a checkout API. Whose deploy is responsible? Should anyone roll back? Whose call is that, and on what evidence?&lt;/p&gt;

&lt;p&gt;The existing stack supplies the data. It does not supply the verdict.&lt;/p&gt;

&lt;h2&gt;
  
  
  What "verdict" means here
&lt;/h2&gt;

&lt;p&gt;I have been calling the output a verdict because that is what it has to be: a closed decision, not another open dashboard.&lt;/p&gt;

&lt;p&gt;The shape that has worked is three states.&lt;/p&gt;

&lt;p&gt;STABLE means the post-deploy window looked normal. Move on.&lt;br&gt;
WATCH means something shifted, but not enough to act. Stay close.&lt;br&gt;
RISK means the pattern is strong enough that doing nothing is the wrong call.&lt;/p&gt;

&lt;p&gt;Two states would have been simpler, and that is what I tried first. But binary collapses the middle, and the post-deploy middle is real. Most days, the verdict is WATCH. The deploy did not break anything outright, but something is moving. The team needs to know that without escalating.&lt;/p&gt;

&lt;p&gt;Three states. STABLE, WATCH, RISK. Each with the affected API, a recommended action, and the next move. Not a chart. Not an alert. A short structured verdict that closes the decision.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the input has to stay narrow
&lt;/h2&gt;

&lt;p&gt;Here is the part I want to be honest about.&lt;/p&gt;

&lt;p&gt;The temptation here is to ingest more. More signals, more derived metrics, more partner-side measurement. The product gets bigger. It looks more capable.&lt;/p&gt;

&lt;p&gt;That is also exactly when this category turns into a worse APM.&lt;/p&gt;

&lt;p&gt;The boundary that keeps this category narrow is on the input side, not the output side. Teams send raw events they already have: error logs, stack traces, deploy markers, environment metadata. They do not measure latency, throughput, p95, ratios, counters, CPU, or memory just to send them somewhere else. The tool derives what it needs from the raw events.&lt;/p&gt;

&lt;p&gt;If a partner has to install something that measures throughput just to use the verification layer, the layer is no longer narrow. It is just another collector with a verdict on top.&lt;/p&gt;

&lt;p&gt;Raw in, verdict out. That is the shape that makes the separate tool make sense. Without that boundary, the category collapses back into monitoring.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why the output has to be readable by agents
&lt;/h2&gt;

&lt;p&gt;There is one more piece that I think matters more than it looks.&lt;/p&gt;

&lt;p&gt;The verdict has to be readable by something other than a human dashboard.&lt;/p&gt;

&lt;p&gt;In modern deploy pipelines, humans are not always the only consumer of deploy outcomes. An internal workflow might need to read the result. An agent might need a decision input. A release process might need a shared object that says what happened after the deploy, without scraping a dashboard or reading a Slack thread.&lt;/p&gt;

&lt;p&gt;A dashboard does not serve those consumers well. A structured verdict does. STABLE, WATCH, RISK as discrete values, plus affected API and decision tier. That shape can be read by an agent and handed to a policy the team owns.&lt;/p&gt;

&lt;p&gt;That second consumer is one of the reasons I stopped trying to make this look like a monitoring tool. Monitoring tools are designed for human reading. Verdict tools have to be readable by both humans and software.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where this leaves the category
&lt;/h2&gt;

&lt;p&gt;I do not think every team needs a separate post-deploy verification tool. Small teams with one engineer per deploy mostly do not. The bottleneck is not visible at that scale.&lt;/p&gt;

&lt;p&gt;The teams where it shows up are the ones where multiple services ship in parallel, where multiple humans need a shared verdict, and where workflows downstream of the deploy need to read structured output.&lt;/p&gt;

&lt;p&gt;For those teams, the post-deploy 15 minutes is not just "a feature your monitoring tool should add". It is its own category, with its own narrow contract: raw events in, structured verdict out. It does not fit cleanly inside an existing observability surface.&lt;/p&gt;

&lt;p&gt;That is the bet I have been working on.&lt;/p&gt;




&lt;p&gt;I am building Relivio, a small verdict layer for the first 15 minutes after a production deploy. If you are working on something similar, or running into the same problem, happy to talk. relivio.dev&lt;/p&gt;

</description>
      <category>devops</category>
      <category>sre</category>
      <category>observability</category>
      <category>deployment</category>
    </item>
  </channel>
</rss>
