When you think of microservices, you probably think of centralized shared services. But there’s another valid pattern that is rarely discussed: running the same microservice inside multiple platforms.
🧩 How It Usually Works
Most microservice designs follow the same model:
- Break systems into capabilities, teams, or functions
- Deploy one shared service for each capability
- Any platform that needs it calls that centralized service
That works well for many cases, but it’s not the only model.
🏗️ How We Got Here
Before microservices, many organizations used Service-Oriented Architecture (SOA).
Despite being labeled as antiquated, SOA and microservices are not that different. Both break down systems into capabilities that communicate with each other. The biggest difference is scope.
In SOA, a “Payments Service” might own:
- Message parsing
- Validation
- Balance checks
- Currency conversion
- Settlement logic
While other SOA services would own “Users” or “Accounting”. Today, that payment service would be considered an entire platform, with each of those capabilities implemented as microservices within that domain.
Microservices are often the same idea as SOA, just at a more granular level.
🎯 Why Centralization Became the Default
One reason microservices gained traction was the need to avoid duplication. Capabilities were often rebuilt across multiple systems. For example, Currency Conversion is needed in Payments, Accounting, and many other platforms.
Duplication is not just wasteful, it creates real problems: logic drift, coordination overhead, and inconsistent outcomes across systems. Packaging that capability as a standalone service solved real problems: build once, reuse everywhere.
⚠️ The Downside of Centralization
In cell-based architectures, platforms are usually designed to be self-contained and failure-isolated. That means a mission-critical platform depending on a centralized service shared by other platforms can become a design smell.
- Cross-cell dependencies
- Added latency
- Shared failure domains
- Complex failover scenarios
So teams, once again, solve these problems by rebuilding the same capability locally.
🔁 Another Option
Instead of rebuilding the capability each time, deploy the same microservice codebase inside multiple platforms. If both Payments and Accounting need a currency conversion service, deploy the same service within each platform.
It’s the same codebase and capability, but with local ownership and resilience. You get reuse without forced centralization.
🧪 Caveats from Experience
This pattern works when applied carefully.
1️⃣ Strong Ownership
A shared codebase still needs a clear owning team. Others can contribute, but someone must own quality, roadmap, and releases.
2️⃣ Pick the Right Capabilities
Not everything is a great fit. Something like currency conversion is well-scoped, relatively stateless, and doesn’t have unique business logic based on which platform is calling it. It’s a strong example.
But other services that have unique logic for each platform domain or require consistency across different platforms are less of a fit.
3️⃣ Operational Discipline
Using the same codebase doesn’t automatically solve all problems; you can still run into drift across platforms if each is running a different version. Changes in behavior still sometimes need coordination.
But with a single codebase, these issues are far easier to address.
💭 Final Thoughts
Microservices gave us reusable building blocks. Sometimes the best use of a microservice is not one centralized deployment. Sometimes it’s many local deployments of the same capability.
Just reuse the software while maintaining autonomy.