{"id":2944,"date":"2025-11-28T14:40:36","date_gmt":"2025-11-28T14:40:36","guid":{"rendered":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2025\/11\/28\/you-want-microservices-but-do-you-really-need-them\/"},"modified":"2025-11-28T14:40:36","modified_gmt":"2025-11-28T14:40:36","slug":"you-want-microservices-but-do-you-really-need-them","status":"publish","type":"post","link":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/2025\/11\/28\/you-want-microservices-but-do-you-really-need-them\/","title":{"rendered":"You Want Microservices, But Do You Really Need Them?"},"content":{"rendered":"<p>Do you know who managed to cut costs by a staggering 90% by <a href=\"https:\/\/web.archive.org\/web\/20230505213415\/https:\/\/www.primevideotech.com\/video-streaming\/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90\" rel=\"nofollow noopener\" target=\"_blank\">abandoning microservices for a monolith<\/a> in May 2023? Not a cash-strapped startup or an indie project\u2014<strong>Amazon itself<\/strong>, for its Prime Video service. The same AWS that earns <a href=\"https:\/\/www.datacenterdynamics.com\/en\/news\/aws-achieves-123bn-annualized-revenue-run-rate-capex-for-the-year-set-to-exceed-118bn\/\" rel=\"nofollow noopener\" target=\"_blank\">billions every year<\/a> by selling microservices infrastructure admitted that, sometimes, a good old monolith wins.\u00a0<\/p>\n<p>This reversal from the company that practically wrote the playbook on distributed systems sent shockwaves through the cloud-native community. Amazon later removed the original blog post, but the internet never forgets, as you\u2019ll see later.<\/p>\n\n<p>I\u2019ve been <a href=\"https:\/\/x.com\/_zenman\/status\/1224557249906999296\" rel=\"nofollow\" target=\"_blank\">speaking up against unnecessary or premature use of microservices architecture<\/a> for five, six years now. After Amazon Prime Video went back to a monolith, I came across several eminent architects who are also speaking against microservices as default.<\/p>\n\n<p>And yet in most tech circles, microservices are still viewed as the only way to build modern software. They dominate conferences, blogs, and job listings. Teams adopt them not because their requirements justify it, but because it feels like the obvious (and r\u00e9sum\u00e9-boosting) choice. \u201cCloud-native\u201d has become synonymous with \u201cmicroservices-by-default\u201d, as if other approaches are as obsolete as floppy disks.\u00a0<\/p>\n\n<p>Microservices <strong>do<\/strong> solve real problems, but at a massive scale. Most teams don\u2019t actually operate at that scale.<\/p>\n<p>With this article, I urge you to reflect on the question the industry has mostly stopped asking: <strong>Should microservices be the default choice for building at scale?<\/strong> We\u2019ll look at reversal stories and insights from seasoned architects, and weigh the trade-offs and alternatives. After considering all of this, you can decide whether your problem really needs a constellation of microservices.<\/p>\n\n<h2 class=\"wp-block-heading\">Microservices: The Agility-Complexity Trade-Off<\/h2>\n\n<p>On paper, microservices look impressive. Instead of one big monolith, you split your application into many small services. Each one can be written in any language, owned by a small team, and deployed on its own schedule. If you need more capacity, you can scale only the part that\u2019s under load. The promise is elegant: independent deployability, autonomous teams, multi-language stacks, and elastic scaling.<\/p>\n\n<p>But the catch is that every split creates a seam, and every seam is a potential failure point. Inside a monolith, function calls are instant and predictable. Across services, those same calls become network requests: slower, failure-prone, sometimes returning inconsistent data. With dozens (or hundreds) of services, you need version management, schema evolution, distributed transactions, tracing, centralized logging, and heavy-duty CI\/CD pipelines just to keep things running.<\/p>\n\n<p>This <a href=\"https:\/\/thenewstack.io\/miniservices-a-realistic-alternative-to-microservices\/\" rel=\"nofollow noopener\" target=\"_blank\">Gartner diagram<\/a> captures the trade-off perfectly: microservices exchange the simplicity of one codebase for the complexity of many.<\/p>\n\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=1640927420  fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"563\" src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/11\/microservices-gartner.jpg\" class=\"fade-in attachment-full size-full\" alt=\"microservices gartner\" title=\"- microservices gartner\" \/>\n    <\/div>\n\n<p>At a massive scale (think Netflix), that trade-off may be worth it. But when operational benefits don\u2019t outweigh the costs, teams end up paying a steep price in debugging, coordination, and glue code just to hold their product together.<\/p>\n\n<p>Microservices make sense in very specific scenarios <em>where distinct business capabilities need independent scaling and deployment<\/em>. For example, <strong>payment processing<\/strong> (security-critical, rarely updated) differs fundamentally from <strong>recommendation engine<\/strong> (memory-intensive, constantly A\/B tested). These components have different scaling patterns, deployment cycles, and risk profiles, which justify separate services.<\/p>\n\n<p>The success of microservices hinges on clear business domain boundaries that match your team structure, as <a href=\"https:\/\/martinfowler.com\/bliki\/ConwaysLaw.html\" rel=\"nofollow noopener\" target=\"_blank\">Conway\u2019s Law<\/a> predicts. If your organization naturally splits into autonomous teams that own distinct capabilities, microservices might work. (So, most <strong>\u201cone-and-a-half pizza\u201d<\/strong> startups don\u2019t qualify, do they?)\u00a0<\/p>\n\n<p>That\u2019s why microservices work effectively for companies like Amazon and Uber\u2014although <strong>not always<\/strong>.<\/p>\n\n<p>In fact, most organizations lack the prerequisites: dedicated service ownership, mature CI\/CD, robust monitoring, and crucially, <em>scale that justifies the operational overhead<\/em>. Startups that adapt microservices prematurely often <a href=\"https:\/\/www.indiehackers.com\/post\/why-we-replaced-our-microservices-with-a-monolith-and-it-worked-NEec3alGYvYoRLHjgrGv\" rel=\"nofollow noopener\" target=\"_blank\">regret their decision<\/a>.<\/p>\n\n<p>So ask yourself:<\/p>\n\n<p>Are you using microservices to solve an independent scaling problem, or are you inviting more complexity than your solution needs?<\/p>\n\n<h2 class=\"wp-block-heading\">The Great Microservices Reversal<\/h2>\n\n<p>Ironically, even though tech giants are the ones that are most likely to benefit from microservices, many of these very same companies are walking back their microservices architectures, and the results are eye-opening.<\/p>\n\n<h3 class=\"wp-block-heading\">Amazon Prime Video: 90% Cost Reduction with a Monolith<\/h3>\n\n<p>In May 2023, Amazon engineers admitted the unthinkable: Prime Video had abandoned microservices for a monolith. Their Video Quality Analysis (VQA) team had built what looked like a textbook distributed system: AWS Step Functions and Lambda monitored thousands of video streams through independent, scalable components. On paper, it was serverless perfection.<\/p>\n\n<p>In practice, it was a disaster. \u201cWe realized that distributed approach wasn\u2019t bringing a lot of benefits in our specific use case,\u201d said <a href=\"https:\/\/web.archive.org\/web\/20230505213415\/https:\/\/www.primevideotech.com\/video-streaming\/scaling-up-the-prime-video-audio-video-monitoring-service-and-reducing-costs-by-90\" rel=\"nofollow noopener\" target=\"_blank\">Marcin Kolny in the now-archived Prime Video Engineering blog<\/a>. Their \u201cinfinitely scalable\u201d system <strong>crumbled at just 5% of expected load<\/strong> due to orchestration overhead.<\/p>\n\n<p>The fix was embarrassingly simple: collapse everything into a single process. It resulted in <em>90% lower costs and faster performance<\/em>.\u00a0<\/p>\n\n<h3 class=\"wp-block-heading\">Twilio Segment: From 140 Services to One Fast Monolith<\/h3>\n\n<p>Back in 2018, Twilio Segment, a customer data platform, documented a similar reversal in their brutally honest post <a href=\"https:\/\/www.twilio.com\/en-us\/blog\/developers\/best-practices\/goodbye-microservices\" rel=\"nofollow noopener\" target=\"_blank\">\u201cGoodbye Microservices\u201d<\/a>.<\/p>\n\n<p>Their system had sprawled into 140+ services, creating operational chaos. At one point, three full-time engineers spent most of their time firefighting instead of building. As they admitted, \u201cInstead of enabling us to move faster, the small team found themselves mired in exploding complexity. Essential benefits of this architecture became burdens. As our velocity plummeted, our defect rate exploded.\u201d<\/p>\n\n<p>Their solution was radical but effective: collapse all 140+ services into a single monolith. The impact was immediate. Test suites that once took an hour now finished in milliseconds. Developer productivity soared: they shipped 46 improvements to shared libraries in a year, up from 32 in the microservices era.\u00a0<\/p>\n\n<h3 class=\"wp-block-heading\">Shopify: Sanity over Hype<\/h3>\n\n<p>Shopify runs one of the largest Ruby on Rails codebases in the world (2.8M+ lines). Instead of chasing microservices, they deliberately chose a <a href=\"https:\/\/shopify.engineering\/shopify-monolith\" rel=\"nofollow noopener\" target=\"_blank\">modular monolith<\/a>: a single codebase with clear component boundaries.<\/p>\n\n<p>Shopify\u2019s engineers concluded that \u201cmicroservices would bring their own set of challenges\u201d, so they chose modularity without the operational overhead.<\/p>\n\n<p>All these examples beg the question:<\/p>\n\n<p>If even the pioneers of microservices are retreating, why are we still treating it as gospel?<\/p>\n\n<h2 class=\"wp-block-heading\">Expert Voices against Microservices Mania<\/h2>\n\n<p>Some of the most respected voices in software architecture\u2014people behind many of the systems we all admire\u2014are also cautioning against microservices and repeating mistakes they\u2019ve seen play out at scale. (After all, cheerleaders don\u2019t play the game; cloud DevRels rarely build at scale.)<\/p>\n\n<h3 class=\"wp-block-heading\">Rails Creator: Simplicity over Sophistication<\/h3>\n\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/David_Heinemeier_Hansson\" rel=\"nofollow noopener\" target=\"_blank\">David Heinemeier Hansson<\/a> (DHH), the creator of Ruby on Rails, has long advocated simplicity over architectural trends. His <a href=\"https:\/\/world.hey.com\/dhh\/even-amazon-can-t-make-sense-of-serverless-or-microservices-59625580\" rel=\"nofollow noopener\" target=\"_blank\">analysis of the Amazon Prime Video reversal<\/a> puts it bluntly:<\/p>\n\n<p><strong>\u201cThe real-world results of all this theory are finally in, and it\u2019s clear that in practice, microservices pose perhaps the biggest siren song for needlessly complicating your system.\u201d<\/strong><\/p>\n\n<p>DHH\u2019s image of a siren song is apt: microservices promise elegance but leave teams wrecked on the rocks of complexity.<\/p>\n\n<h3 class=\"wp-block-heading\">Microservices: Mistake of The Decade?<\/h3>\n\n<p><a href=\"https:\/\/threadreaderapp.com\/thread\/1592227285024636928.html\" rel=\"nofollow noopener\" target=\"_blank\">Jason Warner, former CTO of GitHub<\/a>, doesn\u2019t mince words while commenting on microservices:\u00a0<\/p>\n\n<p><strong>\u201cI\u2019m convinced that one of the biggest architectural mistakes of the past decade was going full microservice.\u201d<\/strong><\/p>\n\n<p>Warner understands scale: GitHub runs at internet scale, and he\u2019s led engineering at Heroku and Canonical. His critique cuts deeper because it\u2019s lived experience, beyond <a href=\"https:\/\/www.martinfowler.com\/bliki\/MicroservicePremium.html#:~:text=The%20majority%20of%20software%20systems%20should%20be%20built%20as%20a%20single%20monolithic%20application\" rel=\"nofollow noopener\" target=\"_blank\">theoretical advice<\/a>:<\/p>\n\n<p><strong>\u201c90% of all companies in the world could probably just be a monolith running against a primary db cluster with db backups, some caches and proxies and be done with it.\u201d<\/strong><\/p>\n\n<h3 class=\"wp-block-heading\">GraphQL Co-Creator: \u201cDon\u2019t\u201d<\/h3>\n\n<p>Then there\u2019s <a href=\"https:\/\/www.linkedin.com\/in\/schrockn\/\" rel=\"nofollow noopener\" target=\"_blank\">Nick Schrock, co-creator of GraphQL<\/a>. If anyone had a reason to cheer for distributed systems, it\u2019d be him. Instead, he says:<\/p>\n\n<p><strong>\u201cMicroservices are such a fundamentally and catastrophically bad idea that there are going to be an entire cohort of multi-billion companies built that do nothing but contain the damage that they have wrought.\u201d<\/strong><\/p>\n\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=1169451826  fetchpriority=\"high\" decoding=\"async\" width=\"621\" height=\"256\" src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/11\/microservices-bad-idea-Graph-QL-cocreator.png\" class=\"fade-in attachment-full size-full\" alt=\"microservices bad idea Graph QL cocreator\" title=\"- microservices bad idea Graph QL cocreator\" \/>\n    <\/div>\n\n<p>He goes on to describe microservices as <a href=\"https:\/\/x.com\/schrockn\/status\/1130567665548873728\" rel=\"nofollow\" target=\"_blank\">organizational gambles<\/a>:<\/p>\n\n<p><strong>\u201c[Y]ou end up with these services that you have to maintain forever that match the org structure and the product requirements from five years ago. Today, they don\u2019t make a lot of sense.\u201d<\/strong><\/p>\n\n<p>The person who literally built tools to fix distributed system pain says <strong>don\u2019t distribute unless you must<\/strong>, maybe it\u2019s time to listen.<\/p>\n\n<h3 class=\"wp-block-heading\">Other Voices Questioning Microservice Maximalism<\/h3>\n\n<p>Other engineering leaders are also reconsidering microservice maximalism.\u00a0<\/p>\n\n<p>At Uber, <a href=\"https:\/\/x.com\/GergelyOrosz\/status\/1247132806041546754\" rel=\"nofollow\" target=\"_blank\">Gergely Orosz admitted<\/a>:<\/p>\n\n<p><strong>\u201cWe\u2019re moving many of our microservices to macroservices (well-sized services). Exactly b\/c testing and maintaining thousands of microservices is not only hard \u2013 it can cause more trouble long-term than it solves the short-term.\u201d<\/strong><\/p>\n\n<p>Uber still runs microservices where they\u2019re justified, but they\u2019re <a href=\"https:\/\/www.youtube.com\/watch?v=kb-m2fasdDY&amp;t=430s\" rel=\"nofollow noopener\" target=\"_blank\">choosing their battles<\/a>.<\/p>\n\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Kelsey_Hightower\" rel=\"nofollow noopener\" target=\"_blank\">Kelsey Hightower<\/a>, known for his work with Kubernetes and Google Cloud, cut through the microservices hype with CS101:<\/p>\n\n<p><strong>\u201cI\u2019m willing to wager a monolith will outperform every microservice architecture. Just do the math on the network latency between each service and the amount of serialization and deserialization of each request.\u201d<\/strong><\/p>\n\n<p>He subsequently deleted this tweet, but the network math still grades microservices.<\/p>\n\n<p>When pioneers like these, including those who actually solved distributed systems at scale, start waving red flags, it\u2019s worth taking note.\u00a0<\/p>\n\n<p>My question here is:<\/p>\n\n<p>If GitHub\u2019s CTO thinks 90% of companies don\u2019t need microservices, are you sure yours is part of the 10%?<\/p>\n\n<h2 class=\"wp-block-heading\">The Hidden Costs of Microservices<\/h2>\n\n<p>Microservices demand such caution because of these hidden costs that teams often underestimate.<\/p>\n\n<h3 class=\"wp-block-heading\">Operational Costs<\/h3>\n\n<p>A monolith is simple: in-process function calls.\u00a0<\/p>\n\n<p>Microservices replace that with networks. Every request now travels across machines, through load balancers, service meshes, and authentication layers, creating more failure points and infrastructure needs. You suddenly need service discovery (how services find each other), distributed tracing (tracking requests across services), centralized logging (aggregating logs from multiple services), and monitoring systems that understand service topology.<\/p>\n\n<p>Each of these is necessary, but together they\u2019re complex and expensive. Duplicated data requires extra storage. Constant service-to-service calls rack up network egress fees. Cloud <a href=\"https:\/\/www.reddit.com\/r\/ProgrammerHumor\/comments\/xkadmh\/150k_bill\/\" rel=\"nofollow noopener\" target=\"_blank\">costs scale faster<\/a> than the apps they host. Prime Video\u2019s workflow <a href=\"https:\/\/www.wudsn.com\/productions\/www\/site\/news\/2023\/2023-05-08-microservices-01.pdf\" rel=\"nofollow noopener\" target=\"_blank\">spent more on orchestrating S3 data transfers<\/a> between services than on actual processing.\u00a0<\/p>\n\n<h3 class=\"wp-block-heading\">Developer Productivity Drain<\/h3>\n\n<p>In microservices, the hard part isn\u2019t writing code; it\u2019s navigating distributed system interactions.<\/p>\n\n<p>In \u201c<a href=\"https:\/\/stackoverflow.blog\/2020\/11\/23\/the-macro-problem-with-microservices\/\" rel=\"nofollow noopener\" target=\"_blank\">The macro problem with microservices<\/a>\u201c, Stack Overflow identifies a critical productivity drain: distributed state forces developers to write defensive code that constantly checks for partial failures.\u00a0<\/p>\n\n<p>In a monolith, a developer can follow a code path end-to-end within one repo. In microservices, one feature might span four or five repos with different dependencies and deploy cycles. Adding a single field triggers weeks of coordination: you need to update one service, then wait for consumers to adopt, version your APIs, manage rollouts, and so on. Different teams will also typically maintain different microservices using different tech stacks, so there\u2019s a risk that they unintentionally break something as well. Breaking changes that a compiler would catch in a monolith now surface as runtime errors in production.<\/p>\n\n<h3 class=\"wp-block-heading\">Testing and Deployment Complexity<\/h3>\n\n<p>Monolith integration and end-to-end tests are faster because they run locally, in memory. Distributed systems don\u2019t allow that luxury: real confidence requires integration and end-to-end tests across numerous service boundaries. So these tests are slower, more brittle, and require staging environments that resemble production, all of which effectively double infrastructure costs and slow feedback loops.<\/p>\n\n<p>Many teams discover this only after their <a href=\"https:\/\/www.craigkerstiens.com\/2019\/03\/13\/give-me-back-my-monolith\/#:~:text=%20now%20to%20really%20test%20my%20service%20I%20have%20to\" rel=\"nofollow noopener\" target=\"_blank\">test suite becomes a bottleneck<\/a>. Deployment orchestration adds another layer. Rolling updates across interdependent services require careful sequencing to avoid breaking contracts. Version incompatibility disturbs frequently: Service A works with Service B v2.1 but breaks with v2.2.<\/p>\n\n<p>Failed deployments leave systems partially updated and difficult to recover.<\/p>\n\n<h3 class=\"wp-block-heading\">Data Management and Consistency<\/h3>\n\n<p>The most underestimated complexity of microservices lies in data consistency across service boundaries.<\/p>\n\n<p>Monoliths benefit from ACID transactions: operations complete entirely or fail entirely. Microservices split that across services, forcing you to build <a href=\"https:\/\/cs.brown.edu\/courses\/csci2952-f\/slides\/Class16.pdf\" rel=\"nofollow noopener\" target=\"_blank\">distributed saga<\/a> (multi-step workflows with rollback logic), live with <a href=\"https:\/\/en.wikipedia.org\/wiki\/Eventual_consistency\" rel=\"nofollow noopener\" target=\"_blank\">eventual consistency<\/a> (data only becomes correct after a delay), or write <a href=\"https:\/\/softwarepatternslexicon.com\/101\/12\/24\/\" rel=\"nofollow noopener\" target=\"_blank\">compensation logic<\/a> (extra code to undo partial failures). What was once a single database transaction now spans network hops, retries, and partial failures. Debugging inconsistent orders or payments gets much harder when state is duplicated across services.\u00a0<\/p>\n\n<p>As <a href=\"https:\/\/arxiv.org\/pdf\/2103.00170\" rel=\"nofollow noopener\" target=\"_blank\">research confirms<\/a>, data duplication, correctness challenges, and transactional complexity are the top pain points in microservice systems.<\/p>\n\n<h3 class=\"wp-block-heading\">The Compounding Effect<\/h3>\n\n<p>These complexities multiply. Operational overhead makes debugging harder, which slows testing, which makes deployments riskier, which creates more incidents. Microservices don\u2019t just shift complexity from code to operations; they tax every part of your engineering process.\u00a0<\/p>\n\n<p>Unless your scale demands it, that tax often outweighs the benefits.\u00a0<\/p>\n\n<p>Think about it:<\/p>\n\n<p>If every network hop adds complexity and cost, does your use case really justify the price?<\/p>\n\n<h2 class=\"wp-block-heading\">Beyond Microservices: Smarter Architectural Alternatives<\/h2>\n\n<p>Before defaulting to microservices, it\u2019s worth considering how simpler, well-structured architectures can deliver comparable scalability without the distributed complexity tax. Two noteworthy alternatives are modular monoliths and service-oriented architectures.<\/p>\n\n<h3 class=\"wp-block-heading\">Modular Monoliths: Structure without Distribution<\/h3>\n\n<p>Unlike traditional monoliths that become tangled messes, <a href=\"https:\/\/www.geeksforgeeks.org\/system-design\/what-is-a-modular-monolith\/\" rel=\"nofollow noopener\" target=\"_blank\">modular monoliths<\/a> enforce strict internal boundaries through clear module APIs and disciplined separation. Each module exposes well-defined interfaces, enabling teams to work independently while deploying a single, coherent system.<\/p>\n\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=1238342821  data-opt-src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/11\/modular-monolith-architecture.png\"  decoding=\"async\" width=\"1137\" height=\"839\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" class=\"fade-in attachment-full size-full\" alt=\"modular monolith architecture\" title=\"- modular monolith architecture\" \/>\n    <\/div>\n\n<p>As Kent Beck explains in <a href=\"https:\/\/medium.com\/%40kentbeck_7670\/monolith-services-theory-practice-617e4546a879\" rel=\"nofollow noopener\" target=\"_blank\">\u201cMonolith -&gt; Services: Theory &amp; Practice\u201d<\/a>, modular monoliths manage coupling through organizational discipline rather than distributed networks. The key difference: modules still communicate via explicit contracts like microservices, but they use fast, reliable function calls instead of HTTP requests that are vulnerable to network latency and partial failures.<\/p>\n\n<p>Why does it work?<\/p>\n\n<ul class=\"wp-block-list\">\n<li><em>Simpler operations<\/em>: microservices-level organization with monolithic simplicity<\/li>\n<li><em>Stronger consistency<\/em>: full ACID transactions<\/li>\n<li><em>Easier debugging<\/em>: one traceable system, no hunting for bugs in the <a href=\"https:\/\/aws.amazon.com\/what-is\/elk-stack\/\" rel=\"nofollow noopener\" target=\"_blank\">ELK<\/a> haystack<\/li>\n<li><em>Better performance<\/em>: function calls beat network hops<\/li>\n<\/ul>\n<p>Here\u2019s some real-world proof: Shopify\u2019s 2.8 million-line codebase <a href=\"https:\/\/newsletter.systemdesign.one\/p\/modular-monolith#:~:text=Shopify%20Handled%2030TB%20per%20Minute\" rel=\"nofollow noopener\" target=\"_blank\">handles 30TB per minute<\/a> with separate teams owning distinct modules, yet everything deploys together. Facebook runs similarly. (And principal architect <a href=\"https:\/\/www.youtube.com\/watch?v=sLEuXDgfAS4&amp;t=3880s\" rel=\"nofollow noopener\" target=\"_blank\">Keith Adams jokes<\/a> that if you want to be talked <strong>out<\/strong> of microservices, he\u2019s your guy.)<\/p>\n\n<p>With recent developments in frameworks like <a href=\"https:\/\/spring.io\/projects\/spring-modulith\" rel=\"nofollow noopener\" target=\"_blank\">Spring Modulith<\/a>, <a href=\"https:\/\/makimo.com\/blog\/modular-monolith-in-django\/\" rel=\"nofollow noopener\" target=\"_blank\">Django<\/a>, <a href=\"https:\/\/dev.to\/abstractmusa\/modular-monolith-architecture-within-laravel-communication-between-different-modules-a5\" rel=\"nofollow noopener\" target=\"_blank\">Laravel<\/a>, and <a href=\"https:\/\/dev.to\/alex_aslam\/modular-monoliths-in-rails-taming-complexity-without-microservices-madness-30nj\" rel=\"nofollow noopener\" target=\"_blank\">Rails<\/a> (as seen at scale with Shopify), modular monoliths are poised to <a href=\"https:\/\/news.ycombinator.com\/item?id=41534179\" rel=\"nofollow noopener\" target=\"_blank\">gain wider traction<\/a> in the years ahead.<\/p>\n\n<h3 class=\"wp-block-heading\">Service-Oriented Architecture: The Middle Ground<\/h3>\n\n<p><a href=\"https:\/\/www.geeksforgeeks.org\/software-engineering\/service-oriented-architecture\/\" rel=\"nofollow noopener\" target=\"_blank\">Service-oriented architecture (SOA)<\/a> sits between monoliths and microservices, favoring larger, domain-driven services instead of dozens or hundreds of tiny ones. These services often communicate via an enterprise service bus (ESB), which reduces orchestration overhead while preserving separation of concerns.<\/p>\n\n<div class=\"wp-block-ponyo-image\">\n            <img data-opt-id=354294587  data-opt-src=\"https:\/\/www.docker.com\/app\/uploads\/2025\/11\/service-oriented-acrhitecture.png\"  decoding=\"async\" width=\"1137\" height=\"839\" src=\"data:image/svg+xml,%3Csvg%20viewBox%3D%220%200%20100%%20100%%22%20width%3D%22100%%22%20height%3D%22100%%22%20xmlns%3D%22http%3A%2F%2Fwww.w3.org%2F2000%2Fsvg%22%3E%3Crect%20width%3D%22100%%22%20height%3D%22100%%22%20fill%3D%22transparent%22%2F%3E%3C%2Fsvg%3E\" class=\"fade-in attachment-full size-full\" alt=\"service oriented acrhitecture\" title=\"- service oriented acrhitecture\" \/>\n    <\/div>\n\n<p>Instead of splitting authentication, user preferences, and notifications into separate microservices, SOA might combine them into a single \u201cUser Service\u201d, simplifying coordination while preserving autonomy and targeted scaling. SOA provides enterprise-grade modularity without ultra-fine-grained distribution overhead.<\/p>\n\n<p>Here\u2019s why it works:<\/p>\n\n<ul class=\"wp-block-list\">\n<li><em>Right-sized boundaries<\/em>: fewer, domain-aligned services instead of sprawl<\/li>\n<li><em>Targeted scalability<\/em>: scale services tied to real business domains<\/li>\n<li><em>Pragmatic complexity<\/em>: avoids ultra-fine-grained overhead while retaining modular reasoning<\/li>\n<\/ul>\n<p>SOA has also been proven to work at scale. Norwegian Air Shuttle, Europe\u2019s 9th-largest airline, <a href=\"https:\/\/www.researchgate.net\/publication\/254028496_A_Successful_Implementation_of_Service_Oriented_Architecture\" rel=\"nofollow noopener\" target=\"_blank\">used SOA<\/a> to boost agility across complex flight operations. Credit Suisse\u2019s <a href=\"https:\/\/www.infoq.com\/articles\/service-oriented-architecture-at-credit-suisse\/\" rel=\"nofollow noopener\" target=\"_blank\">SOA rollout<\/a> powered millions of service calls per day back in the early 2000s.<\/p>\n\n<h3 class=\"wp-block-heading\">Choosing Wisely: Fit over Hype<\/h3>\n\n<p>The problem you\u2019re solving should justify your architecture.<\/p>\n\n<p>I often use this analogy in consulting: <strong>You don\u2019t need a sword to cut a lemon\u2014a knife suffices. <\/strong>And as timeless wisdom reminds us, simplicity is the ultimate sophistication.\u00a0<\/p>\n\n<p>In all likelihood, <a href=\"https:\/\/blog.bradfieldcs.com\/you-are-not-google-84912cf44afb\" rel=\"nofollow noopener\" target=\"_blank\">you\u2019re not Google<\/a> (you don\u2019t need Google-level fault tolerance), or Amazon (you don\u2019t need massive write availability), or LinkedIn (you don\u2019t handle billions of events a day). Most applications don\u2019t operate at that scale, demanding fundamentally different solutions than ultra-distributed architectures.<\/p>\n\n<p>For most systems, well-structured modular monoliths (for most common applications, including startups) or SOA (enterprises) deliver comparable scalability and resilience as microservices, without the distributed complexity tax. Alternatively, you may also consider well-sized services (<a href=\"https:\/\/x.com\/copyconstruct\/status\/1247131341851783168\" rel=\"nofollow\" target=\"_blank\"><strong>macroservices<\/strong><\/a>, or what Gartner proposed as <a href=\"https:\/\/thenewstack.io\/miniservices-a-realistic-alternative-to-microservices\/#:~:text=%5BA%20miniservice%20is%5D%20like%20a%20group%20of%20microservices\" rel=\"nofollow noopener\" target=\"_blank\"><strong>miniservices<\/strong><\/a>) instead of tons of microservices.<\/p>\n\n<p>It\u2019s worth asking:<\/p>\n\n<p>If simpler architectures can deliver comparable scalability, why are you choosing the complexity of microservices?<\/p>\n\n<h2 class=\"wp-block-heading\">Docker: Built for Any Architecture<\/h2>\n\n<p><a href=\"https:\/\/www.docker.com\/\">Docker<\/a> isn\u2019t just for microservices\u2014it <a href=\"https:\/\/www.docker.com\/blog\/are-containers-only-for-microservices-myth-debunked\/\">works great across all kinds of architectures<\/a> like monoliths, SOA, APIs, and event-driven systems. The real benefit is that Docker gives you consistent performance, easier deployment, and flexibility to scale up your apps no matter what architectural approach you\u2019re using.<\/p>\n\n<p>Docker packages applications cleanly, keeps environments consistent from laptop to production, simplifies dependency management, and isolates applications from the host system. A Dockerized monolith offers all these benefits, minus the orchestration overhead of microservices.\u00a0<\/p>\n\n<p><a href=\"https:\/\/learn.microsoft.com\/en-us\/dotnet\/architecture\/microservices\/architect-microservice-container-applications\/containerize-monolithic-applications\" rel=\"nofollow noopener\" target=\"_blank\">Microsoft\u2019s guidance on containerizing monoliths<\/a> clarifies that scaling containers is \u201cfar faster and easier than deploying additional VMs\u201d, whether you run one service or fifty. <a href=\"https:\/\/web.archive.org\/web\/20250319065616\/https:\/\/segment.com\/blog\/monoliths-microservices-and-containers\/\" rel=\"nofollow noopener\" target=\"_blank\">Twilio Segment observed<\/a> that containerized monoliths can \u201chorizontally scale your environment easily by spinning up more containers and shutting them down when demand subsides.\u201d For many applications, scaling the whole app is exactly what\u2019s needed.<\/p>\n\n<p>As for DevOps, a monolith in Docker is lighter to operate than a full-blown microservices setup. <a href=\"https:\/\/docs.docker.com\/engine\/logging\/configure\/\" rel=\"nofollow noopener\" target=\"_blank\">Logging aggregation<\/a> becomes simpler when you\u2019re collecting from identical containers rather than disparate services with different formats. Monitoring and debugging remain centralized, and troubleshooting avoids tracing requests across service boundaries.<\/p>\n\n<p>So, it\u2019s definitely worth considering:<\/p>\n\n<p>Even without the complexity of microservices, Docker gives you the same advantages \u2014 clean deployments, easy scaling, and consistent environments. So why not keep it?<\/p>\n\n<h2 class=\"wp-block-heading\">Wrapping Up<\/h2>\n\n<p>A few years ago, my then-8-year-old wanted a bicycle. He\u2019d mostly ride around our apartment complex, maybe venture into the nearby lane. He didn\u2019t <strong>need<\/strong> 21 gears, but those shiny shifters had him smitten\u2014imagine riding faster by changing those gears! He absolutely <strong>wanted<\/strong> that mechanically complex beauty. (It\u2019s hard to argue with a starry-eyed kid\u2026 or a founder :P).<\/p>\n\n<p>Once he started riding the new bike, the gears slipped, the chain jammed, and the bicycle spent more time broken than on the road. Eventually, we had to dump it.\u00a0<\/p>\n\n<p>I wasn\u2019t able to convince him back then that a simpler bicycle could\u2019ve served him better, but maybe this article will convince a few grown-ups making architectural decisions.<\/p>\n\n<p>We techies love indulging in complex systems. (Check: were you already thinking, <strong>What\u2019s complex about bicycles with gears??<\/strong>) But the more moving parts you add, the more often they break. Complexity often creates more problems than it solves.<\/p>\n\n<p>The point I\u2019m making isn\u2019t to dump microservices entirely\u2014it\u2019s to pick an architecture that fits your actual needs, not what the cloud giant is pushing (while quietly rolling back their own <strong>commit<\/strong>). Most likely, modular monoliths or well-designed SOA will serve your needs better and make your team more productive.<\/p>\n\n<p>So here\u2019s the million-dollar question:\u00a0<\/p>\n\n<p>Will you design for cloud-native hype or for your own business requirements?<\/p>\n\n<p>Do you really need microservices?<\/p>","protected":false},"excerpt":{"rendered":"<p>Do you know who managed to cut costs by a staggering 90% by abandoning microservices for a monolith in May [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":2945,"comment_status":"","ping_status":"","sticky":false,"template":"","format":"standard","meta":{"site-sidebar-layout":"default","site-content-layout":"","ast-site-content-layout":"default","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"","ast-breadcrumbs-content":"","ast-featured-img":"","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"default","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"categories":[4],"tags":[],"class_list":["post-2944","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-docker"],"_links":{"self":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/2944","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/comments?post=2944"}],"version-history":[{"count":0,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/posts\/2944\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media\/2945"}],"wp:attachment":[{"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/media?parent=2944"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/categories?post=2944"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/rssfeedtelegrambot.bnaya.co.il\/index.php\/wp-json\/wp\/v2\/tags?post=2944"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}