<?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: Clint Edwards</title>
    <description>The latest articles on DEV Community by Clint Edwards (@bithckr).</description>
    <link>https://dev.to/bithckr</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%2F4008634%2Fd04bd433-ad90-4834-868f-c755008f2c06.jpeg</url>
      <title>DEV Community: Clint Edwards</title>
      <link>https://dev.to/bithckr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bithckr"/>
    <language>en</language>
    <item>
      <title>Everyone seems to be returning to the monolith, but event-driven microservices are still the right choice for high-scale infrastructure. We’ve built the tooling and aligned our teams. We’ll be here when the pendulum swings back.</title>
      <dc:creator>Clint Edwards</dc:creator>
      <pubDate>Tue, 30 Jun 2026 13:37:58 +0000</pubDate>
      <link>https://dev.to/bithckr/everyone-seems-to-be-returning-to-the-monolith-but-event-driven-microservices-are-still-the-right-5d9e</link>
      <guid>https://dev.to/bithckr/everyone-seems-to-be-returning-to-the-monolith-but-event-driven-microservices-are-still-the-right-5d9e</guid>
      <description>&lt;div class="ltag__link--embedded"&gt;
  &lt;div class="crayons-story "&gt;
  &lt;a href="https://dev.to/bithckr/the-microservices-exodus-why-were-not-leaving-1dh3" class="crayons-story__hidden-navigation-link"&gt;The Microservices Exodus: Why We’re Not Leaving&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 href="/bithckr" class="crayons-avatar  crayons-avatar--l  "&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%2F4008634%2Fd04bd433-ad90-4834-868f-c755008f2c06.jpeg" alt="bithckr profile" class="crayons-avatar__image" width="800" height="1199"&gt;
          &lt;/a&gt;
        &lt;/div&gt;
        &lt;div&gt;
          &lt;div&gt;
            &lt;a href="/bithckr" class="crayons-story__secondary fw-medium m:hidden"&gt;
              Clint Edwards
            &lt;/a&gt;
            &lt;div class="profile-preview-card relative mb-4 s:mb-0 fw-medium hidden m:inline-block"&gt;
              
                Clint Edwards
                
              
              &lt;div id="story-author-preview-content-4024447" 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="/bithckr" 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%2F4008634%2Fd04bd433-ad90-4834-868f-c755008f2c06.jpeg" class="crayons-avatar__image" alt="" width="800" height="1199"&gt;
                      &lt;/span&gt;
                      &lt;span class="crayons-link crayons-subtitle-2 mt-5"&gt;Clint Edwards&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;/div&gt;
          &lt;a href="https://dev.to/bithckr/the-microservices-exodus-why-were-not-leaving-1dh3" class="crayons-story__tertiary fs-xs"&gt;&lt;time&gt;Jun 29&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/bithckr/the-microservices-exodus-why-were-not-leaving-1dh3" id="article-link-4024447"&gt;
          The Microservices Exodus: Why We’re Not Leaving
        &lt;/a&gt;
      &lt;/h2&gt;
        &lt;div class="crayons-story__tags"&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/distributedsystems"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;distributedsystems&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/architecture"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;architecture&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/microservices"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;microservices&lt;/a&gt;
            &lt;a class="crayons-tag  crayons-tag--monochrome " href="/t/eventdrivenarchitect"&gt;&lt;span class="crayons-tag__prefix"&gt;#&lt;/span&gt;eventdrivenarchitect&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/bithckr/the-microservices-exodus-why-were-not-leaving-1dh3#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;
            6 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>architecture</category>
      <category>discuss</category>
      <category>microservices</category>
      <category>systemdesign</category>
    </item>
    <item>
      <title>The Microservices Exodus: Why We’re Not Leaving</title>
      <dc:creator>Clint Edwards</dc:creator>
      <pubDate>Wed, 20 May 2026 17:40:08 +0000</pubDate>
      <link>https://dev.to/bithckr/the-microservices-exodus-why-were-not-leaving-1dh3</link>
      <guid>https://dev.to/bithckr/the-microservices-exodus-why-were-not-leaving-1dh3</guid>
      <description>&lt;h4&gt;
  
  
  Everyone seems to be consolidating. Here’s why we’re staying the course on microservices and event-driven architecture.
&lt;/h4&gt;

&lt;h3&gt;
  
  
  The Backlash Is Real
&lt;/h3&gt;

&lt;p&gt;Over the past two years, a quiet but growing chorus of engineering leaders have been publishing post-mortems with a familiar headline: &lt;em&gt;”We’re moving back to the monolith.”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Amazon Prime Video made waves in 2023 when they detailed migrating a distributed microservices pipeline to a monolith, cutting infrastructure costs by 90%. Shopify doubled down on their “modular monolith.” Stack Overflow never left. DHH declared microservices a “cargo cult.” And a wave of CTOs nodded along.&lt;/p&gt;

&lt;p&gt;The critique is fair. Microservices, when done poorly, introduce a staggering amount of operational overhead: distributed tracing across dozens of services, network latency compounding at every hop, the cognitive burden of eventual consistency, and the sheer infrastructure cost of running hundreds of containers for what could be a simple CRUD app.&lt;/p&gt;

&lt;p&gt;These are legitimate complaints. And for many teams, the consolidation makes sense. A distributed architecture, in many of these cases, was simply the wrong choice.&lt;/p&gt;

&lt;h3&gt;
  
  
  What the Backlash Is Actually About
&lt;/h3&gt;

&lt;p&gt;The teams retreating from microservices are overwhelmingly retreating from &lt;strong&gt;premature microservices&lt;/strong&gt; : services decomposed too early, too granularly, without the organizational structure or domain knowledge to justify the split.&lt;/p&gt;

&lt;p&gt;Conway’s Law cuts both ways. If your team isn’t structured to own independent services, your architecture will betray you. A microservices architecture operated by a monolithic team is the &lt;em&gt;worst of both worlds&lt;/em&gt;: distributed complexity with centralized bottlenecks.&lt;/p&gt;

&lt;p&gt;The problem was never microservices. The problem was applying microservices to problems that didn’t warrant them, or doing so without the event-driven infrastructure needed to make them compose cleanly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Event-Driven Architecture Changes the Calculus
&lt;/h3&gt;

&lt;p&gt;The teams that struggled most with microservices were the ones coupling services together synchronously. REST calls chaining through five services, each one a failure domain, each one compounding latency. That’s not a microservices problem; that’s a synchronous integration problem wearing microservices clothing.&lt;/p&gt;

&lt;p&gt;When services communicate through &lt;strong&gt;events&lt;/strong&gt; (asynchronous and durable), the failure modes change entirely. A service going down doesn’t cascade; it just falls behind. A new consumer can subscribe to an existing event stream without touching the producer. Business logic can evolve independently because the coupling point is the event schema, not a direct synchronous call to another service’s API.&lt;/p&gt;

&lt;p&gt;Event-driven microservices aren’t just a deployment strategy. They’re a different way of modeling your business domain. State changes become first-class citizens, and services are genuinely decoupled rather than nominally so.&lt;/p&gt;

&lt;p&gt;This is the architecture we’ve invested in, and walking away from it now would mean discarding the very properties that make it powerful.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Price of Admission
&lt;/h3&gt;

&lt;p&gt;We’re not naive about the tradeoffs. Here’s an honest accounting of what staying on this path requires:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Operational maturity is non-negotiable.&lt;/strong&gt; You need distributed tracing, structured logging, and health observability. Tooling has matured significantly here: OpenTelemetry, Grafana, and purpose-built messaging infrastructure make this tractable in a way it simply wasn’t five years ago.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Get the boundaries wrong and nothing else matters.&lt;/strong&gt; The right service decomposition emerges from deep understanding of the business domain. Getting composition wrong is the original sin of microservices: a poorly drawn boundary forces two services to change in lockstep, which eliminates the independence you decomposed to achieve in the first place. Correct composition means each service maps to a genuine capability with a stable interface; one that can evolve, scale, and fail independently. The payoff, when you get it right, is services that rarely need to change together, which is the entire point.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Schema governance is load-bearing.&lt;/strong&gt; In a system where services communicate entirely through events, the schema is the ultimate contract between producers and consumers. Implementing robust schema registries, enforcing strict versioning strategies, and adhering to backward-compatibility disciplines are not optional overhead; they are structural requirements. Breaking a schema means silently breaking downstream consumers, an operational failure far worse than a compile-time error.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Idempotency must be a first-class citizen.&lt;/strong&gt; Because high-throughput, distributed event streams inherently rely on at-least-once delivery guarantees, messages &lt;em&gt;will&lt;/em&gt; be delivered more than once during network partitions, retries, or rebalances. Every consumer must be designed to handle duplicate events gracefully. Without this foundational discipline, transient network hiccups will inevitably manifest as silent data corruption bugs in production.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Service boundaries enforce structural quality.&lt;/strong&gt; When a microservice is genuinely independent, the quality bar for that single deployment unit rises. You can no longer paper over poorly isolated boundaries with end-to-end integration tests that accidentally span multiple domains. This architecture forces engineering teams toward contract testing and isolated test suites; practices that surface architectural friction early, exactly where engineering flaws love to hide.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Distributed systems demand a different testing vocabulary.&lt;/strong&gt; Unit tests and end-to-end tests alone aren’t enough. Chaos engineering (deliberately injecting failures, partitions, and latency into a running system) is the only way to verify that partial failures degrade gracefully rather than cascade. Endurance testing matters just as much: a service that handles load correctly for five minutes but leaks memory or exhausts connection pools over hours will fail in production in ways that no short-lived test suite will catch. These disciplines are expensive to build but more expensive to skip, and they’re largely absent from the testing culture that forms around monolithic codebases.&lt;/p&gt;

&lt;h3&gt;
  
  
  What This Means for Customers
&lt;/h3&gt;

&lt;p&gt;Architectural elegance means nothing if it doesn’t translate to a reliable experience for the end user. When we committed to event-driven microservices, a significant part of that decision was about what it would mean for the workloads running on top of the platform.&lt;/p&gt;

&lt;p&gt;The practical consequences are worth being specific about.&lt;/p&gt;

&lt;p&gt;Scalability in a microservices architecture is granular. Individual services scale independently, so a spike in one capability doesn’t force you to scale everything. That matters in an analytics platform where certain workloads are bursty and others are constant. Failover is similarly scoped: redundancy is a property of individual services, not the platform as a whole, which means a degraded component degrades gracefully rather than triggering a cascade.&lt;/p&gt;

&lt;p&gt;Because services are independently deployable, fixes and improvements can ship to a specific capability without a platform-wide maintenance window. For teams running our platform in production, that translates to shorter outage windows and lower risk per release. The architecture was designed with operational continuity as a constraint, not an afterthought.&lt;/p&gt;

&lt;p&gt;Extensibility follows the same pattern. The REST APIs that our services use to communicate with each other are the same APIs available to third-party developers. There’s no privileged internal interface. That consistency is deliberate: it means the integration model for external tooling is identical to the one for core platform components.&lt;/p&gt;

&lt;p&gt;The honest tradeoff is eventual consistency. In a distributed, event-driven system, reads don’t always reflect the latest write immediately. For analytics and data pipeline workloads (which represent the overwhelming majority of what runs on the platform), that’s not just an acceptable tradeoff, it’s the right one. Workloads that prioritize throughput and scale over strict read-after-write semantics are exactly what this architecture was designed to serve.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Honest Comparison
&lt;/h3&gt;

&lt;p&gt;The monolith advocates aren’t wrong that consolidation can reduce operational complexity for the right team working on the right problem. If you’re a team of 10 building a focused SaaS product with a well-understood domain, a well-structured monolith might genuinely serve you better for the next three years.&lt;/p&gt;

&lt;p&gt;But if you’re building infrastructure that must integrate with heterogeneous systems, scale individual capabilities independently, absorb spikes from external event sources, and evolve without coordinated release trains, then you need an architecture that was designed for those constraints.&lt;/p&gt;

&lt;p&gt;Microservices with event-driven communication is that architecture. The teams abandoning it, in most cases, are abandoning a poorly executed version of it.&lt;/p&gt;

&lt;p&gt;We’re not staying the course out of stubbornness. We’re staying the course because we’ve done the work to execute it correctly, and the results for the customers building on top of it speak for themselves.&lt;/p&gt;

&lt;h3&gt;
  
  
  Final Thought
&lt;/h3&gt;

&lt;p&gt;The pendulum swings in software architecture because most architectural failures are blamed on the pattern rather than the execution. Microservices didn’t fail those teams. Distributed systems operated without the right tooling, organizational alignment, or domain clarity failed those teams.&lt;/p&gt;

&lt;p&gt;We’ve built the tooling. We’ve aligned the teams. We’ve done the domain work.&lt;/p&gt;

&lt;p&gt;The exodus is happening around us. We’ll be here when the pendulum swings back.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Have thoughts on event-driven architecture or microservices tradeoffs? Drop a comment below; we’d love to hear from teams on both sides of this debate.&lt;/em&gt;&lt;/p&gt;




</description>
      <category>distributedsystems</category>
      <category>architecture</category>
      <category>microservices</category>
      <category>eventdrivenarchitect</category>
    </item>
  </channel>
</rss>
