{"id":26578,"date":"2026-05-19T12:00:00","date_gmt":"2026-05-19T10:00:00","guid":{"rendered":"https:\/\/immune.institute\/?p=26578"},"modified":"2026-05-14T12:38:56","modified_gmt":"2026-05-14T10:38:56","slug":"microservicios-en-produccion-ventajas-reales-y-problemas-habituales","status":"publish","type":"post","link":"https:\/\/immune.institute\/en\/blog\/microservicios-en-produccion-ventajas-reales-y-problemas-habituales\/","title":{"rendered":"Microservices in production: real advantages and common problems"},"content":{"rendered":"<h2 class=\"wp-block-heading\"><strong>From Highland Park to the Toyota network: two production philosophies<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">In 1913, Henry Ford opened the first moving assembly line in history at Highland Park, Michigan. His logic was radical: bring everything under the same roof. At the River Rouge plant in Dearborn, Ford went even further: <a href=\"https:\/\/www.facebook.com\/groups\/ithoughtitwasanormalpicture\/posts\/1371004714795550\/\" target=\"_blank\" rel=\"noopener\">iron ore entered one end of the complex and the completed Ford T came out the other<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Foundry, machining, upholstery, glass, tyres; everything was manufactured in-house. Rubber plantations and metal mines belonged to the same company. A self-sufficient system, enormously efficient for producing a single model on a massive scale, but incapable of adapting without stopping the entire machinery.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When the market began to demand variety and speed, Ford's strength became its biggest limitation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To overcome this problem, another automotive pioneer, Kiichiro Toyoda, founder of Toyota, developed a different philosophy in the 1930s: to create a network of specialised suppliers, each responsible for precisely manufacturing a specific part \u2013 shock absorbers, brake systems, electronic modules \u2013 delivering it just as the assembly line required it: the paradigm <em><a href=\"https:\/\/blog.toyota-forklifts.es\/origenes-just-in-time\" data-type=\"link\" data-id=\"https:\/\/blog.toyota-forklifts.es\/origenes-just-in-time\" target=\"_blank\" rel=\"noopener\">Just-in-Time (JIT)<\/a><\/em>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In the early 1950s, Taiichi Ohno managed to put it into practice. The final assembler did not accumulate inventory nor master every process. Their role changed to coordinating flows, defining quality contracts and integrating specialised parts at the exact moment. If a supplier improves their process, that improvement benefits the whole without affecting others.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Monolithic software architecture is like the River Rouge plant: all the code in a single, compact, self-sufficient system, which works well as long as the product is stable and the team is small.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Microservices architecture is the Toyota network under JIT: independent and specialised services \u2013 authentication, payments, catalogue, notifications \u2013 that communicate using clear standards and which an integrator orchestrates to build the final product.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Each part can evolve, scale, or be replaced without stopping the entire chain. But as with Toyota, coordination between suppliers is as critical as the quality of each individual part.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The microservices paradigm for software development<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Before the rise of the internet and cloud services, applications were primarily monolithic. They concentrated complexity into a single unit over which there was absolute control. They were extensive programs, with many instructions, but where each line of code could be modified directly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Instead, a microservices architecture reduces complexity within the code and distributes it across services, networks, queues, configurations, and cross-dependencies.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But it's one thing to have several services running in a test environment, and quite another to operate them with real traffic, external integrations, frequent deployments, and service level agreements.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Every call to a service \u2013 for example, validating a credit card or checking a currency \u2013 introduces a dependency. And every error can propagate if the architecture is not correctly designed.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let's look at the advantages and common problems of working with microservices in production.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Real advantages of a microservices architecture<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Selective scaling<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Not all modules in an application receive the same load.<br>On an e-commerce platform, the catalogue can support thousands of queries per minute while the billing module maintains stable traffic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With microservices, a company can scale only the service that needs more resources, without over-provisioning the rest of the system.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">That's exactly what happens at Toyota when they bolster a specific supplier in the face of a demand surge.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Independent deployment and team autonomy<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When services are well decoupled, each team can update a specific part of the system without coordinating a massive release of the entire application.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This reduces the size of each change and makes it easier to spot errors before they reach production.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the boundaries between services align with clear business domains, teams gain real autonomy:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>a team manages payments,<\/li>\n\n\n\n<li>another identity,<\/li>\n\n\n\n<li>Another search.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This distribution improves specialisation and avoids reliance on a single, enormous codebase.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Gradual technological evolution<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">In large systems, replacing a complete technology is usually expensive and risky.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With microservices, an organisation can rewrite or replace a specific piece without modifying the entire platform at once.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This allows for the gradual modernisation of the architecture, just as Toyota can change a specific supplier without redesigning the entire assembly line.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Common microservice problems<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">Operational complexity and distributed latency<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When a process goes through several services, each request adds network time, serialisation, and potential retries.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If the purchase flow depends on five services and one responds slower than expected, the degradation affects the whole.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In production and with real volume, that sum really does matter.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It's the equivalent of a JIT supplier delaying a delivery: the whole chain grinds to a halt.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Data consistency and observability<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">On a monolith, many operations are resolved within a single transaction.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In microservices, data is distributed, and maintaining consistency requires events, queues, or eventual consistency patterns.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">From a business perspective, it's not always intuitive to accept that an order can be registered before the inventory or invoice reflect the change synchronously.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Furthermore, observability becomes much more demanding.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If a user reports an error at checkout, you need to follow the full trace between:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>API Gateway<\/li>\n\n\n\n<li>Trolley<\/li>\n\n\n\n<li>payments<\/li>\n\n\n\n<li>inventory<\/li>\n\n\n\n<li>notifications<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Without distributed traceability and consistent metrics, detecting the real cause of an incident can take longer than anticipated.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Can you go into more detail on this type of distributed monitoring in the official documentation of:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/opentelemetry.io\/\" target=\"_blank\" rel=\"noopener\">OpenTelemetry<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/prometheus.io\/\" target=\"_blank\" rel=\"noopener\">Prometheus<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/grafana.com\/\" target=\"_blank\" rel=\"noopener\">Grafana<\/a><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Distributed testing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Unit tests remain useful, but they miss covering a significant portion of the risk.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In distributed systems, we need:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>integrations testing,<\/li>\n\n\n\n<li>contract verification between services,<\/li>\n\n\n\n<li>Compatibility version validation.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">If that discipline doesn't exist, errors appear when the change has already been deployed to production, with the associated cost and impact.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>When microservices add value (and when they don\u2019t)<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Microservices architecture makes sense in organisations with:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>several clear business domains,<\/li>\n\n\n\n<li>relatively autonomous teams,<\/li>\n\n\n\n<li>distinct scaling needs,<\/li>\n\n\n\n<li>and a mature technical foundation.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">For example, an identity verification service may require greater stability and control, whilst the recommendation engine evolves on a weekly basis.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Separating them prevents blocking the entire platform due to decisions affecting only a portion.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The problem arises when the model is adopted for fashion or a technological image.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">An early-stage startup, with an unstable product and a small team, will usually get more value from a well-designed modular monolith than from twenty poorly delimited services.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Splitting too early multiplies integrations, accelerates operational complexity and consumes infrastructure effort when it should still be invested in product validation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nor did Toyota build its JIT network in the first year: it developed it over decades, once it had a clear idea of which parts warranted specialisation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">It also fails when services do not represent real business domains, but rather arbitrary technical layers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Separating \u201cfrontend service\u201d, \u201cbackend service\u201d and \u201cdatabase service\u201d and calling them microservices does not solve the design problem: it merely shifts the complexity to the infrastructure.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>What is needed for microservices to truly work<\/strong><\/h2>\n\n\n\n<h3 class=\"wp-block-heading\">1. Well-defined limits<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A useful microservice is designed around a clear business responsibility, not a technical convenience.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If several services share too many rules or tables, they will end up being covertly coupled.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">2. Robust automation<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Reliable pipelines, continuous deployment, reproducible environments and consistent rollback and versioning mechanisms are essential.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Without that foundation, every new service increases operational risk.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">3. Shared standards<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The organisation needs common criteria for:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>observability,<\/li>\n\n\n\n<li>security,<\/li>\n\n\n\n<li>interfaces,<\/li>\n\n\n\n<li>metrics,<\/li>\n\n\n\n<li>and error handling.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">When each team makes all its own decisions, the platform becomes inconsistent and costly to maintain.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">4. Operational culture<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Developing a service doesn\u2019t end when you perform a merge.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">You must:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>measure behaviour,<\/li>\n\n\n\n<li>review incidents,<\/li>\n\n\n\n<li>document decisions,<\/li>\n\n\n\n<li>and understand the relationship between code, infrastructure, and business.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>The correct decision isn't technical; it's strategic<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The useful question isn't whether microservices are better than a monolithic architecture in absolute terms.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The real question is whether the organisation meets the necessary requirements to sustain them with guarantees.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A poorly governed microservices architecture can lead to <strong><a href=\"https:\/\/immune.institute\/en\/blog\/tren-aviso-22-horas-antes-deud-tecnica\/\" data-type=\"link\" data-id=\"https:\/\/immune.institute\/blog\/tren-aviso-22-horas-antes-deud-tecnica\/\">technical debt very quickly<\/a>.<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A well-designed monolithic architecture can sustain a business for years, just as the Dearborn plant dominated the automotive market for an entire era.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The difference between the two models isn't about which is more modern, but about which better resolves the organisation's actual problem at the moment it finds itself in.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>","protected":false},"excerpt":{"rendered":"<p>Discover the advantages, challenges, and real-world requirements of a microservices architecture in production. Scalability, DevOps, observability, and operational complexity.<\/p>","protected":false},"author":20,"featured_media":26581,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"ai_generated_summary":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-26578","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog"],"acf":[],"_links":{"self":[{"href":"https:\/\/immune.institute\/en\/wp-json\/wp\/v2\/posts\/26578","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/immune.institute\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/immune.institute\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/immune.institute\/en\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/immune.institute\/en\/wp-json\/wp\/v2\/comments?post=26578"}],"version-history":[{"count":0,"href":"https:\/\/immune.institute\/en\/wp-json\/wp\/v2\/posts\/26578\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/immune.institute\/en\/wp-json\/wp\/v2\/media\/26581"}],"wp:attachment":[{"href":"https:\/\/immune.institute\/en\/wp-json\/wp\/v2\/media?parent=26578"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/immune.institute\/en\/wp-json\/wp\/v2\/categories?post=26578"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/immune.institute\/en\/wp-json\/wp\/v2\/tags?post=26578"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}