<?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: Arsh Sharma</title>
    <description>The latest articles on DEV Community by Arsh Sharma (@rinkiyakedad).</description>
    <link>https://dev.to/rinkiyakedad</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%2F488212%2F66d9df7f-f08b-481a-8a26-509ab225f79a.jpeg</url>
      <title>DEV Community: Arsh Sharma</title>
      <link>https://dev.to/rinkiyakedad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/rinkiyakedad"/>
    <language>en</language>
    <item>
      <title>Best Microservices Testing Tools for Kubernetes</title>
      <dc:creator>Arsh Sharma</dc:creator>
      <pubDate>Mon, 02 Nov 2026 12:31:24 +0000</pubDate>
      <link>https://dev.to/metalbear/best-microservices-testing-tools-for-kubernetes-2bmn</link>
      <guid>https://dev.to/metalbear/best-microservices-testing-tools-for-kubernetes-2bmn</guid>
      <description>&lt;p&gt;&lt;strong&gt;TLDR:&lt;/strong&gt; There is no single best tool for microservices testing. You need a stack that covers several layers: a test environment (mirrord, Signadot, Telepresence, Okteto, Tilt), test orchestration (Testkube), API testing (Postman), service mocking (WireMock), contract testing (Pact) and load testing (k6). The environment layer matters most, because it decides whether every other tool's results can be trusted or not.&lt;/p&gt;

&lt;p&gt;When teams ask us about microservices testing, the conversation usually starts with tools, when it should start with environments. Testing a monolith is mostly a question of writing good tests. Testing microservices on Kubernetes is a question of &lt;em&gt;where&lt;/em&gt; those tests run, because a microservice can't truly be verified without the services, databases and queues it talks to. Every common workaround has a cost:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Mocks drift away from how the real services behave.&lt;/li&gt;
&lt;li&gt;A shared staging environment turns into a queue where one broken deploy blocks everyone.&lt;/li&gt;
&lt;li&gt;Spinning up a full ephemeral environment for every pull request is slow and gets expensive quickly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And with &lt;a href="https://www.cncf.io/announcements/2026/01/20/kubernetes-established-as-the-de-facto-operating-system-for-ai-as-production-use-hits-82-in-2025-cncf-annual-cloud-native-survey/" rel="noopener noreferrer"&gt;59% of organizations reporting that much or nearly all of their development and deployment is now cloud native&lt;/a&gt; (CNCF Annual Cloud Native Survey 2025), this is a problem most engineering teams now have, not a niche one.&lt;/p&gt;

&lt;p&gt;It hits platform and DevOps engineers who own the clusters, backend developers who need fast feedback, and engineering leaders who pay for all of the above. AI coding agents make it worse. &lt;a href="https://blog.jetbrains.com/research/2026/08/how-much-code-do-developers-really-let-agents-write/" rel="noopener noreferrer"&gt;JetBrains’ 2026 research&lt;/a&gt; found that more than half of all developers now write less than 20% of their code manually, and one in five writes absolutely no code without AI help. Agents produce changes faster than teams can validate them.&lt;/p&gt;

&lt;p&gt;At MetalBear we build mirrord, which connects AI agents and developers to a live cluster so they get real-world context and a real feedback loop, so a lot of our time goes into working through exactly this problem with platform teams at companies like &lt;a href="https://monday.com" rel="noopener noreferrer"&gt;monday.com&lt;/a&gt;, Podium and SurveyMonkey. Many of the tools below come up in those conversations, either as alternatives teams evaluated or as other parts of their testing stack, which is where most of the comparisons in this guide come from.&lt;/p&gt;

&lt;p&gt;In this guide, we'll compare 10 tools grouped by the layer of testing they cover, show them side by side in one table, list a few more worth knowing, and then look at how to combine them into a stack that fits your team.&lt;/p&gt;

&lt;h2&gt;
  
  
  Microservices testing tools compared at a glance
&lt;/h2&gt;

&lt;p&gt;The tools below appear in the same order as in the rest of this article, grouped by category, starting with test environments.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;Isolation model&lt;/th&gt;
&lt;th&gt;Cost&lt;/th&gt;
&lt;th&gt;Best fit&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;mirrord&lt;/td&gt;
&lt;td&gt;Test environments&lt;/td&gt;
&lt;td&gt;Per-session isolation in one shared cluster (&lt;a href="https://metalbear.com/mirrord/docs/using-mirrord/incoming-traffic/filter-incoming-traffic" rel="noopener noreferrer"&gt;traffic filters&lt;/a&gt;, &lt;a href="https://metalbear.com/mirrord/docs/sharing-the-cluster/queue-splitting" rel="noopener noreferrer"&gt;queue splitting&lt;/a&gt;, &lt;a href="https://metalbear.com/mirrord/docs/sharing-the-cluster/db-branching" rel="noopener noreferrer"&gt;DB branching&lt;/a&gt;)&lt;/td&gt;
&lt;td&gt;Open source free; Team $50/seat/mo (20% less billed annually); Enterprise custom&lt;/td&gt;
&lt;td&gt;Many developers, CI runs and AI agents testing on one staging cluster at the same time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Signadot&lt;/td&gt;
&lt;td&gt;Test environments&lt;/td&gt;
&lt;td&gt;Sandboxes of changed services in a shared cluster, routed by request headers&lt;/td&gt;
&lt;td&gt;Starter free; Business $250/mo; Enterprise custom&lt;/td&gt;
&lt;td&gt;Isolated sandboxes per pull request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Telepresence&lt;/td&gt;
&lt;td&gt;Test environments&lt;/td&gt;
&lt;td&gt;Entire local machine connected to a remote cluster through an in-cluster Traffic Manager and Traffic Agents&lt;/td&gt;
&lt;td&gt;Free, open source&lt;/td&gt;
&lt;td&gt;Individuals or teams that want a fully open-source tool with no vendor behind it&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Okteto&lt;/td&gt;
&lt;td&gt;Test environments&lt;/td&gt;
&lt;td&gt;Full environment per developer or per pull request in its own namespace&lt;/td&gt;
&lt;td&gt;Starter free (5 seats); Scale and Enterprise custom&lt;/td&gt;
&lt;td&gt;Personal ephemeral environments per developer&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Tilt&lt;/td&gt;
&lt;td&gt;Test environments&lt;/td&gt;
&lt;td&gt;Full stack you define, usually on a local cluster&lt;/td&gt;
&lt;td&gt;Free, open source&lt;/td&gt;
&lt;td&gt;Local Kubernetes inner loop&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testkube&lt;/td&gt;
&lt;td&gt;Test orchestration&lt;/td&gt;
&lt;td&gt;In-cluster runner; tests run as Kubernetes workloads against whichever environment you target&lt;/td&gt;
&lt;td&gt;Open-source agent free; Pro $700/mo per runner agent; Enterprise custom&lt;/td&gt;
&lt;td&gt;Platform teams that want all test types run and tracked in one place&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Postman&lt;/td&gt;
&lt;td&gt;API testing&lt;/td&gt;
&lt;td&gt;Desktop or web client, plus a CLI in CI, calling whichever environment you point it at&lt;/td&gt;
&lt;td&gt;Free; Solo $9/mo; Team $19/user/mo (billed annually); Enterprise custom&lt;/td&gt;
&lt;td&gt;Teams that want shared API tests that both developers and QA work with&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;WireMock&lt;/td&gt;
&lt;td&gt;Service mocking&lt;/td&gt;
&lt;td&gt;Mock services (in-process, standalone, Docker or cloud) standing in for a dependency&lt;/td&gt;
&lt;td&gt;Open source free; Cloud free tier (1,000 calls/mo); Enterprise quote&lt;/td&gt;
&lt;td&gt;Third-party APIs that are rate-limited or expensive to call&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pact&lt;/td&gt;
&lt;td&gt;Contract testing&lt;/td&gt;
&lt;td&gt;Consumer tests run against a Pact mock; providers verify recorded contracts in their own build; no shared environment needed&lt;/td&gt;
&lt;td&gt;Open source free; PactFlow Starter free, Team from $115.42/mo (billed yearly), Enterprise custom&lt;/td&gt;
&lt;td&gt;Organizations where many teams release services independently&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;k6&lt;/td&gt;
&lt;td&gt;Performance testing&lt;/td&gt;
&lt;td&gt;Load generator run locally, in CI, in-cluster via the k6 Operator, or in Grafana Cloud&lt;/td&gt;
&lt;td&gt;Open source free; Grafana Cloud k6 includes 500 VUh/mo free, then from $0.15/VUh&lt;/td&gt;
&lt;td&gt;Teams that want load tests as code, with pass/fail gates in CI&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;&lt;em&gt;Pricing checked on each vendor's official pricing page on October 14, 2026.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What does a microservices testing stack need to cover?
&lt;/h2&gt;

&lt;p&gt;The best tools for testing microservices architecture work as a stack, because no single tool covers every layer of microservices testing. A reliable stack combines several tools, and the environment they run in determines whether their results can be trusted.&lt;/p&gt;

&lt;p&gt;These are the six layers we'll use throughout this article:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Test environment:&lt;/strong&gt; where the service under test runs, whether its dependencies are real, mocked or copied, and how production-like the whole setup is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Test orchestration:&lt;/strong&gt; running and scheduling tests inside the cluster and collecting the results in one place.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;API and integration testing:&lt;/strong&gt; verifying a service's endpoints and its interactions with other services.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Service mocking:&lt;/strong&gt; replacing dependencies that are unavailable, unstable or expensive to call, also known as service virtualization.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Contract testing:&lt;/strong&gt; catching breaking changes between consumer and provider services before they're deployed.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Performance testing:&lt;/strong&gt; checking how individual services and chains of services behave under load.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;End-to-end and browser frameworks like Playwright, Cypress and Selenium run on top of these layers. They're important, but they depend on an environment to point at, so we aren't covering them as separate entries here. Unit testing also isn't covered, since it doesn't change much between a monolith and microservices.&lt;/p&gt;

&lt;p&gt;Why treat the environment as the foundation? Because every other layer inherits its fidelity. An API test that passes against a mock tells you the code works against the mock, not that it works with the real services. A shared staging environment gives you real dependencies, but two people testing at once can overwrite each other's data or consume each other's queue messages, which leads to queuing up for your turn and long wait times as every change is tested independently. Duplicating the environment per pull request solves the conflicts but multiplies cloud cost and adds minutes of spin-up time to every change. And flows that go through message queues are the hardest to test before production: in a shared environment, a test consumer would pull messages meant for other consumers, and giving every test run its own broker is a lot of setup.&lt;/p&gt;

&lt;p&gt;Here's how the 10 tools map onto those layers:&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fciawbeu1gj0lyyhygstf.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fciawbeu1gj0lyyhygstf.png" alt="Best tools for microservices testing on Kubernetes, mapped to the stack: environment, orchestration, API, contract and load testing tools" width="800" height="420"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How we selected and ranked these tools
&lt;/h2&gt;

&lt;p&gt;We selected and ordered the tools using the same criteria for each, so the list can be compared fairly.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Selection criteria:&lt;/strong&gt; fit for Kubernetes-based microservices, how faithfully the tool reflects real dependencies, CI/CD readiness, and cost and maintenance effort.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Order of the list:&lt;/strong&gt; test environments first, then test orchestration, then tools for individual test types. Environments come first because they determine whether the results of everything else can be trusted. The category label under each heading tells you which layer a tool belongs to.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Sources:&lt;/strong&gt; each tool's official documentation and pricing page, last checked October 14, 2026.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Transparency:&lt;/strong&gt; MetalBear builds mirrord. Every tool on this list, mirrord included, is described using the same criteria and only verifiable facts.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  1. mirrord: best for testing against a real cluster without deploying
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Test environments&lt;/p&gt;

&lt;p&gt;&lt;a href="https://metalbear.com/mirrord/" rel="noopener noreferrer"&gt;mirrord&lt;/a&gt; lets you run a service locally, in an agent's sandbox, or in a CI runner, as if it were running inside your Kubernetes cluster. It's best for teams that want to test against the real services, databases and queues in a shared cluster, without deploying code or maintaining copies of the environment. Developers use it for local development, but the same approach also runs in &lt;a href="https://metalbear.com/mirrord/docs/use-cases/mirrord-for-ci" rel="noopener noreferrer"&gt;CI&lt;/a&gt;, powers &lt;a href="https://metalbear.com/mirrord/docs/use-cases/preview-environments" rel="noopener noreferrer"&gt;preview environments&lt;/a&gt;, and gives AI agents a place to verify their own changes.&lt;/p&gt;

&lt;h3&gt;
  
  
  How mirrord works
&lt;/h3&gt;

&lt;p&gt;When you start a mirrord session, mirrord connects your local process to a target in the cluster, like a deployment or a pod. Your process receives a copy of that target's &lt;a href="https://metalbear.com/mirrord/docs/using-mirrord/incoming-traffic" rel="noopener noreferrer"&gt;incoming traffic&lt;/a&gt; (or takes it over, in steal mode), makes its &lt;a href="https://metalbear.com/mirrord/docs/using-mirrord/outgoing-traffic" rel="noopener noreferrer"&gt;outgoing connections&lt;/a&gt; and DNS lookups through the target pod, so cluster-internal databases and services are reachable, and reads the same &lt;a href="https://metalbear.com/mirrord/docs/using-mirrord/environment-variables" rel="noopener noreferrer"&gt;environment variables&lt;/a&gt; and &lt;a href="https://metalbear.com/mirrord/docs/using-mirrord/file-operations" rel="noopener noreferrer"&gt;files&lt;/a&gt; as the pod. As far as your code is concerned, it's running in the cluster. Nothing gets built, pushed or deployed.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Run your service in the context of the deployed checkout service&lt;/span&gt;
mirrord &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;--target&lt;/span&gt; deployment/checkout &lt;span class="nt"&gt;--&lt;/span&gt; npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The diagram below, from the mirrord docs, shows a mirrord session: the local process gets the target's incoming traffic, and its outgoing traffic, database access and file reads go through the cluster.&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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faxq917oljsqp8u4sy6as.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.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Faxq917oljsqp8u4sy6as.png" alt="mirrord architecture: a local process connected to a target pod in the cluster through mirrord" width="800" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  How it supports microservices testing
&lt;/h3&gt;

&lt;p&gt;Because your service talks to its real dependencies, integration and end-to-end tests run against actual behavior instead of mocks. Developers do this from their IDE (VS Code, Cursor, JetBrains, etc.) or a terminal. In CI, &lt;a href="https://metalbear.com/mirrord/ci/" rel="noopener noreferrer"&gt;mirrord for CI&lt;/a&gt; starts the service under test inside the runner and connects it to your staging cluster, so you can run your existing test suite against real dependencies without deploying a fresh environment for every run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mirrord ci start &lt;span class="nt"&gt;--target&lt;/span&gt; deployment/checkout &lt;span class="nt"&gt;--&lt;/span&gt; npm start
npm run &lt;span class="nb"&gt;test&lt;/span&gt;:e2e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;mirrord ci&lt;/code&gt; works with the open-source version. If the &lt;a href="https://metalbear.com/mirrord/docs/getting-started/installing-mirrord/operator" rel="noopener noreferrer"&gt;mirrord Operator&lt;/a&gt; is installed in your cluster (which the team features below need), CI runs authenticate with a CI API key, which is part of the &lt;a href="https://metalbear.com/mirrord/pricing/" rel="noopener noreferrer"&gt;Enterprise plan&lt;/a&gt; and keeps CI sessions from taking up developer seats.&lt;/p&gt;

&lt;p&gt;This is also what makes mirrord useful for AI coding agents. An agent can run the code it just wrote against real services, see what breaks, and iterate, in seconds rather than waiting on a full CI deploy cycle. MetalBear maintains an open-source &lt;a href="https://metalbear.com/mirrord/docs/use-cases/using-mirrord-with-ai/ai-skills-plugin" rel="noopener noreferrer"&gt;skills plugin&lt;/a&gt; that teaches agents like Claude Code and Cursor how to configure and run mirrord.&lt;/p&gt;

&lt;h3&gt;
  
  
  Isolation for teams sharing one cluster
&lt;/h3&gt;

&lt;p&gt;The obvious question with a shared cluster is: what stops people from stepping on each other? mirrord handles traffic isolation, message isolation and data isolation per session, rather than per environment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;HTTP traffic filtering&lt;/strong&gt; routes only matching requests (for example, ones carrying your session header, or a specific path) to your local process, while all other traffic keeps going to the service in the cluster. With traffic mirroring, your process gets a copy of the requests instead, and the service in the cluster keeps handling the originals.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Queue splitting&lt;/strong&gt; sends the messages that match your filter to your local consumer and leaves the rest for the shared consumer, so the two don't compete for the same messages. You can also mirror matching messages instead, so both your local consumer and the deployed one process a copy. It supports Kafka, SQS, RabbitMQ, Google Cloud Pub/Sub, Azure Service Bus, NATS, Redis Pub/Sub, BullMQ and Temporal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Database branching&lt;/strong&gt; gives each session an isolated branch of the database, so writes and migrations don't affect anyone else's data. It supports MySQL, MariaDB, PostgreSQL, MSSQL, MongoDB, Redis, DynamoDB, ClickHouse, CockroachDB, Google Spanner, S3 and turbopuffer, plus a generic option for any other service you run from your own image.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Beyond isolation, the Operator adds features for running mirrord across a team. &lt;a href="https://metalbear.com/mirrord/docs/sharing-the-cluster/policies" rel="noopener noreferrer"&gt;Policies&lt;/a&gt; let platform teams limit which mirrord features can be used on which targets, for example blocking traffic stealing without an HTTP filter. &lt;a href="https://metalbear.com/mirrord/docs/sharing-the-cluster/profiles" rel="noopener noreferrer"&gt;Profiles&lt;/a&gt; give everyone shared, reusable mirrord configurations. &lt;a href="https://metalbear.com/mirrord/docs/sharing-the-cluster/sessions" rel="noopener noreferrer"&gt;Session management&lt;/a&gt; shows which sessions are active on which targets and lets you stop them. The &lt;a href="https://metalbear.com/mirrord/docs/managing-mirrord/admin-dashboard" rel="noopener noreferrer"&gt;admin dashboard&lt;/a&gt; shows who uses mirrord, on which targets and in which CI pipelines, and how much time it saves.&lt;/p&gt;

&lt;h3&gt;
  
  
  Preview environments
&lt;/h3&gt;

&lt;p&gt;Local and CI sessions end when the process stops. A preview environment keeps a change running in the cluster so someone else can try it: a product manager, a QA engineer, a reviewer, or an AI agent checking its own work. A preview runs only the changed service, as a pod built from the existing workload's spec with your new image. Requests carrying the preview's key go to it, everything else keeps going to the existing workload, and the preview talks to the real databases, queues and upstream services in the cluster. You can share a preview as a link, and it stays up for a time-to-live you set, independent of anyone's machine.&lt;/p&gt;

&lt;p&gt;That's the main difference from other preview environment tools that build a full copy of the environment for every pull request: nothing else gets duplicated. With &lt;a href="https://metalbear.com/mirrord/docs/use-cases/preview-environments#idle-behavior" rel="noopener noreferrer"&gt;idle mode&lt;/a&gt;, a preview also scales down to zero pods when it gets no traffic and starts again when a matching request or queue message arrives. A preview for every open pull request costs almost nothing while nobody is using it.&lt;/p&gt;

&lt;p&gt;Previews also change how you review work you hand to an &lt;a href="https://metalbear.com/mirrord/docs/use-cases/using-mirrord-with-ai" rel="noopener noreferrer"&gt;AI coding agent&lt;/a&gt;. With mirrord set up in its environment, the agent picks up a ticket, makes the change, builds and pushes an image, and runs &lt;code&gt;mirrord preview start&lt;/code&gt; with the ticket ID as the key. Instead of judging the change from the diff alone, you open the preview, try it yourself against the cluster's real dependencies, and then decide whether it's ready to merge.&lt;/p&gt;

&lt;h3&gt;
  
  
  Chaos testing
&lt;/h3&gt;

&lt;p&gt;Testing against real dependencies also means testing what happens when they misbehave. With &lt;a href="https://metalbear.com/mirrord/docs/use-cases/chaos-testing" rel="noopener noreferrer"&gt;chaos testing&lt;/a&gt;, you add rules to your session that can slow down or break your service's outgoing connections to specific hosts: added latency (with jitter), or connection resets, timeouts and refusals, applied to every matching connection or a percentage of them. The rules only affect your session, so you can see how your code handles a slow payment API or a dropped database connection without disrupting anyone else on the cluster.&lt;/p&gt;

&lt;p&gt;We didn't find built-in latency or connection-failure injection in the docs of the other environment tools in this list. The closest is &lt;a href="https://www.signadot.com/docs/concepts/middleware" rel="noopener noreferrer"&gt;Signadot's Override middleware&lt;/a&gt;, which can return canned or error responses for requests to the sandboxed workload.&lt;/p&gt;

&lt;p&gt;Here's what each plan includes, per the &lt;a href="https://metalbear.com/mirrord/pricing/" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt; and docs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Open source (free):&lt;/strong&gt; the CLI and IDE extensions, mirroring and stealing traffic, HTTP filtering, chaos testing, and &lt;code&gt;mirrord ci&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Team:&lt;/strong&gt; adds the mirrord Operator in the cluster, which enables concurrent sessions against the same target, queue splitting, database branching, policies, RBAC and usage monitoring.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Enterprise:&lt;/strong&gt; everything in Team, plus preview environments, CI API keys, high availability and support for air-gapped clusters.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because isolation happens per session rather than per environment, adding another developer, CI runner or agent doesn't add another copy of your infrastructure, so cloud cost stays flat as the number of concurrent testers grows.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real-world results
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://metalbear.com/mirrord/case-study/monday/" rel="noopener noreferrer"&gt;monday.com&lt;/a&gt; moved from per-developer cloud environments to one shared environment. Environment setup dropped from 30 minutes to 10 seconds, onboarding from 3–5 days to about an hour, and retiring the per-developer environments saves around $450 per developer per month. 350+ engineers now work on one cluster.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://metalbear.com/mirrord/case-study/colab/" rel="noopener noreferrer"&gt;CoLab&lt;/a&gt; cut the time to get a change running in the cloud from over 15 minutes to seconds, a reduction in dev cycle time of up to 98%.&lt;/li&gt;
&lt;li&gt;At &lt;a href="https://metalbear.com/mirrord/case-study/daylight-agents/" rel="noopener noreferrer"&gt;Daylight Security&lt;/a&gt;, Claude Code verifies its own changes in a mirrord-powered preview environment against real pre-prod services. Each verification takes about 5 seconds, compared to the 5+ minutes a CI loop would take.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Trade-offs
&lt;/h3&gt;

&lt;p&gt;mirrord isn't a load testing tool, and it doesn't replace contract tests or unit tests. It assumes you already have a cluster (usually staging) that's in reasonably good shape, because that's what your code runs against. Filtering traffic for several services in a call chain also requires that your services propagate the routing header between them. The team features described above need the operator installed in the cluster, which is a conversation to have with your platform team.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing and licensing
&lt;/h3&gt;

&lt;p&gt;Per the &lt;a href="https://metalbear.com/mirrord/pricing/" rel="noopener noreferrer"&gt;pricing page&lt;/a&gt;, the open-source version is free. The Team plan costs $50 per seat per month billed monthly, or 20% less billed annually, with no credit card required to start. Seats are counted by monthly activity. Enterprise pricing is custom and covers preview environments, CI API keys, high availability, support for air-gapped clusters and dedicated support.&lt;/p&gt;

&lt;p&gt;See also: the &lt;a href="https://metalbear.com/mirrord/compare/signadot/" rel="noopener noreferrer"&gt;mirrord vs. Signadot&lt;/a&gt; and &lt;a href="https://metalbear.com/mirrord/compare/telepresence/" rel="noopener noreferrer"&gt;mirrord vs. Telepresence&lt;/a&gt; comparisons, and the &lt;a href="https://metalbear.com/mirrord/docs/getting-started/quick-start" rel="noopener noreferrer"&gt;quickstart&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Signadot: best for isolated sandboxes per pull request
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Test environments&lt;/p&gt;

&lt;p&gt;Signadot creates lightweight sandboxes inside an existing Kubernetes cluster. It's best for teams that want an isolated environment for every pull request without duplicating the whole stack.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does
&lt;/h3&gt;

&lt;p&gt;A sandbox deploys only the services you changed. Everything else is served by the shared baseline environment, meaning the unchanged services already running in the cluster. According to &lt;a href="https://www.signadot.com/docs/overview" rel="noopener noreferrer"&gt;Signadot's documentation&lt;/a&gt;, requests are routed to the sandbox or the baseline through header propagation (it names OpenTelemetry and B3), using its built-in routing or a service mesh like Istio or Linkerd. Signadot installs an operator in your cluster that keeps a secure tunnel open to the &lt;a href="https://www.signadot.com/docs/concepts/architecture/control-plane" rel="noopener noreferrer"&gt;Signadot Control Plane&lt;/a&gt;, a service Signadot runs outside your cluster. The control plane serves the API for creating and managing sandboxes, and requests to the preview URLs it hosts are proxied through it into your cluster.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it supports testing
&lt;/h3&gt;

&lt;p&gt;You can run your existing test suites against a sandbox, create sandboxes per pull request from CI, and use Signadot's Smart Tests to compare a sandbox's behavior against the baseline. Signadot also supports local development against a sandbox.&lt;/p&gt;

&lt;h3&gt;
  
  
  When it fits, and when it doesn't
&lt;/h3&gt;

&lt;p&gt;Signadot fits teams with many services who want PR-level isolation and are comfortable with their cluster keeping a tunnel open to a control plane that Signadot runs, rather than running every component inside their own infrastructure. Like any tool that routes by request headers (mirrord included), it depends on every service in a call chain forwarding the routing header. Its plans also count sandboxes per month, so teams that open many short-lived PRs should check the limits against their volume.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Per &lt;a href="https://www.signadot.com/pricing/" rel="noopener noreferrer"&gt;Signadot's pricing page&lt;/a&gt;: Starter is free (50 sandboxes and 100 test invocations per month, one cluster). Business costs $250 per month (100 sandboxes per month, three clusters, extras billed in blocks). Enterprise is custom.&lt;/p&gt;

&lt;p&gt;See also: &lt;a href="https://metalbear.com/mirrord/compare/signadot/" rel="noopener noreferrer"&gt;mirrord vs. Signadot&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Telepresence: best for connecting a local service to a remote cluster
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Test environments&lt;/p&gt;

&lt;p&gt;Telepresence is an open-source tool that lets you run a service on your machine while the cluster's network and services stay reachable. It's best for individual developers who want to debug a service locally against a remote cluster, or for teams that want a completely open-source, vendor-free tool and don't need commercial support.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does
&lt;/h3&gt;

&lt;p&gt;Telepresence connects your workstation to the cluster network and can intercept traffic meant for a workload and route it to your machine, or send a copy of it ("wiretap") while the original keeps flowing. Intercepts can be filtered by header or path.&lt;/p&gt;

&lt;h3&gt;
  
  
  What gets installed
&lt;/h3&gt;

&lt;p&gt;Per the &lt;a href="https://telepresence.io/docs/concepts/architecture" rel="noopener noreferrer"&gt;Telepresence architecture docs&lt;/a&gt;, a cluster administrator installs the &lt;strong&gt;Traffic Manager&lt;/strong&gt;, which coordinates connections and tracks active sessions. By default, a &lt;strong&gt;Traffic Agent&lt;/strong&gt; is added to each workload you intercept, usually as a sidecar container, or optionally as a node-hosted agent. The pod restarts when the sidecar is first injected, and the sidecar stays in the pods after you disconnect until it's uninstalled. On the workstation, Telepresence runs a user daemon and a root daemon, which sets up a virtual network device and DNS for the whole machine. A Docker mode runs this inside a container instead.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where it fits
&lt;/h3&gt;

&lt;p&gt;Telepresence &lt;a href="https://telepresence.io/about" rel="noopener noreferrer"&gt;describes itself&lt;/a&gt; as "an open source tool for Kubernetes application developers," and its documentation focuses on local development and debugging against a remote cluster. The documentation doesn't describe a way to isolate databases between developers. For queues, it provides an &lt;a href="https://telepresence.io/docs/reference/restapi" rel="noopener noreferrer"&gt;API&lt;/a&gt; that consumers of an intercepted workload can call with a message's headers: the consumer in the cluster leaves messages that match an active intercept on the queue, and your local consumer takes them. That check has to be added to the consumer's code. It also documents a &lt;code&gt;replace&lt;/code&gt; mode that takes the application container out of the cluster pod while you're attached, so only your local copy consumes messages and none get processed twice.&lt;/p&gt;

&lt;h3&gt;
  
  
  Licensing
&lt;/h3&gt;

&lt;p&gt;Telepresence is open source under the Apache 2.0 license and a &lt;a href="https://telepresence.io/about" rel="noopener noreferrer"&gt;CNCF Sandbox project&lt;/a&gt;, originally built by Ambassador Labs. It's community-supported.&lt;/p&gt;

&lt;p&gt;See also: &lt;a href="https://metalbear.com/mirrord/compare/telepresence/" rel="noopener noreferrer"&gt;mirrord vs. Telepresence&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. Okteto: best for ephemeral environments per developer or pull request
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Test environments&lt;/p&gt;

&lt;p&gt;Okteto is a platform for development, preview and testing environments that run inside Kubernetes. It's best for teams that want each developer or pull request to get its own complete copy of the application.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does
&lt;/h3&gt;

&lt;p&gt;Okteto gives developers remote ephemeral development environments with local-to-cloud code sync and remote debugging. For each pull request, it creates a preview environment defined in an Okteto manifest, triggered from CI tools like GitHub Actions or GitLab CI. It also offers testing environments for running test suites in the cluster.&lt;/p&gt;

&lt;h3&gt;
  
  
  How it supports microservices testing
&lt;/h3&gt;

&lt;p&gt;By default, each environment is a full copy of the stack in its own namespace, with every service plus its own databases and queues. That makes isolation simple, since nothing is shared and nothing collides, but cloud cost grows with every open PR and active developer, and creating an environment takes as long as deploying the whole stack. Data in those environments typically comes from seed data rather than the real shared databases.&lt;/p&gt;

&lt;p&gt;Okteto's &lt;a href="https://www.okteto.com/docs/core/divert/" rel="noopener noreferrer"&gt;Divert&lt;/a&gt; feature narrows this: you deploy only the services you change, and requests for the rest are routed to a shared environment using the &lt;code&gt;baggage&lt;/code&gt; header, as long as your services propagate it. That shared environment has to be deployed by Okteto, though, so unless your staging already runs on Okteto, you first have to redeploy or duplicate your services there.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Per &lt;a href="https://www.okteto.com/pricing/" rel="noopener noreferrer"&gt;Okteto's pricing page&lt;/a&gt;, the Starter plan is free for 5 seats. Scale and Enterprise pricing isn't published. Okteto is self-hosted on your own cluster, so you also pay the cloud cost of the environments it creates. The Okteto CLI is open source.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. Tilt: best for local Kubernetes inner-loop development
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Test environments&lt;/p&gt;

&lt;p&gt;Tilt is an open-source tool, maintained by Docker, that automates the inner loop of Kubernetes development. It's best for developers who want fast rebuilds against a local cluster.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does
&lt;/h3&gt;

&lt;p&gt;You describe your services in a Tiltfile, run &lt;code&gt;tilt up&lt;/code&gt;, and Tilt watches your files and, by default, rebuilds the container image and redeploys it on every change. If you configure Live Update, Tilt syncs changed files straight into the running containers instead, which skips the image rebuild. The Tilt UI shows logs and status for every resource in one dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where it fits
&lt;/h3&gt;

&lt;p&gt;Tilt is great when the whole system you need fits on your machine, and that's the setup its docs steer you toward. Its guide to &lt;a href="https://docs.tilt.dev/choosing_clusters.html" rel="noopener noreferrer"&gt;choosing a dev cluster&lt;/a&gt; covers local clusters (kind, Docker Desktop, MicroK8s, Minikube, k3d and Rancher Desktop) first, and treats remote clusters as the advanced option. Tests you run against a Tilt environment hit real containers of your services, but only the ones you've defined, often with local databases and seed data.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where it stops being enough
&lt;/h3&gt;

&lt;p&gt;The ceiling is your machine. The same guide points out that some local cluster options, like Docker Desktop and Minikube, are heavy on local resources. Tilt can also work against a remote dev cluster, where developers can share common services like a dev database, but the same guide says "we only recommend remote clusters for large engineering teams where a dedicated dev infrastructure team can maintain your dev cluster," or for debugging "something that only reproduces in a complete cluster." So moving past the local machine means taking on a dev cluster that someone has to run and maintain.&lt;/p&gt;

&lt;h3&gt;
  
  
  Licensing and pricing
&lt;/h3&gt;

&lt;p&gt;Tilt is free and open source under the Apache 2.0 license.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Testkube: best for running any test framework inside the cluster
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Test orchestration&lt;/p&gt;

&lt;p&gt;Testkube runs your tests as Kubernetes-native workloads inside the cluster. It's best for platform teams that want one place to run, schedule and see the results of every kind of test.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does
&lt;/h3&gt;

&lt;p&gt;In most pipelines, the CI system (GitHub Actions or GitLab CI, for example) runs integration, API, end-to-end and load tests on its own runner machines, which reach the cluster over the network. Testkube runs those same tests as workflows inside the cluster instead, with scheduling, Kubernetes event triggers, CI/CD integration, and logs and artifacts collected centrally.&lt;/p&gt;

&lt;h3&gt;
  
  
  Supported frameworks
&lt;/h3&gt;

&lt;p&gt;Per &lt;a href="https://docs.testkube.io/articles/examples/overview" rel="noopener noreferrer"&gt;Testkube's documentation&lt;/a&gt;, examples cover k6, JMeter, Gatling, Locust and Artillery for load testing; Cypress, Playwright, Selenium and Robot Framework for end-to-end tests; Postman, SoapUI, REST Assured and cURL for API testing; and Pytest, Maven, Gradle, NUnit and Testcontainers for unit and integration tests.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it doesn't do
&lt;/h3&gt;

&lt;p&gt;Testkube orchestrates tests, but it doesn't provide the environment they run against. It complements environment tools: you still need to decide whether your tests hit staging, a per-PR copy or a service connected through something like mirrord.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Per &lt;a href="https://testkube.io/pricing" rel="noopener noreferrer"&gt;Testkube's pricing page&lt;/a&gt;, the open-source agent is free with community support. Pro costs $700 per month per runner agent and adds a hosted control plane, parallel execution, analytics and flakiness detection. Enterprise is custom. AI add-ons are priced separately.&lt;/p&gt;

&lt;h2&gt;
  
  
  7. Postman: best for API testing of microservices
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; API testing&lt;/p&gt;

&lt;p&gt;Postman is an API platform for building, testing and documenting APIs. It's best for teams that want shared, versioned API tests that both developers and QA can work with.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does for microservices
&lt;/h3&gt;

&lt;p&gt;You build requests and group them into collections, define environments with variables (for example, local, staging and production base URLs), and write test scripts that assert on responses. The Collection Runner runs every request in a collection in the order you choose and logs the test results for each one, and the Postman CLI runs collections the same way in CI. Postman can also host mock servers.&lt;/p&gt;

&lt;h3&gt;
  
  
  Where it fits
&lt;/h3&gt;

&lt;p&gt;Postman sits at the API and integration layer, and it's strongest as a collaboration tool: a shared collection becomes the living reference for how a service's API is supposed to behave. When teams shortlist the best API testing tools for microservices, Postman usually sits next to code-first options like REST Assured (for Java) and Karate, which keep tests in the repository next to the service.&lt;/p&gt;

&lt;h3&gt;
  
  
  Limitations
&lt;/h3&gt;

&lt;p&gt;Postman tests whatever environment you point it at, so how much a passing collection tells you depends on that environment. Large collections also become code you have to maintain, with the scripts living inside Postman rather than next to the service in your repository by default. Postman can send HTTP, GraphQL, gRPC, WebSocket, Socket.IO and MQTT requests, but &lt;a href="https://learning.postman.com/docs/tests-and-scripts/running-collections/intro-to-collection-runs" rel="noopener noreferrer"&gt;its docs&lt;/a&gt; describe collection runs for HTTP, GraphQL and gRPC tests only, and GraphQL and gRPC collection runs need a paid plan.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing
&lt;/h3&gt;

&lt;p&gt;Per &lt;a href="https://www.postman.com/pricing/" rel="noopener noreferrer"&gt;Postman's pricing page&lt;/a&gt;, checked October 14, 2026: Free (1 user), Solo at $9 per month and Team at $19 per user per month, both billed annually, plus a custom Enterprise plan. The Collection Runner and mock servers are included on every plan, with GraphQL and gRPC collection runs limited to paid plans.&lt;/p&gt;

&lt;h2&gt;
  
  
  8. WireMock: best for mocking unavailable dependencies
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Service mocking&lt;/p&gt;

&lt;p&gt;WireMock is an open-source tool for simulating HTTP APIs, a practice also called service virtualization. It's best for teams that need to test against dependencies that are unavailable, unstable, rate-limited or expensive to call.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does
&lt;/h3&gt;

&lt;p&gt;WireMock stubs HTTP endpoints with the responses you define. It supports stateful behavior, fault injection (malformed responses, dropped connections), artificial delays, and record-and-replay, where it proxies a real API and saves the responses as stubs. It runs embedded in a test, as a standalone process or as a Docker container.&lt;/p&gt;

&lt;h3&gt;
  
  
  When to mock, and when not to
&lt;/h3&gt;

&lt;p&gt;Mocking is the right choice for third-party APIs you can't call freely (payment providers, for example), for dependencies that don't exist yet, and for failure scenarios that are hard to trigger on demand. For your own internal services, testing against the real thing usually catches more, because a stub only knows about the behavior you told it about.&lt;/p&gt;

&lt;h3&gt;
  
  
  The maintenance cost
&lt;/h3&gt;

&lt;p&gt;Every stub is a copy of another service's behavior at one point in time. When that service changes, the stub doesn't, and tests keep passing against behavior that no longer exists. In our experience, this drift is the most common reason teams with large mock suites still get surprised when they ship to production. Pairing mocks with contract tests (see Pact below) helps keep them honest.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pricing and licensing
&lt;/h3&gt;

&lt;p&gt;WireMock is open source under the Apache 2.0 license. Per the &lt;a href="https://www.wiremock.io/get-pricing" rel="noopener noreferrer"&gt;WireMock Cloud pricing page&lt;/a&gt;, the hosted Free plan includes 1,000 mock API calls per month for a single user. Enterprise pricing is quote-only and adds stateful mocking, team management and Kubernetes self-hosting.&lt;/p&gt;

&lt;h2&gt;
  
  
  9. Pact: best for contract testing between services
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Contract testing&lt;/p&gt;

&lt;p&gt;Pact is an open-source framework for consumer-driven contract testing. It's best for organizations with many services that are deployed independently by different teams. If you're comparing the best tools for contract testing microservices, the usual alternatives are Spring Cloud Contract for JVM teams, and spec-driven tools like Specmatic and Microcks, which turn OpenAPI and AsyncAPI specs into contract tests and mocks.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does
&lt;/h3&gt;

&lt;p&gt;The consumer of an API writes tests describing the requests it sends and the responses it expects. Those tests run against a Pact mock and produce a contract. The provider then verifies that contract against its real implementation in its own build. If the provider changes in a way that breaks a consumer, the provider's build fails, before anything is deployed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Pact Broker, PactFlow and can-i-deploy
&lt;/h3&gt;

&lt;p&gt;Contracts are shared through the Pact Broker (self-hosted) or PactFlow (the managed version). The &lt;code&gt;can-i-deploy&lt;/code&gt; command checks the broker to tell you whether a specific version of a service is compatible with everything already in the target environment. Per the &lt;a href="https://docs.pact.io/" rel="noopener noreferrer"&gt;Pact docs&lt;/a&gt;, official implementations exist for JavaScript, the JVM, .NET, Go, Python, Swift, Scala, PHP, Ruby, Rust and C++.&lt;/p&gt;

&lt;h3&gt;
  
  
  When it pays off, and the limitations
&lt;/h3&gt;

&lt;p&gt;Pact pays off when many teams release independently, so a provider team can't check every change by hand with each of the teams that consume its API. Those consumer teams need to be known and willing to write Pact tests too, which is why Pact's docs list public APIs as a poor fit. The cost is coordination: consumer and provider teams both need to adopt it, and there's a learning curve around provider states and the broker workflow. Contract tests also only check the shape of interactions, not whether the full flow works end to end.&lt;/p&gt;

&lt;h3&gt;
  
  
  Licensing and pricing
&lt;/h3&gt;

&lt;p&gt;Pact is open source, under the MIT or Apache 2.0 license depending on the language implementation (Pact JVM, for example, uses Apache 2.0), and the Pact Broker can be self-hosted for free. Per &lt;a href="https://pactflow.io/pricing/" rel="noopener noreferrer"&gt;PactFlow's pricing page&lt;/a&gt;, the Starter plan is free (2 integrations), Team starts at $115.42 per month billed yearly, and Enterprise is custom.&lt;/p&gt;

&lt;h2&gt;
  
  
  10. k6: best load testing tool for microservices
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Category:&lt;/strong&gt; Performance testing&lt;/p&gt;

&lt;p&gt;k6 is an open-source load testing tool from Grafana Labs. It's best for teams that want performance tests written as code and enforced in CI. The best load testing tools for microservices usually come down to a shortlist of k6, Gatling and Apache JMeter. k6 stands out for its JavaScript scripting and its Kubernetes operator.&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does
&lt;/h3&gt;

&lt;p&gt;You write load tests in JavaScript, define thresholds (for example, p95 latency under 300 ms or an error rate under 1%) that act as pass/fail criteria, and stream results to tools like Prometheus or Grafana. Because thresholds fail the run, k6 fits naturally as a gate in a CI pipeline.&lt;/p&gt;

&lt;h3&gt;
  
  
  Running k6 in Kubernetes
&lt;/h3&gt;

&lt;p&gt;The &lt;a href="https://grafana.com/docs/k6/latest/testing-guides/running-distributed-tests/" rel="noopener noreferrer"&gt;k6 Operator&lt;/a&gt; adds a &lt;code&gt;TestRun&lt;/code&gt; custom resource. You set a &lt;code&gt;parallelism&lt;/code&gt; value, and the operator starts that many k6 pods and splits the workload between them. Testkube can also run k6 tests in-cluster.&lt;/p&gt;

&lt;h3&gt;
  
  
  Limitations
&lt;/h3&gt;

&lt;p&gt;k6's documentation notes that a single machine may not generate enough load for very large tests, which is what distributed runs are for. Results also only reflect the environment you test: load testing a scaled-down staging cluster tells you about staging, not production.&lt;/p&gt;

&lt;h3&gt;
  
  
  Licensing and pricing
&lt;/h3&gt;

&lt;p&gt;k6 is open source under the AGPL-3.0 license. Per &lt;a href="https://grafana.com/pricing/" rel="noopener noreferrer"&gt;Grafana's pricing page&lt;/a&gt;, Grafana Cloud k6 includes 500 virtual user hours (VUh) per month for free, with additional usage starting at $0.15 per VUh. The Pro plan has a $19 monthly platform fee.&lt;/p&gt;

&lt;h2&gt;
  
  
  Other microservices testing tools worth knowing
&lt;/h2&gt;

&lt;p&gt;The 10 tools above cover each layer of the stack, but they aren't the only options. These are worth a look if one of the tools above doesn't fit your setup.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;th&gt;Category&lt;/th&gt;
&lt;th&gt;What it is&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Release&lt;/td&gt;
&lt;td&gt;Test environments&lt;/td&gt;
&lt;td&gt;Environments-as-a-service platform that creates full-stack ephemeral environments per pull request&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Bunnyshell&lt;/td&gt;
&lt;td&gt;Test environments&lt;/td&gt;
&lt;td&gt;Environments-as-a-service platform for ephemeral preview and development environments&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;vCluster&lt;/td&gt;
&lt;td&gt;Test environments&lt;/td&gt;
&lt;td&gt;Open-source virtual Kubernetes clusters, each with its own API server, running inside a namespace of a host cluster&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Microcks&lt;/td&gt;
&lt;td&gt;Service mocking, contract testing&lt;/td&gt;
&lt;td&gt;CNCF Incubating open-source tool for API mocking and contract testing across OpenAPI, AsyncAPI, gRPC and GraphQL&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Specmatic&lt;/td&gt;
&lt;td&gt;Contract testing&lt;/td&gt;
&lt;td&gt;Turns OpenAPI and AsyncAPI specs into executable contract tests and service virtualization&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Gatling&lt;/td&gt;
&lt;td&gt;Performance testing&lt;/td&gt;
&lt;td&gt;Open-source load testing tool with tests written as code&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Apache JMeter&lt;/td&gt;
&lt;td&gt;Performance testing&lt;/td&gt;
&lt;td&gt;Long-standing open-source load testing tool with a GUI test plan editor and broad protocol support&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Playwright&lt;/td&gt;
&lt;td&gt;End-to-end testing&lt;/td&gt;
&lt;td&gt;Open-source browser automation framework from Microsoft for end-to-end tests across Chromium, Firefox and WebKit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Testcontainers&lt;/td&gt;
&lt;td&gt;Integration testing&lt;/td&gt;
&lt;td&gt;Open-source library that starts throwaway Docker containers (databases, Kafka and more) from your test code&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Which combination of tools fits your team?
&lt;/h2&gt;

&lt;p&gt;The right combination depends on your team size, the number of services, how many teams share your staging environment, and how independently your teams release. Here are four common profiles.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A small team with a few services and no shared staging pain yet.&lt;/strong&gt; Tilt for the inner loop, Postman for API tests and k6 for a basic load test in CI is plenty. If you're running everything locally without trouble, you don't need a shared-cluster tool yet. Revisit when laptops start struggling or the service count grows.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A platform team supporting many developers on a shared staging cluster.&lt;/strong&gt; This is where environment isolation matters most. mirrord lets everyone test against the same cluster with traffic filtering, queue splitting and database branching, without per-developer environments. Signadot is the closest alternative, with sandboxes for both local development and pull requests. The difference is in how databases and queues get isolated. Signadot does it through resource plugins (it publishes examples for MariaDB, PostgreSQL and SQS) or routing-key checks in consumer code, while mirrord has database branching and queue splitting built in, configured in mirrord rather than in each consumer's code. Okteto fits if you'd rather give each developer and PR a full copy and can absorb the cloud cost. Add Testkube if you want one place to run and track all your test suites in-cluster.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A team using AI coding agents that generate changes faster than the pipeline can validate them.&lt;/strong&gt; The bottleneck here is verification, and every agent needs a real place to test its work. Per-PR environment copies get expensive quickly when each agent spins one up for every change. mirrord's per-session isolation lets many agents test against one cluster concurrently without adding infrastructure for each one, and the mirrord skills plugin helps agents set it up. Keep Pact in place so agents can't silently break an API that another team depends on.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A larger organization with independently released services owned by different teams.&lt;/strong&gt; Pact with &lt;code&gt;can-i-deploy&lt;/code&gt; keeps teams from breaking each other's APIs. Pair it with an environment tool for integration testing (mirrord or Signadot on a shared cluster), WireMock for third-party dependencies, and k6 for performance budgets on critical paths.&lt;/p&gt;

&lt;p&gt;Whichever profile you fit, start with one layer, usually the environment, since it affects everything else. Run a pilot on one service, measure feedback time and flaky test rate before and after, and only then roll it out further.&lt;/p&gt;

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

&lt;p&gt;The best tools for microservices testing work as a layered stack, and the fidelity of the environment decides how far you can trust the results of every other tool in it.&lt;/p&gt;

&lt;p&gt;To recap: mirrord, Signadot, Telepresence, Okteto and Tilt cover the environment layer, each with a different isolation model. Testkube orchestrates tests inside the cluster. Postman covers API testing, WireMock handles dependencies you can't call, Pact catches breaking changes between teams, and k6 tells you how services behave under load.&lt;/p&gt;

&lt;p&gt;For teams that want to test against real dependencies without deploying or duplicating environments, mirrord is a strong option. &lt;a href="https://monday.com" rel="noopener noreferrer"&gt;monday.com&lt;/a&gt; uses it to run 350+ engineers on a single cluster instead of hundreds of per-developer environments, and teams like Daylight use it to let AI agents verify their own changes in seconds.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://app.metalbear.com/account/sign-up" rel="noopener noreferrer"&gt;Try mirrord for free&lt;/a&gt; or &lt;a href="https://metalbear.com/contact/" rel="noopener noreferrer"&gt;book a demo&lt;/a&gt;, and check out the &lt;a href="https://metalbear.com/mirrord/docs/getting-started/quick-start" rel="noopener noreferrer"&gt;quickstart guide&lt;/a&gt; to run your first session in a few minutes.&lt;/p&gt;

</description>
      <category>testing</category>
      <category>microservices</category>
      <category>kubernetes</category>
      <category>backend</category>
    </item>
    <item>
      <title>Read this super detailed blog to learn how to evaluate preview environment tools!</title>
      <dc:creator>Arsh Sharma</dc:creator>
      <pubDate>Wed, 21 Oct 2026 14:02:18 +0000</pubDate>
      <link>https://dev.to/rinkiyakedad/read-this-super-detailed-blog-to-learn-how-to-evaluate-preview-environment-tools-213m</link>
      <guid>https://dev.to/rinkiyakedad/read-this-super-detailed-blog-to-learn-how-to-evaluate-preview-environment-tools-213m</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/metalbear/best-preview-environment-tools-for-kubernetes-4ilg" class="crayons-story__hidden-navigation-link"&gt;Best Preview Environment Tools for Kubernetes&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 class="crayons-logo crayons-logo--l" href="/metalbear"&gt;
            &lt;img alt="MetalBear logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F10935%2F5e6a0e22-733f-4582-8243-d0dfdbc47bba.png" class="crayons-logo__image" width="450" height="450"&gt;
          &lt;/a&gt;

          &lt;a href="/jakepage91" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F956307%2F8b2d3ab8-6673-4342-8628-8f2a866e025e.png" alt="jakepage91 profile" class="crayons-avatar__image" width="800" height="800"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/jakepage91" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Jake Page
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Jake Page
                
                
              
              &lt;div id="story-author-preview-content-4889908" 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="/jakepage91" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F956307%2F8b2d3ab8-6673-4342-8628-8f2a866e025e.png" class="crayons-avatar__image" alt="" width="800" height="800"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Jake Page&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;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/metalbear" class="crayons-story__secondary fw-medium"&gt;MetalBear&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/metalbear/best-preview-environment-tools-for-kubernetes-4ilg" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 21&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/metalbear/best-preview-environment-tools-for-kubernetes-4ilg" id="article-link-4889908"&gt;
          Best Preview Environment Tools for Kubernetes
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/kubernetes"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;kubernetes&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/software"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;software&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/metalbear/best-preview-environment-tools-for-kubernetes-4ilg" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/raised-hands-74b2099fd66a39f2d7eed9305ee0f4553df0eb7b4f11b01b6b1b499973048fe5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;4&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/metalbear/best-preview-environment-tools-for-kubernetes-4ilg#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              1&lt;span class="hidden s:inline"&gt;&amp;nbsp;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;
            11 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>cloud</category>
      <category>devops</category>
      <category>kubernetes</category>
      <category>tools</category>
    </item>
    <item>
      <title>learn how engineering teams are actually using AI!</title>
      <dc:creator>Arsh Sharma</dc:creator>
      <pubDate>Thu, 08 Oct 2026 10:42:46 +0000</pubDate>
      <link>https://dev.to/rinkiyakedad/learn-how-engineering-teams-are-actually-using-ai-1knl</link>
      <guid>https://dev.to/rinkiyakedad/learn-how-engineering-teams-are-actually-using-ai-1knl</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/metalbear/how-our-engineering-team-uses-ai-part-ii-meat-proxies-148g" class="crayons-story__hidden-navigation-link"&gt;How Our Engineering Team Uses AI, Part II: Meat Proxies&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 class="crayons-logo crayons-logo--l" href="/metalbear"&gt;
            &lt;img alt="MetalBear logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F10935%2F5e6a0e22-733f-4582-8243-d0dfdbc47bba.png" class="crayons-logo__image" width="450" height="450"&gt;
          &lt;/a&gt;

          &lt;a href="/eyalb" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F870070%2Fd01a7af7-a7ae-42a9-9fa1-5f63c974af8f.jpg" alt="eyalb profile" class="crayons-avatar__image" width="400" height="400"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/eyalb" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Eyal Bukchin
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Eyal Bukchin
                
                
              
              &lt;div id="story-author-preview-content-4817363" 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="/eyalb" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F870070%2Fd01a7af7-a7ae-42a9-9fa1-5f63c974af8f.jpg" class="crayons-avatar__image" alt="" width="400" height="400"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Eyal Bukchin&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;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/metalbear" class="crayons-story__secondary fw-medium"&gt;MetalBear&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/metalbear/how-our-engineering-team-uses-ai-part-ii-meat-proxies-148g" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 8&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/metalbear/how-our-engineering-team-uses-ai-part-ii-meat-proxies-148g" id="article-link-4817363"&gt;
          How Our Engineering Team Uses AI, Part II: Meat Proxies
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/engineering"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;engineering&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/programming"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;programming&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/metalbear/how-our-engineering-team-uses-ai-part-ii-meat-proxies-148g" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;6&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/metalbear/how-our-engineering-team-uses-ai-part-ii-meat-proxies-148g#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;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;
            7 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>automation</category>
      <category>productivity</category>
      <category>softwareengineering</category>
    </item>
    <item>
      <title>[Boost]</title>
      <dc:creator>Arsh Sharma</dc:creator>
      <pubDate>Thu, 08 Oct 2026 10:32:41 +0000</pubDate>
      <link>https://dev.to/rinkiyakedad/-206m</link>
      <guid>https://dev.to/rinkiyakedad/-206m</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/metalbear/build-vs-buy-your-kubernetes-development-environment-13hm" class="crayons-story__hidden-navigation-link"&gt;Build vs. Buy Your Kubernetes Development Environment&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 class="crayons-logo crayons-logo--l" href="/metalbear"&gt;
            &lt;img alt="MetalBear logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F10935%2F5e6a0e22-733f-4582-8243-d0dfdbc47bba.png" class="crayons-logo__image" width="450" height="450"&gt;
          &lt;/a&gt;

          &lt;a href="/eyalb" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F870070%2Fd01a7af7-a7ae-42a9-9fa1-5f63c974af8f.jpg" alt="eyalb profile" class="crayons-avatar__image" width="400" height="400"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/eyalb" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Eyal Bukchin
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Eyal Bukchin
                
                
              
              &lt;div id="story-author-preview-content-4811748" 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="/eyalb" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F870070%2Fd01a7af7-a7ae-42a9-9fa1-5f63c974af8f.jpg" class="crayons-avatar__image" alt="" width="400" height="400"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Eyal Bukchin&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;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/metalbear" class="crayons-story__secondary fw-medium"&gt;MetalBear&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/metalbear/build-vs-buy-your-kubernetes-development-environment-13hm" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Oct 7&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/metalbear/build-vs-buy-your-kubernetes-development-environment-13hm" id="article-link-4811748"&gt;
          Build vs. Buy Your Kubernetes Development Environment
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/kubernetes"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;kubernetes&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/platformengineering"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;platformengineering&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/productivity"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;productivity&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/metalbear/build-vs-buy-your-kubernetes-development-environment-13hm" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;11&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/metalbear/build-vs-buy-your-kubernetes-development-environment-13hm#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;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;
            11 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>devops</category>
      <category>infrastructure</category>
      <category>kubernetes</category>
    </item>
    <item>
      <title>Read how monday.com is testing AI agents!</title>
      <dc:creator>Arsh Sharma</dc:creator>
      <pubDate>Mon, 21 Sep 2026 11:09:15 +0000</pubDate>
      <link>https://dev.to/rinkiyakedad/read-how-mondaycom-is-testing-ai-agents-38mj</link>
      <guid>https://dev.to/rinkiyakedad/read-how-mondaycom-is-testing-ai-agents-38mj</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/metalbear/how-mondaycom-runs-agent-evals-against-real-dependencies-webinar-recap-41ge" class="crayons-story__hidden-navigation-link"&gt;How monday.com Runs Agent Evals Against Real Dependencies: Webinar Recap&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 class="crayons-logo crayons-logo--l" href="/metalbear"&gt;
            &lt;img alt="MetalBear logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F10935%2F5e6a0e22-733f-4582-8243-d0dfdbc47bba.png" class="crayons-logo__image" width="450" height="450"&gt;
          &lt;/a&gt;

          &lt;a href="/rinkiyakedad" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F488212%2F66d9df7f-f08b-481a-8a26-509ab225f79a.jpeg" alt="rinkiyakedad profile" class="crayons-avatar__image" width="800" height="1120"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/rinkiyakedad" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Arsh Sharma
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Arsh Sharma
                
                
              
              &lt;div id="story-author-preview-content-4706884" 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="/rinkiyakedad" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F488212%2F66d9df7f-f08b-481a-8a26-509ab225f79a.jpeg" class="crayons-avatar__image" alt="" width="800" height="1120"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Arsh Sharma&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;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/metalbear" class="crayons-story__secondary fw-medium"&gt;MetalBear&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/metalbear/how-mondaycom-runs-agent-evals-against-real-dependencies-webinar-recap-41ge" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 21&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/metalbear/how-mondaycom-runs-agent-evals-against-real-dependencies-webinar-recap-41ge" id="article-link-4706884"&gt;
          How monday.com Runs Agent Evals Against Real Dependencies: Webinar Recap
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/testing"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;testing&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/llm"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;llm&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/agents"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;agents&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/metalbear/how-mondaycom-runs-agent-evals-against-real-dependencies-webinar-recap-41ge" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/fire-f60e7a582391810302117f987b22a8ef04a2fe0df7e3258a5f49332df1cec71e.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;13&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/metalbear/how-mondaycom-runs-agent-evals-against-real-dependencies-webinar-recap-41ge#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;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;
            7 min read
          &lt;/small&gt;
        &lt;/div&gt;
      &lt;/div&gt;
    &lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;


</description>
      <category>agents</category>
      <category>ai</category>
      <category>testing</category>
    </item>
    <item>
      <title>How monday.com Runs Agent Evals Against Real Dependencies: Webinar Recap</title>
      <dc:creator>Arsh Sharma</dc:creator>
      <pubDate>Mon, 21 Sep 2026 11:08:48 +0000</pubDate>
      <link>https://dev.to/metalbear/how-mondaycom-runs-agent-evals-against-real-dependencies-webinar-recap-41ge</link>
      <guid>https://dev.to/metalbear/how-mondaycom-runs-agent-evals-against-real-dependencies-webinar-recap-41ge</guid>
      <description>&lt;p&gt;An agent eval suite's outcome can only be trustworthy if it's operating in an environment similar to production. You can have the best grading logic in the world, but if the agent is calling mocked databases and fake APIs, you're not testing how it behaves in the real world, you're testing how it behaves in the mocks you built. That gap is what we dug into on September 15, when we sat down with Dor Cohen, AI Engineering Director at &lt;a href="http://monday.com" rel="noopener noreferrer"&gt;monday.com&lt;/a&gt;, for an interview and demo on how his team architected running agent evals against a live staging cluster instead of mocks.&lt;/p&gt;

&lt;p&gt;If you missed the session, here's the recap: what agent evals actually need to check, why mocks fall short compared to the agent calling real systems, and how &lt;a href="http://monday.com" rel="noopener noreferrer"&gt;monday.com&lt;/a&gt; built their agent evals infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  What are agent evals and why you need them
&lt;/h2&gt;

&lt;p&gt;Testing an agent isn't the same as testing a model. An agent is a package: the model, the tools it calls, and the dependencies behind those tools. Unlike a unit test, where you know exactly what output to expect, an agent is non-deterministic, as it can pick a different tool or path on every run. So the eval has to check the full trajectory it takes to get there, not just whether the final answer sounded right.&lt;/p&gt;

&lt;p&gt;Dor shared an example of why testing the full chain matters. They had an agent that was asked to retrieve 600 items. It called the right tools, formatted a confident, well-structured answer, and returned a response that read as correct. Except it had only processed about 500 of them. Every individual tool call worked. The final answer looked fine, but the task wasn't actually done. An eval that only grades the final answer would have passed it but an eval that checks trajectory and completeness catches it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where mocks fall short
&lt;/h2&gt;

&lt;p&gt;One very important part in the agent eval chain we discussed above is the dependencies your agent calls. The default way to run evals is against mocks because they're lightweight, fast to set up, and isolated, and for a lot of testing that's exactly what you want. But for an agent that's calling real databases, services, and APIs in production, mocks introduce three problems.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;They drift&lt;/strong&gt;: a mock has to be kept in sync with your production environment by hand, and it never is.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The data isn't real&lt;/strong&gt; either, synthetic rows present in mocks are cleaner and thinner than what actually lives in your database, so they can't expose the edge cases production will.&lt;/li&gt;
&lt;li&gt;And mocks &lt;strong&gt;can't represent state&lt;/strong&gt;. When an agent reads data and takes a downstream action, a mock either forgets the write happened or fakes it, so you can't actually tell what the agent left behind.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Staging doesn't have any of those problems by construction. It stays current with production because it's the last stop before it. It runs on real data, at close to production scale, with all the variety and mess that comes with that. And because the agent's actions actually land, you can check the real end state, not a simulated one. Fidelity to production is what makes or breaks the quality of your agent evals.&lt;/p&gt;

&lt;p&gt;The objection to running evals against staging (or other pre-prod environments) is reasonable, though: it's not lightweight, not isolated, and not easy to wire up. That's the problem &lt;a href="http://monday.com" rel="noopener noreferrer"&gt;monday.com&lt;/a&gt; solved with mirrord.&lt;/p&gt;

&lt;h2&gt;
  
  
  How mirrord fits into the pipeline
&lt;/h2&gt;

&lt;p&gt;mirrord connects a process running locally, in a CI job, or in an eval runner, to a real Kubernetes cluster, so it behaves as if it's deployed there: real traffic mirrored or stolen from a live pod, real env vars and secrets imported straight from the target, real reads and writes on the remote filesystem. &lt;a href="https://metalbear.com/mirrord/docs/sharing-the-cluster/db-branching" rel="noopener noreferrer"&gt;DB branching&lt;/a&gt; and &lt;a href="https://metalbear.com/mirrord/docs/sharing-the-cluster/queue-splitting" rel="noopener noreferrer"&gt;queue splitting&lt;/a&gt; isolate each eval session's writes, so multiple runs, from different engineers or different CI jobs, can hit the same cluster at the same time without stepping on each other's data.&lt;/p&gt;

&lt;p&gt;There's no separate deploy step as well, you just wrap your existing eval command and run it with mirrord:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mirrord &lt;span class="nb"&gt;exec&lt;/span&gt; &lt;span class="nt"&gt;--target&lt;/span&gt; deployment/orders-api &lt;span class="se"&gt;\&lt;/span&gt;
    &lt;span class="nt"&gt;--&lt;/span&gt; pytest evals/agent_suite.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;And in CI you can just use &lt;a href="https://metalbear.com/mirrord/docs/use-cases/mirrord-for-ci" rel="noopener noreferrer"&gt;&lt;code&gt;mirrord ci start&lt;/code&gt;&lt;/a&gt; instead of &lt;code&gt;mirrord exec&lt;/code&gt;, with the same arguments. When a model, a prompt, or a tool changes, your CI job runs the suite against real dependencies before the change reaches a merge gate.&lt;/p&gt;

&lt;h2&gt;
  
  
  Inside monday.com's agent evals pipeline
&lt;/h2&gt;

&lt;p&gt;monday.com runs 700+ microservices behind its agents, with the usual sprawl that comes with that scale: authentication, feature flags, permission layers, and a long list of third-party integrations. Mocking these dependencies or setting them up each time in an ephemeral environment would've been a huge investment for them in terms of both time and money. Their estimate for a dedicated evaluation environment came out to about a month of setup, plus ongoing maintenance across 700+ services just to keep it in sync. Obviously, they ended up going the more practical route of pointing their evals at staging with mirrord, which their developers &lt;a href="https://metalbear.com/mirrord/case-study/monday/" rel="noopener noreferrer"&gt;were already using&lt;/a&gt; for local development.&lt;/p&gt;

&lt;p&gt;The difference shows up in the day-to-day now: agent eval suites run in minutes instead of hours, the added infrastructure cost is close to zero since &lt;a href="http://monday.com" rel="noopener noreferrer"&gt;monday.com&lt;/a&gt; already pays for staging, and they get an output that they can actually trust.&lt;/p&gt;

&lt;h3&gt;
  
  
  Catching a regression before it ships
&lt;/h3&gt;

&lt;p&gt;monday.com treats a model upgrade the same way it treats any other version change to the agent: it runs the full eval suite against the new model before switching. When the team tested Sonnet 5 against their existing default model, goal completion dropped by about 10%, and agent correctness dropped by about the same. The suite failed to cross the pass threshold.&lt;/p&gt;

&lt;p&gt;This was great for the team as it gave them a clear signal that the upgrade wasn't safe to ship as-is, pointed to specific failure points in tool selection and prompt adherence, and gave them a concrete direction for what to adjust before trying again. Without a suite running against real dependencies, this is the kind of regression that tends to surface only after a customer hits it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Three ways monday.com actually runs AI agent evals
&lt;/h3&gt;

&lt;p&gt;Dor shared that their eval pipeline isn't just limited to CI pipelines, it's the same underlying infrastructure triggered from three different places, all producing consistent results through mirrord and LangSmith.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;From Claude Code, a developer working locally can invoke an offline evals skill right after making a change. It asks for the eval scope, all cases or a specific category, connects to dependencies living in staging through mirrord, and runs the suite. Results land in LangSmith with input, reference output, actual output, and a score per metric.&lt;/li&gt;
&lt;li&gt;From Slack, &lt;a href="http://monday.com" rel="noopener noreferrer"&gt;monday.com&lt;/a&gt; has an internal Claude-based evaluation agent, nicknamed "Eevee," that can be asked to run evals with specific parameters, like swapping in a different model for a test run. It uses the same infrastructure, produces the same LangSmith output, and posts a summary back in Slack. This is actually how the team caught the ~10% drop in goal completion during the Sonnet 5 test.&lt;/li&gt;
&lt;li&gt;From CI, eval results show up alongside regular checks on the pull request, each with a score and a mode: observed, which is informational, or blocked, which prevents the merge, depending on the severity of the change and the product it's touching.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;monday.com runs these "offline evals" alongside "online" ones. Offline evals run against their staging environment with controlled datasets, gating changes before they ship. Online evals grade live agent behavior continuously after it is shipped to production. When something surfaces in production that the offline dataset didn't cover, it gets pulled into that dataset for future regression testing, closing the loop between what ships and what gets tested next.&lt;/p&gt;

&lt;h3&gt;
  
  
  Metrics to track for agent evals
&lt;/h3&gt;

&lt;p&gt;monday.com's base eval pipelines track six metrics:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Goal completion: did the agent finish the whole task, not just appear to&lt;/li&gt;
&lt;li&gt;Agent correctness: was the answer factually and logically right&lt;/li&gt;
&lt;li&gt;Tool precision: did it pick the correct tools for the task and call them in the correct sequence&lt;/li&gt;
&lt;li&gt;Trajectory: was the path taken the expected one&lt;/li&gt;
&lt;li&gt;Groundedness: are the agent's claims backed by evidence it actually had&lt;/li&gt;
&lt;li&gt;Intercompleteness: did it gather everything it needed before answering&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Some of these are fully deterministic, like whether the required tool got called. Others need an LLM-as-judge, for things like whether the agent understood the goal or stayed in scope. And individual product teams at &lt;a href="http://monday.com" rel="noopener noreferrer"&gt;monday.com&lt;/a&gt; add their own domain-specific evaluators on top of the base set, because what counts as a passing score depends entirely on the product and the use case.&lt;/p&gt;

&lt;h2&gt;
  
  
  Takeaways
&lt;/h2&gt;

&lt;p&gt;A few things worth carrying away from the session:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Agent evals should test more than just the final output: tools picked, dependencies used, trajectory taken, and completeness all matter.&lt;/li&gt;
&lt;li&gt;Mocks drift, and synthetic test data can't replicate the variety and edge cases that live in production.&lt;/li&gt;
&lt;li&gt;Most teams already have the right environment for running agent evals properly. Staging is current with production by definition. Building a dedicated eval environment from scratch is usually more expensive and slower than pointing your suite at the one you already run.&lt;/li&gt;
&lt;li&gt;Online and offline evals reinforce each other. Edge cases from production belong in your offline dataset, so the two tracks compound over time instead of drifting apart.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you'd like to see the full webinar recording including the demo Dor showed, you can get it &lt;a href="https://attendee.gotowebinar.com/recording/5989946292184245593" rel="noopener noreferrer"&gt;here&lt;/a&gt;. And if you want to set up a 1:1 session with one of our engineers who'll walk you through how to connect your agent evals to real dependencies with mirrord, you can &lt;a href="https://metalbear.com/contact/" rel="noopener noreferrer"&gt;book a demo with us&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>testing</category>
      <category>llm</category>
      <category>agents</category>
    </item>
    <item>
      <title>How To Reduce Token Costs of AI Coding Agents</title>
      <dc:creator>Arsh Sharma</dc:creator>
      <pubDate>Thu, 13 Aug 2026 11:01:59 +0000</pubDate>
      <link>https://dev.to/metalbear/how-to-reduce-token-costs-of-ai-coding-agents-5772</link>
      <guid>https://dev.to/metalbear/how-to-reduce-token-costs-of-ai-coding-agents-5772</guid>
      <description>&lt;p&gt;Costs related to AI coding tools &lt;a href="https://www.gartner.com/en/newsroom/press-releases/2026-06-24-gartner-predicts-ai-coding-costs-will-surpass-average-developer-salary-by-2028-as-token-consumption-surges" rel="noopener noreferrer"&gt;are projected&lt;/a&gt; to only go up from what they are today. We've seen this before with Anthropic adding weekly rate limits on top of Claude Pro and Max's existing five-hour windows, &lt;a href="https://venturebeat.com/ai/anthropic-throttles-claude-rate-limits-devs-call-foul" rel="noopener noreferrer"&gt;with little warning&lt;/a&gt;. So the question on everyone's minds these days is how do you get more work out of the same AI budget.&lt;/p&gt;

&lt;p&gt;One answer is you have your AI agents burn less tokens. But token burn isn't one problem. An agent stuck looping on a bug it can't see and an agent reloading the same instructions on every single prompt look identical on your bill: a long session, a high token count. But the causes are completely different, and so are the fixes.&lt;/p&gt;

&lt;p&gt;In this post, we'll go through five specific ways this happens:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Agents reading half your repo to change three files&lt;/li&gt;
&lt;li&gt;Agents doing mechanical work on your most expensive model&lt;/li&gt;
&lt;li&gt;Agents guessing at what a live dependency looks like, or trusting a mock that drifted away from it&lt;/li&gt;
&lt;li&gt;Agents looping without any way to tell if their fix actually worked&lt;/li&gt;
&lt;li&gt;Agents loading instructions on every prompt instead of only when needed&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;For #3 and #4 we'll show how &lt;a href="https://metalbear.com/mirrord/" rel="noopener noreferrer"&gt;mirrord&lt;/a&gt;, our Kubernetes development platform, closes the gap: it connects code to a real cluster without deploying it, whether that code runs on a laptop, in CI, or in an agent's sandbox.&lt;/p&gt;

&lt;h2&gt;
  
  
  Reading half the repo to change three files
&lt;/h2&gt;

&lt;p&gt;Point an agent at a large codebase with a vague instruction and it will go exploring, and that exploration is usually the single largest line item in a session: file after file pulled into context, most of which never ends up informing the change. What makes it expensive isn't the reading itself so much as the compounding, because a file read on turn three is still being re-sent on turn forty.&lt;/p&gt;

&lt;p&gt;The easiest fix to this is just &lt;strong&gt;being specific in your prompts&lt;/strong&gt;. If you already know the change lives in three files, just say so. If the search genuinely is the task, hand it to a subagent, which does the fan-out reading and returns a conclusion, so the forty files it opened never enter your main context at all. And when you move on to something unrelated, &lt;strong&gt;start a fresh session rather than continuing the old one&lt;/strong&gt;, because a long-running session carries its full history into every new request whether or not any of it is still relevant.&lt;/p&gt;

&lt;h2&gt;
  
  
  Paying premium model rates for mechanical work
&lt;/h2&gt;

&lt;p&gt;Not every task needs your best model. Renaming a symbol across a repo, writing a migration from a schema you've already specified, reformatting test fixtures, drafting a commit message: these are all mechanical, and a smaller model does them at a fraction of the cost.&lt;/p&gt;

&lt;p&gt;The mistake is treating model choice as a per-project setting rather than a per-task one. Reach for the expensive model when the work is genuinely architectural, when you're debugging something subtle or designing an interface or deciding how a change should be structured, and drop down for everything downstream of that decision. &lt;strong&gt;Most agent tools let you switch mid-session, and most people never utilize that&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Guessing at environment shape vs. reading it live
&lt;/h2&gt;

&lt;p&gt;An AI agent writing code for a microservice doesn't get to see the cluster where the entire application is deployed. It only sees your repo, whatever context you gave it, and patterns from its training data, and it fills every other gap with an assumption: what response a downstream service returns, what a queue message actually looks like, what a config value resolves to once it's deployed. Some of those assumptions are wrong, and the agent has no way to know which ones until the code runs against the real thing.&lt;/p&gt;

&lt;p&gt;Say you ask an agent to add a consumer for order events, and it writes the handler expecting a flat &lt;code&gt;total_cents&lt;/code&gt; field, because that's what the schema doc in the repo still says. In staging, that event has looked like &lt;code&gt;{"pricing": {"total": ...}}&lt;/code&gt; for the last two months, ever since a migration that never made it back into the docs. The agent doesn't find out until it runs the code and the field comes back &lt;code&gt;None&lt;/code&gt;, and at that point fixing it means re-deriving the real shape from the failure and rewriting the parsing logic from scratch. Every downstream call, config value, queue, or database the code touches carries the same risk, and each wrong guess costs a whole new bag of tokens.&lt;/p&gt;

&lt;p&gt;The usual answer to this is a mock, and mocks make it worse rather than better, because now the agent isn't missing information, it's being handed information that's confidently wrong. A mock is a snapshot of what a dependency looked like the day someone created it, and nothing keeps that snapshot in sync automatically, so the gap only ever grows. Say the real order queue gains a required &lt;code&gt;currency&lt;/code&gt; field, and the agent knows about it from a recent PR, so it writes a consumer that correctly expects the field. Locally it fails, because the mock is still emitting the old shape. The agent has no way to know the mock is the outdated one, so it assumes its own code is wrong and starts "fixing" it, loosening the field to optional, adding fallback logic, trying variation after variation, none of which touch the actual bug because there isn't one. The bug is the mock. The agent just burned a dozen turns proving that correct code doesn't satisfy an incorrect test.&lt;/p&gt;

&lt;p&gt;The fix for both is to &lt;strong&gt;stop guessing&lt;/strong&gt;. With &lt;a href="https://metalbear.com/mirrord/" rel="noopener noreferrer"&gt;mirrord&lt;/a&gt; connected to your cluster, an agent can read the real shape of a dependency before it writes a single line: what's actually on the queue right now, what a service returns today, or what a ConfigMap resolves to in the running pod. &lt;strong&gt;That collapses the guess-then-fail-then-regenerate cycle most AI-generated code goes through into just one or two passes, because the first draft is already written against what's true instead of what's assumed&lt;/strong&gt;. And there's no need to maintain mocks that drift, because you can get a response from the dependencies running in the cluster directly.&lt;/p&gt;

&lt;h2&gt;
  
  
  No integration feedback
&lt;/h2&gt;

&lt;p&gt;Without a way to verify its own work, an agent can make a change, declare it done, and open a PR with a bug baked in that only shows up once the code touches the real dependencies in the cluster. Nobody catches it at write time. It gets caught in review instead after a CI run or a staging deploy, which means going back, explaining what's actually wrong, and waiting on another round of fixes, and possibly another after that if the first fix is incomplete. Every one of those review-fix-review rounds costs tokens the agent wouldn't have spent if it had caught the bug itself the moment it introduced it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Give the agent the same tests your team already runs in CI, but let it run them itself, against a real environment, right after it makes a change&lt;/strong&gt;. Then it catches that kind of bug in the same turn it introduced it, not two review cycles later. We've walked through exactly this kind of case in detail in our previous blog &lt;a href="https://metalbear.com/blog/how-to-prevent-token-burn-using-mirrord-with-e2e-tests/" rel="noopener noreferrer"&gt;How to prevent token burn using mirrord with e2e tests&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Context loaded on every prompt vs. on-demand skills
&lt;/h2&gt;

&lt;p&gt;Most AI coding agents support an instructions file like &lt;a href="https://agents.md/" rel="noopener noreferrer"&gt;AGENTS.md&lt;/a&gt; or &lt;a href="https://code.claude.com/docs/en/memory#claude-md-vs-auto-memory" rel="noopener noreferrer"&gt;CLAUDE.md&lt;/a&gt; that the agent reads in full on every single prompt in a session. It's the simplest way to tell an agent "always do X, never do Y," but that simplicity has a cost baked in. The file loads regardless of whether the current prompt has anything to do with it. If you've added a paragraph asking the agent to use mirrord to verify its code, one about your auth conventions, one about deployment rules, the agent is now paying to re-read all three on every request, including one that touches none of them.&lt;/p&gt;

&lt;p&gt;Agent Skills fix this by making the loading conditional. Each skill ships as its own file with its own description, and the model only pulls it into context when a prompt actually matches what that skill covers. We packaged mirrord's own instructions this way: &lt;a href="https://metalbear.com/blog/claude-code-skills-for-kubernetes/" rel="noopener noreferrer"&gt;six Agent Skills&lt;/a&gt; covering commonly used mirrord use cases, installed in one command. Ask an agent to set up &lt;a href="https://metalbear.com/mirrord/docs/sharing-the-cluster/queue-splitting" rel="noopener noreferrer"&gt;queue splitting&lt;/a&gt; and only the &lt;code&gt;mirrord-kafka&lt;/code&gt; skill loads. Ask it to fix a typo in your frontend and none of the six load because nothing in that prompt matches any of them. &lt;strong&gt;The rule of thumb is that your always-loaded file should only hold what's true for every prompt, and everything else belongs in a skill.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Token costs are going up, but your bill doesn't have to
&lt;/h2&gt;

&lt;p&gt;The first two scenarios trace back to the same root cause: an agent that can't see what's actually true about your cluster, so it guesses at a dependency's shape, gets fooled by a mock that no longer matches reality, or ships a change with no way to check it actually works. mirrord closes that gap by connecting the agent's locally running code to your real cluster. The agent now knows what's actually on the queue, what a service returns, what the values of the environment variables the process inherits in the cluster are, so it is testing against reality instead of an assumption.&lt;/p&gt;

&lt;p&gt;The other three, on-demand skills and tighter context scoping and matching the model to the task, are solving different problems, but the same principle applies to all of them: only pay for what the current prompt actually needs, and not a wasted guess, an irrelevant paragraph of instructions, or forty files the agent read once and re-sends forever.&lt;/p&gt;

&lt;p&gt;If your AI agents are writing code for Kubernetes services, &lt;a href="https://metalbear.com/mirrord/ai/" rel="noopener noreferrer"&gt;give mirrord a try&lt;/a&gt;. Our &lt;a href="https://metalbear.com/mirrord/docs/use-cases/using-mirrord-with-ai" rel="noopener noreferrer"&gt;guide on using mirrord with AI agents&lt;/a&gt; walks through the setup for each of these workflows.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>kubernetes</category>
      <category>microservices</category>
      <category>programming</category>
    </item>
    <item>
      <title>How Prathyusha Ramanjaneyulu at Celonis Eliminated Dev Environment Overhead for 600 Engineers</title>
      <dc:creator>Arsh Sharma</dc:creator>
      <pubDate>Wed, 01 Jul 2026 13:05:29 +0000</pubDate>
      <link>https://dev.to/metalbear/how-prathyusha-ramanjaneyulu-at-celonis-eliminated-dev-environment-overhead-for-600-engineers-5h19</link>
      <guid>https://dev.to/metalbear/how-prathyusha-ramanjaneyulu-at-celonis-eliminated-dev-environment-overhead-for-600-engineers-5h19</guid>
      <description>&lt;p&gt;I recently spoke with Prathyusha Ramanjaneyulu, a Senior Software Engineer at Celonis. She owns the local development component of the organization's internal developer tooling and is responsible for maintaining high velocity for over 600 developers. The conversation was about a problem that comes up at nearly every large engineering org: how do you give hundreds of developers a way to test their code against a real environment without having them being slowed down by CI and staging deployments? She described environments that took weeks to set up, 3+ hours a week lost to VM maintenance, and teams blocked whenever someone pushed a bad change. This is a recap of that conversation. I'll share the approaches she was using, the issues she faced with those, and how mirrord helped her finally solve this problem.&lt;/p&gt;

&lt;p&gt;The problems she told me are ones I think many engineers at large companies will relate to and can learn from.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Nature of the Bottleneck at Scale
&lt;/h2&gt;

&lt;p&gt;The engineering org she works with has around 600 developers building applications that have a microservices architecture and are deployed on Kubernetes. The nature of that setup means that when an engineer is working on a single service, their code doesn't run in isolation but it depends on a web of other services, databases, and queues. Testing even a small change means the service needs to interact with those dependencies in a way that reflects what actually happens in production.&lt;/p&gt;

&lt;h2&gt;
  
  
  What she had tried
&lt;/h2&gt;

&lt;p&gt;Before landing on a solution that worked, she went through two approaches.&lt;/p&gt;

&lt;h3&gt;
  
  
  Approach 1: Run everything locally
&lt;/h3&gt;

&lt;p&gt;Every engineer would clone, compile, and run all the services their code depended on locally, which in an org of that size meant a lot of repos and a lot of compute. And even after spending the time to do all that, the machines were so resource-constrained while running all of it that engineers couldn't do much else at the same time. And because each engineer was running services they hadn't written, they'd inevitably run into issues they had no context to debug. This led to them spending time on problems that had nothing to do with the code they were actually trying to test.&lt;/p&gt;

&lt;h3&gt;
  
  
  Approach 2: Shared VM + some local services
&lt;/h3&gt;

&lt;p&gt;The second approach moved some services to a shared virtual machine (VM) while keeping others running locally. That got the initial environment setup time down from the weeks required by the all-local approach to roughly a day and a half, which was meaningful progress. But it introduced a different set of problems. Engineers were spending 3+ hours a week on VM maintenance and things like debugging connectivity issues. This was time that had nothing to do with writing code. And because the VM was shared, when one engineer's change broke something, everyone working against that environment was blocked until it was resolved. The bottleneck had moved, but it hadn't gone away.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Selection Criteria for Scaling Local Development
&lt;/h2&gt;

&lt;p&gt;As the owner of the Local Development component, Prathyusha is tasked with maintaining high engineering velocity for 600 developers. She mentioned her team maintains a proactive watch over the cloud-native ecosystem; it was through this strategic evaluation that she and her team identified both &lt;a href="https://telepresence.io/" rel="noopener noreferrer"&gt;Telepresence&lt;/a&gt; and &lt;a href="https://metalbear.com/mirrord/" rel="noopener noreferrer"&gt;mirrord&lt;/a&gt; as potential solutions to address their bottlenecks.&lt;/p&gt;

&lt;p&gt;Both tools solve the same core problem: connecting a local development environment to a remote Kubernetes cluster. Here's the reasoning she gave me for landing on mirrord.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Philosophy.&lt;/strong&gt; Telepresence's model is "your workstation becomes part of the cluster network." mirrord's model is "your local process impersonates a process inside a pod." With Telepresence, a broader portion of your machine inherits cluster connectivity and behavior. With mirrord, only the specific process being run is affected. That narrower scope reduces blast radius and configuration complexity.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Operational overhead.&lt;/strong&gt; Telepresence requires managing daemon processes and per-user configuration across the team, which adds ongoing maintenance work for the platform team. mirrord is plug-and-play. Engineers pick it up and use it without her having to maintain it.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Security.&lt;/strong&gt; Telepresence relies on Preview URLs, which are public endpoints, to enable collaboration. mirrord operates entirely within the private network, so there's no risk of accidentally exposing data through a public endpoint.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Resource footprint.&lt;/strong&gt; mirrord only consumes cluster resources during an active debug session. Nothing persists between sessions, which keeps the staging cluster clean and means the platform team isn't maintaining persistent dev-tooling components on top of everything else.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What changed
&lt;/h2&gt;

&lt;p&gt;When Prathyusha walked me through the impact, I asked for the numbers first. She mentioned that with the all-local approach, environment setup took weeks per engineer. With the shared VM, that came down to about a day and a half. With mirrord, it takes around 15 minutes. That's a 144x speedup over the shared VM approach! She also mentioned how the time between an engineer writing code and knowing if it works went from an hour down to seconds.&lt;/p&gt;

&lt;p&gt;But beyond the speed, she pointed to the elimination of an entire category of problem. With mirrord, testing locally became equivalent to testing in staging as engineers connect their local process directly to the real cluster, with real dependencies. That closed the environment gap that caused the "it works on my machine but not in staging" problem. She described it as a shift in the confidence of the engineers: if it works with mirrord, engineers don't have to wonder whether it'll work in staging or not.&lt;/p&gt;

&lt;p&gt;The shared environment also solved the blocking problem that plagued the shared VM approach. With the VM, one engineer's bad change could bring the environment down for everyone. With mirrord, any number of engineers can test against the same staging cluster at the same time without affecting each other. mirrord handles the isolation through features like &lt;a href="https://metalbear.com/mirrord/docs/using-mirrord/incoming-traffic/filter-incoming-traffic" rel="noopener noreferrer"&gt;HTTP traffic filtering&lt;/a&gt;, &lt;a href="https://metalbear.com/mirrord/docs/sharing-the-cluster/queue-splitting" rel="noopener noreferrer"&gt;queue splitting&lt;/a&gt; and &lt;a href="https://metalbear.com/mirrord/docs/sharing-the-cluster/db-branching" rel="noopener noreferrer"&gt;DB branching&lt;/a&gt; which ensure each engineer's test traffic and changes don't affect other people using the environment.&lt;/p&gt;

&lt;p&gt;What all of this added up to was engineers getting their time back.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No more 3+ hours a week wasted on VM maintenance and configuration.&lt;/li&gt;
&lt;li&gt;No debugging of services they didn't write.&lt;/li&gt;
&lt;li&gt;No waiting on the dev tools team to fix a broken shared environment.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;To put the capacity impact in perspective: if mirrord saves each engineer just one hour per week, at 600 engineers that's 600 hours reclaimed every week. Over a year, that's 30,000 hours of engineering capacity redirected from infrastructure maintenance to product work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Closing remarks
&lt;/h2&gt;

&lt;p&gt;The thing that struck me most from talking with Prathyusha was how much of the improvement came from changing the model, not the tooling. At this scale, even small amounts of per-engineer overhead compound into a really big cost for the organization as a whole. But the solution wasn't faster local tooling or more compute. It was changing the model: instead of every engineer maintaining their own isolated environment, share one staging cluster and just have the DevOps team maintain that.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>productivity</category>
      <category>docker</category>
    </item>
    <item>
      <title>Great post on using AI SREs!</title>
      <dc:creator>Arsh Sharma</dc:creator>
      <pubDate>Wed, 24 Jun 2026 12:48:05 +0000</pubDate>
      <link>https://dev.to/rinkiyakedad/great-post-on-using-ai-sres-5gll</link>
      <guid>https://dev.to/rinkiyakedad/great-post-on-using-ai-sres-5gll</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/metalbear/auto-verifying-your-ai-sres-fixes-part-ii-holmesgpt-end-to-end-on-a-real-cluster-594p" class="crayons-story__hidden-navigation-link"&gt;Auto-verifying your AI-SRE's fixes (Part II): HolmesGPT end-to-end on a real cluster&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 class="crayons-logo crayons-logo--l" href="/metalbear"&gt;
            &lt;img alt="MetalBear logo" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Forganization%2Fprofile_image%2F10935%2F5e6a0e22-733f-4582-8243-d0dfdbc47bba.png" class="crayons-logo__image" width="450" height="450"&gt;
          &lt;/a&gt;

          &lt;a href="/eyalb" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F870070%2Fd01a7af7-a7ae-42a9-9fa1-5f63c974af8f.jpg" alt="eyalb profile" class="crayons-avatar__image" width="400" height="400"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/eyalb" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Eyal Bukchin
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Eyal Bukchin
                
              
              &lt;div id="story-author-preview-content-3978583" 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="/eyalb" 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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F870070%2Fd01a7af7-a7ae-42a9-9fa1-5f63c974af8f.jpg" class="crayons-avatar__image" alt="" width="400" height="400"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Eyal Bukchin&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;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/metalbear" class="crayons-story__secondary fw-medium"&gt;MetalBear&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/metalbear/auto-verifying-your-ai-sres-fixes-part-ii-holmesgpt-end-to-end-on-a-real-cluster-594p" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 24&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/metalbear/auto-verifying-your-ai-sres-fixes-part-ii-holmesgpt-end-to-end-on-a-real-cluster-594p" id="article-link-3978583"&gt;
          Auto-verifying your AI-SRE's fixes (Part II): HolmesGPT end-to-end on a real cluster
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/sre"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;sre&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/kubernetes"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;kubernetes&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&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/metalbear/auto-verifying-your-ai-sres-fixes-part-ii-holmesgpt-end-to-end-on-a-real-cluster-594p" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;15&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/metalbear/auto-verifying-your-ai-sres-fixes-part-ii-holmesgpt-end-to-end-on-a-real-cluster-594p#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;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;
            5 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


</description>
      <category>ai</category>
      <category>automation</category>
      <category>kubernetes</category>
      <category>sre</category>
    </item>
    <item>
      <title>if you're already using AI SREs, check this out!</title>
      <dc:creator>Arsh Sharma</dc:creator>
      <pubDate>Thu, 11 Jun 2026 11:08:51 +0000</pubDate>
      <link>https://dev.to/rinkiyakedad/if-youre-already-using-ai-sres-check-this-out-40d2</link>
      <guid>https://dev.to/rinkiyakedad/if-youre-already-using-ai-sres-check-this-out-40d2</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/metalbear/auto-verifying-your-ai-sres-fixes-against-your-real-cluster-with-mirrord-2p16" class="crayons-story__hidden-navigation-link"&gt;Auto-verifying your AI-SRE's fixes against your real cluster, with mirrord&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 class="crayons-logo crayons-logo--l" href="/metalbear"&gt;
            &lt;img alt="MetalBear logo" 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%2Forganization%2Fprofile_image%2F10935%2F5e6a0e22-733f-4582-8243-d0dfdbc47bba.png" class="crayons-logo__image" width="450" height="450"&gt;
          &lt;/a&gt;

          &lt;a href="/eyalb" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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%2F870070%2Fd01a7af7-a7ae-42a9-9fa1-5f63c974af8f.jpg" alt="eyalb profile" class="crayons-avatar__image" width="400" height="400"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/eyalb" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Eyal Bukchin
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Eyal Bukchin
                
              
              &lt;div id="story-author-preview-content-3873325" 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="/eyalb" 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%2F870070%2Fd01a7af7-a7ae-42a9-9fa1-5f63c974af8f.jpg" class="crayons-avatar__image" alt="" width="400" height="400"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Eyal Bukchin&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;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/metalbear" class="crayons-story__secondary fw-medium"&gt;MetalBear&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/metalbear/auto-verifying-your-ai-sres-fixes-against-your-real-cluster-with-mirrord-2p16" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 11&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/metalbear/auto-verifying-your-ai-sres-fixes-against-your-real-cluster-with-mirrord-2p16" id="article-link-3873325"&gt;
          Auto-verifying your AI-SRE's fixes against your real cluster, with mirrord
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/ai"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;ai&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/sre"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;sre&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/kubernetes"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;kubernetes&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&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/metalbear/auto-verifying-your-ai-sres-fixes-against-your-real-cluster-with-mirrord-2p16" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="24" height="24"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;5&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/metalbear/auto-verifying-your-ai-sres-fixes-against-your-real-cluster-with-mirrord-2p16#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;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;
            8 min read
          &lt;/small&gt;
            
              &lt;span class="bm-initial crayons-icon c-btn__icon"&gt;
                

              &lt;/span&gt;
              &lt;span class="bm-success crayons-icon c-btn__icon"&gt;
                

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

&lt;/div&gt;


</description>
    </item>
    <item>
      <title>A Beginner's Guide to Helm</title>
      <dc:creator>Arsh Sharma</dc:creator>
      <pubDate>Wed, 03 Jun 2026 12:25:24 +0000</pubDate>
      <link>https://dev.to/metalbear/a-beginners-guide-to-helm-5fj0</link>
      <guid>https://dev.to/metalbear/a-beginners-guide-to-helm-5fj0</guid>
      <description>&lt;p&gt;The &lt;a href="https://www.cncf.io/wp-content/uploads/2026/01/CNCF_Annual_Survey_Report_final.pdf" rel="noopener noreferrer"&gt;CNCF Annual Survey&lt;/a&gt; published in January 2026 showed that Helm is the second most used CNCF project, second only to Kubernetes itself. The reason is simple: once you start working with Kubernetes, YAML files accumulate fast and managing them keeps getting harder. A single microservice can require a Deployment, a Service, a ConfigMap, and a Secret, and that's before accounting for the different sets you’ll need for your development, staging, and production environments. Helm fixes this by packaging all of your manifests into a single, versioned unit that can be installed, upgraded, and rolled back easily.&lt;/p&gt;

&lt;p&gt;In this guide, we'll cover what Helm is, some key concepts, and the main Helm commands you need to know to deploy and manage manifests using it. You’ll walk away with a complete understanding of how to use Helm so you can simplify the YAML mess you might be in.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Prerequisite: &lt;a href="https://metalbear.com/blog/kubernetes-guide/" rel="noopener noreferrer"&gt;Basic familiarity with Kubernetes&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  What is Helm in Kubernetes?
&lt;/h2&gt;

&lt;p&gt;Helm is a package manager for Kubernetes. Just as &lt;code&gt;apt&lt;/code&gt; manages software packages on Linux or &lt;code&gt;brew&lt;/code&gt; does on macOS, Helm manages Kubernetes applications and lets you install, upgrade, and roll them back as versioned, reusable units called charts.&lt;/p&gt;

&lt;p&gt;The way Helm solves the YAML management problem is easiest to understand through a programming analogy. Bare Kubernetes manifests work fine for a single, static deployment. But the moment you need multiple similar deployments (dev, staging, prod, which may differ only by a few values), you're essentially copy-pasting. Helm solves this the same way classes solve it in &lt;a href="https://developer.mozilla.org/en-US/docs/Learn_web_development/Extensions/Advanced_JavaScript_objects/Object-oriented_programming" rel="noopener noreferrer"&gt;object-oriented programming:&lt;/a&gt; you define the boilerplate once in a chart, which can include things like the Deployment template, the Service definition, the ConfigMap structure, and then each Helm chart deployment only specifies what's different: the image, the environment variables, the command being run in the pods. Someone installing your chart can also supply their own values file and get a correctly configured deployment for their use case without touching the original templates.&lt;/p&gt;

&lt;p&gt;Like Kubernetes, Helm is declarative. You describe which chart to install and what values to pass in and Helm figures out how to get the cluster there and keeps it in that state.&lt;/p&gt;

&lt;p&gt;Helm is built around three core concepts: Charts, Releases, and Repositories. We'll look at each of these next.&lt;/p&gt;

&lt;h2&gt;
  
  
  Key Concepts
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Charts
&lt;/h3&gt;

&lt;p&gt;A chart is a self-contained package of Kubernetes resource manifests. It defines everything needed to deploy an application (the Deployment, the Service, the ConfigMap, etc.) along with default values for any configurable settings. When you install a chart, Helm uses those templates and values to generate the actual Kubernetes manifests and applies them to your cluster.&lt;/p&gt;

&lt;p&gt;Charts can also declare dependencies on other charts, called subcharts. This makes it possible to build composable application definitions, for example, a chart for a web application might pull in a chart for PostgreSQL and another for Redis rather than having manifests for those dependencies within it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Releases
&lt;/h3&gt;

&lt;p&gt;Each time you install a chart, Helm creates a release which is a named instance of that chart running in your cluster. If you install the same chart three times under different names, you get three independent releases, each with its own configuration, its own Kubernetes resources, and its own revision history.&lt;/p&gt;

&lt;p&gt;It's important to understand that releases are what Helm actually manages. Helm doesn't think in terms of individual deployments or Helm charts when it comes to a Kubernetes cluster. Instead, it tracks releases and uses them to know what's deployed, what version it's at, and how to upgrade or roll back.&lt;/p&gt;

&lt;h3&gt;
  
  
  Repositories
&lt;/h3&gt;

&lt;p&gt;A repository is a collection of charts hosted at an accessible URL. You add repositories to your local Helm installation and then install charts from them by name. The most widely used public index is &lt;a href="https://artifacthub.io" rel="noopener noreferrer"&gt;Artifact Hub&lt;/a&gt;, which aggregates charts from many sources. Most projects that run on Kubernetes publish an official Helm chart there, so in practice you'll rarely need to write a chart from scratch to deploy well-known software like nginx, PostgreSQL, or Prometheus. For example, we also publish a chart for the mirrord Kubernetes operator, which you can find on &lt;a href="https://artifacthub.io/packages/helm/metalbear/mirrord-operator" rel="noopener noreferrer"&gt;Artifact Hub here&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Inside a Helm Chart
&lt;/h2&gt;

&lt;p&gt;When you clone or create a Helm chart (using &lt;code&gt;helm create chart-name&lt;/code&gt;), you get a directory with a specific structure. Here's what a typical chart looks like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;my-chart/
├── Chart.yaml
├── values.yaml
├── charts/
└── templates/
    ├── deployment.yaml
    ├── service.yaml
    ├── ...
    └── NOTES.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;Chart.yaml&lt;/code&gt; is the chart's metadata file. It declares the chart's name, version, and description, and optionally lists dependencies on other charts.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;apiVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;v2&lt;/span&gt;
&lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;my-chart&lt;/span&gt;
&lt;span class="na"&gt;description&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;A Helm chart for my application&lt;/span&gt;
&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;0.1.0&lt;/span&gt;
&lt;span class="na"&gt;appVersion&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.0.0"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;apiVersion&lt;/code&gt; here refers to the Helm chart API version, not the Kubernetes API. &lt;code&gt;v2&lt;/code&gt; means the chart requires at least Helm 3 (don’t ask me why they couldn’t have made it simple by just having v3 for Helm 3). If you come across a chart with &lt;code&gt;v1&lt;/code&gt;, it was written for Helm 2, which had a different chart format but Helm 3 and later versions still support v1 for backward compatibility.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;version&lt;/code&gt; is the version of the chart itself. This follows &lt;a href="https://semver.org/" rel="noopener noreferrer"&gt;semantic versioning&lt;/a&gt; and should be bumped whenever you change the chart by doing things like adding a new template, changing a default value, or updating dependencies. It's independent of what the chart deploys.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;appVersion&lt;/code&gt; is the version of the application the chart deploys. This is purely for documentation and nothing else since Helm doesn't use it to pull images or make any decisions. You'd typically set it to the container image tag your chart defaults to, so users can tell at a glance what version of the application they're getting. You can update &lt;code&gt;appVersion&lt;/code&gt; without changing &lt;code&gt;version&lt;/code&gt;, and vice versa.&lt;/p&gt;

&lt;p&gt;A good way to think about it is that &lt;code&gt;appVersion&lt;/code&gt; tracks the version of the application being deployed, while &lt;code&gt;version&lt;/code&gt; tracks releases of the chart itself. If your application is upgraded from 1.0.0 to 1.1.0, you'd update &lt;code&gt;appVersion&lt;/code&gt; to reflect that change. If the chart's default image tag is also updated, you'd typically bump the chart &lt;code&gt;version&lt;/code&gt; as well, since the chart itself has changed. But if you only modify the chart (for example by adding a new template, changing default values, or updating dependencies) while continuing to deploy the same application version, you'd bump &lt;code&gt;version&lt;/code&gt; and leave &lt;code&gt;appVersion&lt;/code&gt; unchanged.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;values.yaml&lt;/code&gt; contains the default configuration for the chart. These are the values users can override at install time. For example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;repository&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;nginx&lt;/span&gt;
  &lt;span class="na"&gt;tag&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;1.25"&lt;/span&gt;
&lt;span class="na"&gt;replicaCount&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;code&gt;templates/&lt;/code&gt; is where the Kubernetes manifests live. Unlike regular YAML, these files use &lt;a href="https://docs.gomplate.ca/syntax/" rel="noopener noreferrer"&gt;Go template syntax&lt;/a&gt;, which lets Helm inject values into them at render time. A template referencing the values above would look like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;replicas&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;.Values.replicaCount&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;
  &lt;span class="na"&gt;template&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;spec&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="na"&gt;containers&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
        &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;name&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;app&lt;/span&gt;
          &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="pi"&gt;{{&lt;/span&gt; &lt;span class="nv"&gt;.Values.image.repository&lt;/span&gt; &lt;span class="pi"&gt;}}&lt;/span&gt;&lt;span class="s"&gt;:{{ .Values.image.tag }}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When someone installs this chart and passes &lt;code&gt;--set image.tag=1.26&lt;/code&gt;, Helm substitutes that value before applying the manifest to the cluster. This is the mechanism that makes a single chart work across environments without touching the templates themselves.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;charts/&lt;/code&gt; is where subchart dependencies are bundled. If your chart depends on PostgreSQL, for example, the PostgreSQL chart will live in this folder.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;NOTES.txt&lt;/code&gt; is a template file that Helm renders and prints to the terminal after a successful install. Charts typically use it to show how to connect to or use what was just deployed. This is what a simple &lt;code&gt;NOTES.txt&lt;/code&gt; could look like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Thanks for installing {{ .Chart.Name }}.

To get more info, try:

  $ helm status {{ .Release.Name }}
  $ helm get all {{ .Release.Name }}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Creating Your Own Chart
&lt;/h3&gt;

&lt;p&gt;Running &lt;code&gt;helm create my-chart&lt;/code&gt; scaffolds the directory structure we just walked through, with sensible defaults already filled in. The generated &lt;code&gt;values.yaml&lt;/code&gt; comes pre-populated with common settings like &lt;code&gt;replicaCount&lt;/code&gt;, &lt;code&gt;image.repository&lt;/code&gt;, and &lt;code&gt;image.tag&lt;/code&gt;, and &lt;code&gt;templates/&lt;/code&gt; includes a Deployment, Service, Ingress, and a few other Kubernetes resources you might need.&lt;/p&gt;

&lt;p&gt;The first thing to do after generating the chart is update &lt;code&gt;values.yaml&lt;/code&gt; to reflect your application. Change the &lt;code&gt;image.repository&lt;/code&gt; to point to your container image, set a default &lt;code&gt;tag&lt;/code&gt;, and remove any values that don't apply. The generated defaults are based on a generic nginx deployment, so most of them will need adjusting.&lt;/p&gt;

&lt;p&gt;The templates themselves often need less work. The generated Deployment and Service are wired up to the values in &lt;code&gt;values.yaml&lt;/code&gt; using the &lt;code&gt;{{ .Values.* }}&lt;/code&gt; syntax we saw earlier, so once your values are correct, the templates usually render correctly without modification. If your application has specific Kubernetes resources it needs that aren’t present or configured in the &lt;code&gt;templates/&lt;/code&gt; directory already, then you'd add those or modify the existing relevant template.&lt;/p&gt;

&lt;p&gt;Once you've made your changes, run &lt;code&gt;helm lint my-chart&lt;/code&gt; to catch mistakes like invalid YAML, missing required fields, broken template syntax. Then run &lt;code&gt;helm template my-chart&lt;/code&gt; to render the templates locally and review the exact Kubernetes manifests that would be applied to the cluster. This is the step where you verify your values are flowing into the right places before anything touches the cluster.&lt;/p&gt;

&lt;h2&gt;
  
  
  Common Helm Commands
&lt;/h2&gt;

&lt;p&gt;Let's now walk through some common commands you’ll find yourself using when working with Helm. Before you can install a chart, you need to add the repository it lives in. &lt;code&gt;helm repo add&lt;/code&gt; registers a repository under a local name:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm repo add metalbear https://metalbear-co.github.io/charts
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once added, run &lt;code&gt;helm repo update&lt;/code&gt; to pull the latest chart index from all registered repositories. Charts are versioned and updated frequently, so it's worth running this before installing. To find a chart:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm search repo mirrord-operator
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This returns matching charts with their versions and descriptions. You can also browse &lt;a href="https://artifacthub.io" rel="noopener noreferrer"&gt;Artifact Hub&lt;/a&gt; to discover charts. Each listing there shows the &lt;code&gt;helm repo add&lt;/code&gt; command you need.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;helm install&lt;/code&gt; deploys a chart as a named release:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm &lt;span class="nb"&gt;install &lt;/span&gt;mirrord-operator metalbear/mirrord-operator
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Helm renders the chart's templates, applies the resulting manifests to the cluster, and begins tracking the deployment as a release named &lt;code&gt;mirrord-operator&lt;/code&gt;. It also prints the chart's &lt;code&gt;NOTES.txt&lt;/code&gt; which typically has instructions for what to do after installing the chart.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Note: The chart used in the example above installs the &lt;a href="https://metalbear.com/mirrord/docs/getting-started/installing-mirrord/operator" rel="noopener noreferrer"&gt;mirrord operator&lt;/a&gt; which allows multiple developers to develop against the same cluster when using &lt;a href="https://metalbear.com/mirrord/" rel="noopener noreferrer"&gt;mirrord&lt;/a&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;To see all releases currently running in the cluster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm list
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To inspect a specific release and see its status and revision number:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm status mirrord-operator
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Customizing with Values
&lt;/h3&gt;

&lt;p&gt;By default, &lt;code&gt;helm install&lt;/code&gt; uses the values defined in the chart's &lt;code&gt;values.yaml&lt;/code&gt;. You can override them in two ways. For quick changes, use &lt;code&gt;--set&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm &lt;span class="nb"&gt;install &lt;/span&gt;mirrord-operator metalbear/mirrord-operator &lt;span class="nt"&gt;--set&lt;/span&gt; license.key&lt;span class="o"&gt;=&lt;/span&gt;ABC-DEF-GHI
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;For environment-specific configuration, a values file is easier to manage. Create a &lt;code&gt;custom-values.yaml&lt;/code&gt; with only the values you want to override, then pass it with &lt;code&gt;-f&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm &lt;span class="nb"&gt;install &lt;/span&gt;mirrord-operator metalbear/mirrord-operator &lt;span class="nt"&gt;-f&lt;/span&gt; values.yaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When both are used together, &lt;code&gt;--set&lt;/code&gt; takes precedence over &lt;code&gt;-f&lt;/code&gt;, which takes precedence over the chart's &lt;code&gt;values.yaml&lt;/code&gt; defaults. To see all the values a chart allows you to configure you can run this command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm show values metalbear/mirrord-operator
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When you want to update a release to a newer chart version and/or change its values use &lt;code&gt;helm upgrade&lt;/code&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm upgrade mirrord-operator metalbear/mirrord-operator &lt;span class="nt"&gt;--set&lt;/span&gt; limits.cpu&lt;span class="o"&gt;=&lt;/span&gt;400m
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Helm applies only what changed, creates a new revision, and preserves the previous one. To see the full revision history:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm &lt;span class="nb"&gt;history &lt;/span&gt;mirrord-operator
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If an upgrade causes problems, &lt;code&gt;helm rollback&lt;/code&gt; reverts a release to an earlier revision:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm rollback mirrord-operator 1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It's important to understand that a rollback creates a new revision rather than deleting the failed one which means the history stays intact so you can always see what happened.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;helm uninstall&lt;/code&gt; removes all Kubernetes resources that belong to a release:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm uninstall mirrord-operator
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;By default, Helm also deletes the release's history. To keep it for auditing or future rollbacks, pass &lt;code&gt;--keep-history&lt;/code&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Frequently Asked Helm Questions
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Do I have to use Helm with Kubernetes?
&lt;/h3&gt;

&lt;p&gt;You don't strictly need Helm. For a simple application that doesn't change much, managing it with raw &lt;code&gt;kubectl apply&lt;/code&gt; and plain YAML manifests works fine. Where Helm becomes worth it is when you're managing multiple environments, deploying the same application more than once, or distributing your application for others to run. Then maintaining separate YAML files per environment costs more in terms of time and effort than just learning Helm.&lt;/p&gt;

&lt;h3&gt;
  
  
  How do I deploy a Helm Chart on Kubernetes?
&lt;/h3&gt;

&lt;p&gt;First, add the repository the chart lives in and update your local index. Then install the chart with &lt;code&gt;helm install&lt;/code&gt;, giving the release a name and pointing to the chart:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;helm repo add metalbear https://metalbear-co.github.io/charts
helm repo update
helm &lt;span class="nb"&gt;install &lt;/span&gt;mirrord-operator metalbear/mirrord-operator
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the chart requires custom configuration, pass values with &lt;code&gt;--set&lt;/code&gt; for quick overrides or &lt;code&gt;-f your-values.yaml&lt;/code&gt; for a full config file. After installing, &lt;code&gt;helm list&lt;/code&gt; shows all running releases and &lt;code&gt;helm status &amp;lt;release-name&amp;gt;&lt;/code&gt; gives details on a specific one. The Common Helm Commands section above covers all of this in detail.&lt;/p&gt;

&lt;h2&gt;
  
  
  Next Steps
&lt;/h2&gt;

&lt;p&gt;In this guide, we covered the fundamentals of Helm: charts, releases, and repositories, how chart structure works, and the commands you'll use day to day. These basics are enough to install and manage existing charts and start writing your own charts. If you want to go deeper from here, working toward a Helm certification like &lt;a href="https://training.linuxfoundation.org/skillcred/helm/" rel="noopener noreferrer"&gt;Developing Helm Charts (SC104)&lt;/a&gt; can be a good way to continue learning Helm. For this and other topics the &lt;a href="https://helm.sh/docs/" rel="noopener noreferrer"&gt;official Helm documentation&lt;/a&gt; is the best place to go.&lt;/p&gt;

&lt;p&gt;Or if you don’t want to prepare for a certification but want to learn how to make managing multiple charts across multiple environments easier, &lt;a href="https://helmfile.readthedocs.io/" rel="noopener noreferrer"&gt;Helmfile&lt;/a&gt; is the natural next tool to look at. It lets you declaratively define a set of Helm releases as a single unit, with per-environment values and deployment ordering.&lt;/p&gt;

</description>
      <category>kubernetes</category>
      <category>devops</category>
      <category>containers</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Wrote a new blog!</title>
      <dc:creator>Arsh Sharma</dc:creator>
      <pubDate>Thu, 04 Sep 2025 10:54:59 +0000</pubDate>
      <link>https://dev.to/rinkiyakedad/wrote-a-new-blog-4d9c</link>
      <guid>https://dev.to/rinkiyakedad/wrote-a-new-blog-4d9c</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/metalbear/new-features-we-find-exciting-in-the-kubernetes-134-release-2mhl" class="crayons-story__hidden-navigation-link"&gt;New Features We Find Exciting in the Kubernetes 1.34 Release&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 class="crayons-logo crayons-logo--l" href="/metalbear"&gt;
            &lt;img alt="MetalBear logo" 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%2Forganization%2Fprofile_image%2F10935%2F5e6a0e22-733f-4582-8243-d0dfdbc47bba.png" class="crayons-logo__image"&gt;
          &lt;/a&gt;

          &lt;a href="/rinkiyakedad" class="crayons-avatar  crayons-avatar--s absolute -right-2 -bottom-2 border-solid border-2 border-base-inverted  "&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%2F488212%2F66d9df7f-f08b-481a-8a26-509ab225f79a.jpeg" alt="rinkiyakedad profile" class="crayons-avatar__image"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/rinkiyakedad" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Arsh Sharma
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Arsh Sharma
                
              
              &lt;div id="story-author-preview-content-2819466" 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="/rinkiyakedad" 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%2F488212%2F66d9df7f-f08b-481a-8a26-509ab225f79a.jpeg" class="crayons-avatar__image" alt=""&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Arsh Sharma&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;span&gt;
              &lt;span class="crayons-story__tertiary fw-normal"&gt; for &lt;/span&gt;&lt;a href="/metalbear" class="crayons-story__secondary fw-medium"&gt;MetalBear&lt;/a&gt;
            &lt;/span&gt;
          &lt;/div&gt;
          &lt;a href="https://dev.to/metalbear/new-features-we-find-exciting-in-the-kubernetes-134-release-2mhl" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Sep 4 '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/metalbear/new-features-we-find-exciting-in-the-kubernetes-134-release-2mhl" id="article-link-2819466"&gt;
          New Features We Find Exciting in the Kubernetes 1.34 Release
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/kubernetes"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;kubernetes&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/devops"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;devops&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/cloud"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;cloud&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/docker"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;docker&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/metalbear/new-features-we-find-exciting-in-the-kubernetes-134-release-2mhl" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left"&gt;
            &lt;div class="multiple_reactions_aggregate"&gt;
              &lt;span class="multiple_reactions_icons_container"&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/exploding-head-daceb38d627e6ae9b730f36a1e390fca556a4289d5a41abb2c35068ad3e2c4b5.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/multi-unicorn-b44d6f8c23cdd00964192bedc38af3e82463978aa611b4365bd33a0f1f4f3e97.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
                  &lt;span class="crayons_icon_container"&gt;
                    &lt;img src="https://assets.dev.to/assets/sparkle-heart-5f9bee3767e18deb1bb725290cb151c25234768a0e9a2bd39370c382d02920cf.svg" width="18" height="18"&gt;
                  &lt;/span&gt;
              &lt;/span&gt;
              &lt;span class="aggregate_reactions_counter"&gt;10&lt;span class="hidden s:inline"&gt;&amp;nbsp;reactions&lt;/span&gt;&lt;/span&gt;
            &lt;/div&gt;
          &lt;/a&gt;
            &lt;a href="https://dev.to/metalbear/new-features-we-find-exciting-in-the-kubernetes-134-release-2mhl#comments" class="crayons-btn crayons-btn--s crayons-btn--ghost crayons-btn--icon-left flex items-center"&gt;
              

              &lt;span class="hidden s:inline"&gt;Add&amp;nbsp;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;
            8 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>kubernetes</category>
      <category>devops</category>
      <category>cloud</category>
      <category>docker</category>
    </item>
  </channel>
</rss>
