<?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: Valerio Uberti</title>
    <description>The latest articles on DEV Community by Valerio Uberti (@valeriouberti).</description>
    <link>https://dev.to/valeriouberti</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%2F4048301%2Fbf20151d-9945-4e08-bc0e-e298f2350c8b.jpg</url>
      <title>DEV Community: Valerio Uberti</title>
      <link>https://dev.to/valeriouberti</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/valeriouberti"/>
    <language>en</language>
    <item>
      <title>Your Microservices Are Hiding a Second Codebase (And Istio Deletes It)</title>
      <dc:creator>Valerio Uberti</dc:creator>
      <pubDate>Fri, 31 Jul 2026 06:08:35 +0000</pubDate>
      <link>https://dev.to/valeriouberti/your-microservices-are-hiding-a-second-codebase-and-istio-deletes-it-2akl</link>
      <guid>https://dev.to/valeriouberti/your-microservices-are-hiding-a-second-codebase-and-istio-deletes-it-2akl</guid>
      <description>&lt;p&gt;Split a monolith into 20 microservices and you don't just multiply deployables, you multiply every cross-cutting concern. TLS, retries, timeouts, trace propagation: suddenly each service carries hundreds of lines of networking code that has nothing to do with your business.&lt;/p&gt;

&lt;p&gt;That's a &lt;strong&gt;shadow codebase&lt;/strong&gt;, and it's usually the least differentiated code you own. Nobody buys your product because your retry logic is elegant.&lt;/p&gt;

&lt;p&gt;The standard fix a shared SDK works until you have more than one language. Then it forks: a Go SDK, a Java SDK, a Node SDK, each implementing "the same" policy slightly differently, each upgrade a rolling migration across every repo.&lt;/p&gt;

&lt;p&gt;A service mesh moves all of it into the infrastructure layer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;mTLS + workload identity&lt;/strong&gt; — automatic certificate issuance and rotation, zero app code [web:4]&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Uniform retries/timeouts&lt;/strong&gt; — declared once in YAML, enforced everywhere&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Free observability&lt;/strong&gt; — metrics, traces, and topology with Prometheus/Jaeger integration out of the box [web:10]&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The honest costs: ~60MB + 0.2 vCPU per sidecar [web:15], added latency per hop (independent benchmarks show +166% for sidecar mTLS vs +8% for ambient mode [web:6]), and a new production system to operate.&lt;/p&gt;

&lt;p&gt;Full write-up with annotated &lt;code&gt;PeerAuthentication&lt;/code&gt; / &lt;code&gt;AuthorizationPolicy&lt;/code&gt; / &lt;code&gt;VirtualService&lt;/code&gt; YAML, benchmarks, and a "when NOT to use a mesh" decision framework:&lt;/p&gt;

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://www.valeriouberti.dev/articles/microservice-are-hiding-a-second-codebase-istio" rel="noopener noreferrer"&gt;Your Microservices Are Hiding a Second Codebase — full article&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;One-line version: &lt;em&gt;a service mesh doesn't make services smarter; it stops them from pretending to be network engineers.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Are you running a mesh in production, or still maintaining networking SDKs per language? What broke first? 👇&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>istio</category>
      <category>servicemesh</category>
      <category>platformengineering</category>
    </item>
    <item>
      <title>Terraform Should Not Deploy Into EKS. ArgoCD Should.</title>
      <dc:creator>Valerio Uberti</dc:creator>
      <pubDate>Wed, 29 Jul 2026 10:17:01 +0000</pubDate>
      <link>https://dev.to/valeriouberti/terraform-should-not-deploy-into-eks-argocd-should-5cii</link>
      <guid>https://dev.to/valeriouberti/terraform-should-not-deploy-into-eks-argocd-should-5cii</guid>
      <description>&lt;p&gt;Many teams use Terraform to provision AWS and then keep going: Helm charts, namespaces, add-ons, even application manifests inside EKS.&lt;/p&gt;

&lt;p&gt;That looks efficient. It is actually the fastest way to blur the boundary between infrastructure and platform.&lt;/p&gt;

&lt;p&gt;The better model is less convenient at first:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;application repo for source code and builds;&lt;/li&gt;
&lt;li&gt;ops repo for Terraform and GitOps manifests;&lt;/li&gt;
&lt;li&gt;Terraform limited to AWS and the EKS perimeter;&lt;/li&gt;
&lt;li&gt;ArgoCD responsible for everything inside the cluster.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The real issue is lifecycle mismatch. VPCs, IAM roles, and node groups change slowly. Kubernetes manifests, platform add-ons, and image tags change constantly. Forcing both layers through Terraform turns infrastructure provisioning into a release engine.&lt;/p&gt;

&lt;p&gt;That is where things break:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;application deploys inherit infrastructure risk;&lt;/li&gt;
&lt;li&gt;rollback becomes heavier than it should be;&lt;/li&gt;
&lt;li&gt;Terraform and ArgoCD can end up fighting over the same cluster state;&lt;/li&gt;
&lt;li&gt;CI pipelines need cluster credentials they should never have.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I wrote the full breakdown here, with repository structure, Terraform examples, ArgoCD manifests, and the exact deployment flow:&lt;/p&gt;

&lt;p&gt;👉 &lt;a href="https://www.valeriouberti.dev/articles/terraform-should-not-deploy-into-eks-argo-should" rel="noopener noreferrer"&gt;Read the full article&lt;/a&gt;&lt;/p&gt;

</description>
      <category>terraform</category>
      <category>eks</category>
      <category>argocd</category>
      <category>gitops</category>
    </item>
    <item>
      <title>Removing kubectl from CI Pipelines: A Slower, More Honest Deployment Model</title>
      <dc:creator>Valerio Uberti</dc:creator>
      <pubDate>Mon, 27 Jul 2026 13:11:30 +0000</pubDate>
      <link>https://dev.to/valeriouberti/removing-kubectl-from-ci-pipelines-a-slower-more-honest-deployment-model-2pn1</link>
      <guid>https://dev.to/valeriouberti/removing-kubectl-from-ci-pipelines-a-slower-more-honest-deployment-model-2pn1</guid>
      <description>&lt;p&gt;Most teams adopt ArgoCD to speed up Kubernetes deployments. &lt;strong&gt;The real value is that it slows them down.&lt;/strong&gt; The shift from push-based CI/CD to pull-based GitOps introduces a 45–60 second reconciliation lag — and eliminates an entire category of incidents.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The full breakdown&lt;/strong&gt; (with code, benchmarks, and the culture gap every platform team hits) is on my blog:&lt;br&gt;&lt;br&gt;
👉 &lt;a href="https://www.valeriouberti.dev/articles/removing-kubectl-from-CI-pipelines" rel="noopener noreferrer"&gt;Read the complete article here&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is the thesis: a CI pipeline should not touch the cluster. It should touch Git. ArgoCD, running inside the cluster, should be the only component that applies manifests.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The counter-intuitive part:&lt;/strong&gt; this adds latency. A 50-second sync lag feels like a regression. But what teams lose in speed, they gain in &lt;em&gt;honesty&lt;/em&gt; automatic drift detection, rollbacks as &lt;code&gt;git revert&lt;/code&gt;, and zero cluster credentials in CI.&lt;/p&gt;

&lt;p&gt;Consider an internal platform serving ~80 engineers. Before GitOps, the platform team fields ~8 support tickets per month just answering "what is actually running?" After the move, that number drops to zero. The trade-off is correct.&lt;/p&gt;

&lt;p&gt;If a platform team is still running &lt;code&gt;kubectl apply&lt;/code&gt; from GitHub Actions, this is worth reading.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tags:&lt;/strong&gt; #kubernetes #gitops #argocd #devops #platform-engineering&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>gitops</category>
      <category>argocd</category>
    </item>
  </channel>
</rss>
