Step-by-Step: How to Identify Over-Scoped Microservices

1. Map Your Current Microservices

Create a visual or list-based map of:

  • All microservices

  • Their responsibilities

  • Their data ownership

  • Their API contracts

  • Inter-service communications (REST, events, etc.)

This will help you see overlaps and redundancies.


2. Spot the Smells (Signs of Too Many Microservices)

Look for services that:

  • Only wrap a database table (CRUD-only services)

  • Are tightly coupled to others (e.g. always deployed together)

  • Communicate too frequently (chatty services)

  • Have no real domain meaning (e.g., NotificationDbService)

  • Are owned by the same team and change together

These are candidates for consolidation.


3. Group by Business Capability

Re-cluster services by business capabilities rather than technical responsibilities.

Example:

  • UserProfileService, UserSettingsService, and UserNotificationPreferencesService might be better off as one UserAccountService.


4. Review Service Interactions

If two services:

  • Call each other frequently

  • Share data models

  • Are part of the same user flow (e.g. CartService + CartPricingService)

They probably shouldn't be separate unless there's a good scaling or ownership reason.


5. Review Teams & Deployment

Ask:

  • Are multiple services always deployed together?

  • Are they maintained by the same team?

  • Do they require coordination on every change?

If yes, consider merging them.


6. Check for DDD Violations

If your services don’t align with business boundaries or bounded contexts, you're likely over-segmented.


🧩 What to Merge vs What to Keep

Criteria
Merge
Keep Separate

Always deployed together

Same bounded context

High communication

Distinct business logic

Different scaling requirements

Owned by different teams


🔄 Example

Let’s say you have:

  • EmailService

  • SMSService

  • PushNotificationService

You could consolidate them into a single NotificationService with strategy pattern or plugins to handle different channels.


🔧 Tooling Tips

  • Use tools like Kiali, Zipkin, or Jaeger if you’re on a service mesh (Istio) to visualize service traffic and dependencies.

  • For static analysis: build service dependency graphs based on your codebase or OpenAPI specs.

Last updated