<?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: Federico Distaso</title>
    <description>The latest articles on DEV Community by Federico Distaso (@federico_distaso_e410b04d).</description>
    <link>https://dev.to/federico_distaso_e410b04d</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%2F3773792%2F6d0dbf95-1ccc-4f4e-a2c3-8a1e73546913.png</url>
      <title>DEV Community: Federico Distaso</title>
      <link>https://dev.to/federico_distaso_e410b04d</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/federico_distaso_e410b04d"/>
    <language>en</language>
    <item>
      <title>We Broke Staging With a One-Line Config Change (And Didn’t Notice Until It Was Too Late)</title>
      <dc:creator>Federico Distaso</dc:creator>
      <pubDate>Sun, 15 Feb 2026 18:33:11 +0000</pubDate>
      <link>https://dev.to/federico_distaso_e410b04d/we-broke-staging-with-a-one-line-config-change-and-didnt-notice-until-it-was-too-late-3nac</link>
      <guid>https://dev.to/federico_distaso_e410b04d/we-broke-staging-with-a-one-line-config-change-and-didnt-notice-until-it-was-too-late-3nac</guid>
      <description>&lt;p&gt;Last month we broke staging with a one-line configuration change.&lt;br&gt;
Not code.&lt;br&gt;
Not infrastructure.&lt;br&gt;
Not a database migration.&lt;br&gt;
One line in a JSON file.&lt;/p&gt;

&lt;p&gt;Everything passed CI.&lt;br&gt;
Everything deployed successfully.&lt;br&gt;
And then authentication silently started failing.&lt;/p&gt;

&lt;p&gt;Here’s what happened.&lt;br&gt;
The Change That Looked Harmless&lt;br&gt;
We had a typical configuration file:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
  "Api": {
    "BaseUrl": "https://staging.api.internal",
    "Token": "abc123"
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A developer rotated a token and changed it to:&lt;/p&gt;

&lt;p&gt;"Token": "abc13"&lt;br&gt;
The PR looked clean.&lt;/p&gt;

&lt;p&gt;No compilation errors&lt;br&gt;
Tests passed&lt;br&gt;
Linting passed&lt;br&gt;
CI was green&lt;br&gt;
It was merged and deployed.&lt;br&gt;
Within minutes, staging services started returning 401 errors.&lt;br&gt;
Nothing crashed.&lt;br&gt;
No obvious exception.&lt;br&gt;
Just authentication silently failing.&lt;/p&gt;

&lt;p&gt;Why CI Didn’t Catch It&lt;br&gt;
Because CI checks syntax, not impact.&lt;/p&gt;

&lt;p&gt;It validated:&lt;br&gt;
JSON formatting&lt;br&gt;
Unit tests&lt;br&gt;
Build integrity&lt;br&gt;
But it never asked:&lt;/p&gt;

&lt;p&gt;“Did a sensitive value just change?”&lt;br&gt;
The pipeline didn’t know that Token was critical.&lt;br&gt;
It just saw a string change.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Real Problem&lt;/strong&gt;&lt;br&gt;
Configuration files are treated as passive data.&lt;br&gt;
But configuration is behavior.&lt;br&gt;
Changing a token, connection string, endpoint, or feature flag can change system behavior completely.&lt;br&gt;
And yet most pipelines treat config like harmless text.&lt;/p&gt;

&lt;p&gt;A Simple Defensive Pattern&lt;br&gt;
After this incident, we started experimenting with a simple idea:&lt;br&gt;
Snapshot the configuration&lt;br&gt;
Make the change&lt;/p&gt;

&lt;p&gt;Compare snapshots&lt;br&gt;
Enforce a policy&lt;br&gt;
The goal wasn’t to block every change.&lt;br&gt;
The goal was to detect high-risk changes before deployment.&lt;/p&gt;

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

&lt;blockquote&gt;
&lt;p&gt;impactcheck json appsettings.json --snapshot before.json&lt;br&gt;
Modify the file.&lt;/p&gt;

&lt;p&gt;impactcheck json appsettings.json --snapshot after.json&lt;br&gt;
impactcheck diff before.json after.json --policy strict&lt;br&gt;
If a sensitive key changes (like Token, ConnectionString, or an endpoint), the tool exits with:&lt;br&gt;
1&lt;br&gt;
Which can block CI automatically.&lt;br&gt;
Instead of discovering the issue in staging,&lt;br&gt;
you discover it in the pull request.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Extending the Idea&lt;br&gt;
The same thinking applies to:&lt;br&gt;
XML config files&lt;br&gt;
.config files in .NET apps&lt;br&gt;
Even system-level DLL changes&lt;br&gt;
A replaced DLL might be loaded by multiple Windows services.&lt;br&gt;
A small change might have a large blast radius.&lt;/p&gt;

&lt;p&gt;The key idea is always the same:&lt;br&gt;
Measure impact before deploy.&lt;br&gt;
Why This Matters&lt;br&gt;
Most production incidents aren’t caused by exotic distributed system failures.&lt;/p&gt;

&lt;p&gt;They’re caused by:&lt;br&gt;
Misconfigured tokens&lt;br&gt;
Wrong endpoints&lt;br&gt;
Invalid connection strings&lt;br&gt;
Configuration drift&lt;br&gt;
They look harmless in a diff.&lt;br&gt;
But they change system behavior.&lt;/p&gt;

&lt;p&gt;We review code carefully.&lt;br&gt;
We test infrastructure carefully.&lt;br&gt;
Maybe it’s time we treat configuration with the same respect.&lt;/p&gt;

&lt;p&gt;If you’ve ever had a staging or production issue caused by a config change,&lt;br&gt;
I’d love to hear about it.&lt;/p&gt;

&lt;p&gt;Project:&lt;br&gt;
[&lt;a href="https://github.com/fede456/ImpactCheck-v1.0.0-Windows/releases/tag/v1.0.0" rel="noopener noreferrer"&gt;https://github.com/fede456/ImpactCheck-v1.0.0-Windows/releases/tag/v1.0.0&lt;/a&gt;]&lt;/p&gt;

</description>
      <category>security</category>
      <category>cicd</category>
      <category>webdev</category>
      <category>infrastructure</category>
    </item>
    <item>
      <title>How a Small Config Change Can Silently Break Production (And How to Prevent It Automatically)</title>
      <dc:creator>Federico Distaso</dc:creator>
      <pubDate>Sun, 15 Feb 2026 09:39:11 +0000</pubDate>
      <link>https://dev.to/federico_distaso_e410b04d/how-a-small-config-change-can-silently-break-production-and-how-to-prevent-it-automatically-2agh</link>
      <guid>https://dev.to/federico_distaso_e410b04d/how-a-small-config-change-can-silently-break-production-and-how-to-prevent-it-automatically-2agh</guid>
      <description>&lt;p&gt;Configuration changes are one of the most underestimated causes of production incidents.&lt;/p&gt;

&lt;p&gt;Not code.&lt;br&gt;
Not infrastructure.&lt;br&gt;
Configuration.&lt;/p&gt;

&lt;p&gt;A single token rotation.&lt;br&gt;
A modified connection string.&lt;br&gt;
A changed endpoint.&lt;/p&gt;

&lt;p&gt;Everything compiles.&lt;br&gt;
Everything deploys.&lt;br&gt;
And then something quietly breaks.&lt;/p&gt;

&lt;p&gt;Let me show you why this happens — and how to prevent it automatically.&lt;br&gt;
The Real Problem&lt;br&gt;
In many teams, configuration files like:&lt;/p&gt;

&lt;p&gt;appsettings.json&lt;br&gt;
App.config&lt;br&gt;
web.config&lt;/p&gt;

&lt;p&gt;environment-specific JSON&lt;br&gt;
are treated as “safe”.&lt;br&gt;
They are versioned.&lt;br&gt;
They are reviewed.&lt;br&gt;
They go through CI.&lt;/p&gt;

&lt;p&gt;But here’s the issue:&lt;br&gt;
Most pipelines validate syntax, not impact.&lt;br&gt;
If someone changes this:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{&lt;br&gt;
  "Api": {&lt;br&gt;
    "Token": "abc123"&lt;br&gt;
  }&lt;br&gt;
}&lt;/code&gt;&lt;br&gt;
to:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;{&lt;br&gt;
  "Api": {&lt;br&gt;
    "Token": "abc13"&lt;br&gt;
  }&lt;br&gt;
}&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Nothing fails.&lt;br&gt;
Build passes.&lt;br&gt;
Tests pass.&lt;br&gt;
Deployment succeeds.&lt;br&gt;
But the token is invalid.&lt;br&gt;
Production fails at runtime.&lt;/p&gt;

&lt;p&gt;Why This Is Hard to Catch&lt;br&gt;
Because CI usually checks:&lt;br&gt;
compilation&lt;br&gt;
unit tests&lt;br&gt;
formatting&lt;br&gt;
linting&lt;br&gt;
It rarely answers:&lt;/p&gt;

&lt;p&gt;“Did this change modify a sensitive value?”&lt;/p&gt;

&lt;p&gt;Or:&lt;/p&gt;

&lt;p&gt;“Did we just alter something that affects authentication, networking, or database access?”&lt;br&gt;
That’s the blind spot.&lt;/p&gt;

&lt;p&gt;A Practical Solution: Snapshot + Diff + Policy&lt;br&gt;
I built a small Windows CLI tool called ImpactCheck to explore this problem.&lt;/p&gt;

&lt;p&gt;The idea is simple:&lt;br&gt;
Take a snapshot of the configuration&lt;br&gt;
Modify the file&lt;br&gt;
Compare snapshots&lt;br&gt;
Enforce a policy&lt;/p&gt;

&lt;p&gt;Example:&lt;br&gt;
impactcheck json appsettings.json --snapshot before.json&lt;br&gt;
Modify the file.&lt;br&gt;
impactcheck json appsettings.json --snapshot after.json&lt;br&gt;
impactcheck diff before.json after.json --policy strict&lt;br&gt;
If a sensitive value changes (like a token or connection string),&lt;br&gt;
the tool exits with:&lt;br&gt;
1&lt;br&gt;
Which can block CI automatically.&lt;/p&gt;

&lt;p&gt;Example Output&lt;br&gt;
~ Changed findings (1):&lt;br&gt;
  ~ JSON_KEY|Api:Token&lt;br&gt;
     Value: CHANGED&lt;br&gt;
That’s it.&lt;/p&gt;

&lt;p&gt;No AI.&lt;br&gt;
No magic.&lt;br&gt;
Just deterministic analysis of risky configuration changes.&lt;/p&gt;

&lt;p&gt;DLL Impact (Windows-specific)&lt;br&gt;
Configuration isn’t the only blind spot.&lt;/p&gt;

&lt;p&gt;Replacing or patching a DLL without understanding which services are using it can also cause issues.&lt;/p&gt;

&lt;p&gt;ImpactCheck can scan a DLL and:&lt;br&gt;
Enumerate processes loading it&lt;br&gt;
Map them to Windows services&lt;br&gt;
Highlight potential high-impact changes&lt;br&gt;
Example:&lt;br&gt;
impactcheck dll C:\Windows\System32\sechost.dll&lt;br&gt;
This makes system-level changes more visible before they cause runtime issues.&lt;/p&gt;

&lt;p&gt;Why This Matters&lt;br&gt;
Many outages are not caused by complex distributed system failures.&lt;/p&gt;

&lt;p&gt;They are caused by:&lt;br&gt;
config drift&lt;br&gt;
token mistakes&lt;br&gt;
wrong environment endpoints&lt;br&gt;
subtle value changes&lt;br&gt;
We treat configuration as text.&lt;br&gt;
But in reality, configuration is behavior.&lt;br&gt;
And behavior changes should be measurable.&lt;br&gt;
What I’d Love Feedback On&lt;/p&gt;

&lt;p&gt;I’m currently exploring:&lt;br&gt;
Better risk classification patterns&lt;br&gt;
CI/CD integration workflows&lt;br&gt;
Real-world config edge cases&lt;br&gt;
Enterprise policy use cases&lt;br&gt;
If you’ve experienced production issues caused by configuration changes,&lt;br&gt;
I’d love to hear about it.&lt;/p&gt;

&lt;p&gt;Project link:&lt;br&gt;
[&lt;a href="https://github.com/fede456/ImpactCheck-v1.0.0-Windows/releases/tag/v1.0.0" rel="noopener noreferrer"&gt;https://github.com/fede456/ImpactCheck-v1.0.0-Windows/releases/tag/v1.0.0&lt;/a&gt;]&lt;/p&gt;

</description>
      <category>devops</category>
      <category>cicd</category>
      <category>dotnet</category>
      <category>security</category>
    </item>
  </channel>
</rss>
