Enterprise Architecture

Your Developer Wants Microservices. Here's Why That's Probably Wrong.

The microservices sales pitch sounds great but often destroys productivity for growing businesses. Learn when monoliths are actually the right answer, what problems microservices solve (and create), and how to evaluate the pitch from your technical team.

January 6, 2025
14 min read
By Thalamus AI

Your lead developer comes to you excited: "We should rebuild our application as microservices. It'll be more scalable, more flexible, and align with modern best practices."

It sounds great. Scalability, flexibility, modern architecture—who wouldn't want that?

Here's what they're not telling you (often because they don't realize it themselves):

Microservices will probably:

  • Double your infrastructure costs
  • Slow down feature development by 40-60%
  • Require 2-3x the developer time for the same features
  • Introduce new categories of failures you don't currently have
  • Need different skillsets your team might not have

And for most businesses under 100 employees: You'll get minimal benefit while paying all those costs.

Let me explain what microservices actually are, when they make sense, and how to evaluate whether your developer's enthusiasm is justified or just resume-building.

What Are Microservices, Really?

Monolithic architecture: Your entire application is one codebase, deployed as one unit. User interface, business logic, database access—all together.

Microservices architecture: Your application is split into many small services, each handling one specific function, deployed independently.

The Monolith

Your Application (one deployment)
├── User Management
├── Order Processing
├── Inventory
├── Payments
├── Reporting
└── API Layer

Characteristics:

  • All code in one repository
  • One deployment
  • One database (usually)
  • Shared memory and state
  • Direct function calls between components

Example: Traditional web application. When you deploy, you deploy the whole thing.

The Microservices Approach

Service 1: User Service (separate deployment)
Service 2: Order Service (separate deployment)
Service 3: Inventory Service (separate deployment)
Service 4: Payment Service (separate deployment)
Service 5: Reporting Service (separate deployment)
Service 6: API Gateway (separate deployment)

Characteristics:

  • Each service has its own codebase (often separate repository)
  • Each service deploys independently
  • Each service has its own database
  • Services communicate over network (HTTP, message queues)
  • No shared memory

Example: Each function is a separate application that talks to the others over the network.

The Microservices Sales Pitch

Your developer will tell you about the benefits:

Benefit 1: "Independent Deployment"

The pitch: "We can deploy changes to one service without touching the others. Faster releases, less risk."

The reality:

In monolith:

  • Change order processing code
  • Run tests
  • Deploy entire application
  • Deployment time: 5 minutes

In microservices:

  • Change order processing code
  • Update order service
  • Order service talks to inventory service (might need to update its contract)
  • Update inventory service contract
  • Both services talk to payment service (might need coordination)
  • Deploy order service
  • Monitor for integration issues
  • Deployment time: 20 minutes + coordination overhead

You saved zero time and added complexity.

When this actually helps: You have dozens of developers, multiple teams, and deployments happening many times per day. Then independent deployment matters.

For 40-person company with 3 developers: This "benefit" is actually a cost.

Benefit 2: "Better Scalability"

The pitch: "We can scale different parts of the system independently. If orders spike, we scale just the order service, not everything."

The reality:

Question 1: Is your system actually constrained by compute resources?

Most applications are constrained by:

  • Database performance (microservices don't fix this)
  • Third-party API limits (microservices don't fix this)
  • Business logic efficiency (microservices don't fix this)

If you're not CPU-bound or memory-bound, independent scaling buys you nothing.

Question 2: If you are constrained by compute, is it really uneven?

Scenario where microservices help:

  • Order processing needs 10 servers
  • Reporting needs 1 server
  • User management needs 2 servers

More common scenario:

  • Everything needs roughly same resources
  • Peaks happen across all components simultaneously
  • You're scaling the whole monolith anyway

For most businesses: You're not Netflix. Your traffic patterns don't justify this complexity.

Benefit 3: "Technology Flexibility"

The pitch: "Different services can use different technology stacks. Use the best tool for each job."

The reality:

What you gain:

  • Order service in Go (fast)
  • Reporting service in Python (great for data)
  • Payment service in Java (enterprise libraries)

What you lose:

  • Developers must know multiple languages
  • Different deployment processes for each service
  • Different debugging tools
  • Different monitoring approaches
  • Cannot easily move developers between services
  • Harder to hire (need polyglot developers or specialized teams)

Hidden cost: Your 3-developer team just became siloed specialists who can't help each other.

Real world: Most successful microservices companies standardize on 1-2 languages to avoid this nightmare.

Benefit 4: "Fault Isolation"

The pitch: "If one service crashes, the others keep running. Better reliability."

The reality:

In monolith:

  • Bug in order processing → entire app crashes
  • Impact: Everything down
  • But: You have one thing to fix and restart

In microservices:

  • Bug in order service → order service crashes
  • User service still runs (yay!)
  • But orders can't be placed
  • Inventory service can't update (depends on order service)
  • Reporting is missing order data
  • Effectively: Application is still broken, but now it's partial outage that's harder to detect

Plus new failure modes:

  • Network failures between services
  • Service A can't reach Service B
  • Cascading failures (Service C depends on B depends on A)
  • Timeout and retry logic complexity
  • Distributed deadlocks

Paradox: Microservices add more ways to fail while supposedly improving reliability.

When this helps: You have sophisticated monitoring, distributed tracing, circuit breakers, and experienced SRE team. Not likely at 40 people.

The Real Costs Nobody Mentions

Cost #1: Development Velocity Crashes

In monolith:

  • Change order flow: Update order module, update UI, deploy
  • Time: 1 day development + 30 minutes deployment

In microservices:

  • Change order flow requires coordinating:
    • Order service (the change)
    • Inventory service (might need to update contract)
    • Payment service (might need to coordinate)
    • UI service (needs to handle new order service response)
    • API gateway (might need routing updates)
  • Each service needs its own testing
  • Deployment must be coordinated (what order?)
  • Integration testing is much harder
  • Time: 3 days development + 2 hours deployment + coordination overhead

Simple feature in monolith: Took 1 developer-day

Same feature in microservices: Took 3 developer-days

Your development velocity just dropped 67%.

Cost #2: Infrastructure Costs Multiply

Monolith infrastructure:

  • 2 application servers (for redundancy)
  • 1 database
  • 1 load balancer
  • Cost: $300/month

Microservices infrastructure:

  • 6 services × 2 instances each = 12 application servers
  • 6 databases (each service should have its own)
  • 1 API gateway
  • 1 service mesh (for service-to-service communication)
  • Message queue (for async communication)
  • Service discovery
  • Distributed tracing system
  • Cost: $1,200-2,000/month

Your infrastructure cost just quadrupled. Plus operational complexity.

Cost #3: Operational Complexity Explodes

Monolith operations:

  • Monitor one application
  • One deployment process
  • One set of logs
  • Debug by stepping through code
  • Ops overhead: 2-3 hours per week

Microservices operations:

  • Monitor six services
  • Six deployment processes (CI/CD pipelines for each)
  • Logs scattered across services
  • Debug by tracing requests across service boundaries
  • Need distributed tracing (Jaeger, Zipkin)
  • Need service mesh (Istio, Linkerd)
  • Need centralized logging (ELK stack, Splunk)
  • Need sophisticated monitoring (Prometheus, Grafana, Datadog)
  • Ops overhead: 20+ hours per week

This usually requires hiring DevOps/SRE person. $120K+ annually.

Cost #4: Testing Becomes Nightmare

Monolith testing:

  • Unit tests
  • Integration tests (test full stack)
  • End-to-end tests
  • Test suite runs in 5 minutes

Microservices testing:

  • Unit tests per service
  • Integration tests per service
  • Service-to-service contract testing
  • End-to-end tests (need all services running)
  • Have to mock service dependencies or run full environment
  • Test suite setup and run: 30+ minutes

Your CI/CD just got way slower and more complex.

Cost #5: Data Consistency Problems

Monolith with one database:

  • Update order
  • Update inventory
  • Both in same transaction
  • Either both succeed or both fail
  • Data is always consistent

Microservices with separate databases:

  • Order service updates its database
  • Inventory service updates its database
  • These are separate transactions
  • Order might succeed, inventory might fail
  • Data can be inconsistent

Now you need:

  • Saga pattern
  • Event sourcing
  • Compensating transactions
  • Eventual consistency
  • These are complex distributed systems patterns

Your developers are now building distributed database systems. Are they qualified?

When Microservices Actually Make Sense

Let's be clear: Microservices aren't always wrong. They solve real problems at scale.

Microservices make sense when:

Criterion 1: True Independent Teams

Scenario: You have 50+ developers working on the same system.

Problem: They can't all work in the same codebase without constant merge conflicts and coordination overhead.

Solution: Split into microservices so teams can work independently.

Note: This is an organizational solution to organizational problems, not a technical solution to technical problems.

Your company: Do you have 50+ developers on this system? No? Then this doesn't apply.

Criterion 2: Genuinely Different Scale Requirements

Scenario:

  • Your image processing service needs 20 servers during business hours
  • Your admin panel needs 1 server
  • Your API needs 5 servers
  • These actually scale differently (not just theoretically)

Without microservices: Waste money running 20 servers for everything

With microservices: Run 20 image servers, 1 admin server, 5 API servers

Savings justify complexity.

Your company: Do different parts of your system actually have 5-10x different resource needs? Test this before assuming.

Criterion 3: Need Different Deployment Frequencies

Scenario:

  • Customer-facing API changes 20 times per day
  • Admin panel changes once per week
  • Reporting system changes once per month

With monolith: Every tiny API change requires deploying the whole application (risky)

With microservices: Deploy API frequently, admin and reporting rarely

Your company: Are different parts really deploying at massively different frequencies? If everything ships weekly, you don't need this.

Criterion 4: Strong DevOps Culture and Tooling

Prerequisites for microservices success:

  • Mature CI/CD for each service
  • Sophisticated monitoring and alerting
  • Distributed tracing
  • Service mesh or strong service communication patterns
  • Infrastructure as code
  • Experienced SRE or DevOps team

Your company: Do you have these? If you're asking "what's a service mesh?" you're not ready.

Criterion 5: Specific Service Isolation Needs

Scenario: You have a PCI-compliant payment service that should be completely isolated from the rest of your system for security and compliance.

Solution: Microservices provide strong isolation boundary.

Your company: Do you have regulatory or security requirements demanding this level of isolation?

The Questions to Ask Your Developer

When your developer pitches microservices, ask:

Question 1: "What specific problem are we solving?"

Good answers:

  • "We have 40 developers who can't work efficiently in the monolith"
  • "Our image processing needs 10x the resources of everything else"
  • "We need PCI compliance isolation"

Bad answers:

  • "It's more modern"
  • "It's best practice"
  • "Everyone is doing microservices"
  • "It'll be more scalable" (without data showing you're constrained)
  • "I want to learn microservices"

Question 2: "What's the cost in development velocity?"

Good answer:

  • "Features will take 40% longer initially, but we'll recover that in 18 months when we have 30 developers"

Bad answer:

  • "It won't slow us down" (it will)
  • "It'll be faster in the long run" (without explaining how)

Question 3: "What's the infrastructure and ops cost increase?"

Good answer:

  • "Infrastructure cost will triple, we'll need DevOps engineer for $120K, but here's the ROI calculation..."

Bad answer:

  • "Not much more"
  • "Cloud scales easily"
  • Hasn't calculated this at all

Question 4: "What's our experience with distributed systems?"

Good answer:

  • "None, which is why we need to hire senior distributed systems engineer first"
  • "I've built microservices at previous companies and understand the tradeoffs"

Bad answer:

  • "We'll figure it out"
  • "It's documented online"

Question 5: "Can we start with a modular monolith instead?"

Good answer:

  • "Yes, we can restructure the monolith to be modular, get many of the same benefits, and split into microservices later if needed"

Bad answer:

  • "Monolith is legacy, microservices is modern"
  • Dismisses this option without consideration

The Better Alternative: Modular Monolith

Here's what you probably actually need:

A monolith that's well-organized internally.

Modular monolith characteristics:

  • One application
  • Clear module boundaries internally
  • Modules only talk through defined interfaces
  • Each module could theoretically become a microservice later
  • But you get simplicity of monolith today

Benefits:

  • Simple deployment (one thing)
  • Simple infrastructure (no network between modules)
  • Fast development (direct function calls)
  • Easy debugging (one codebase)
  • Consistent data (one database)
  • Can split into microservices later if you really need to

This gives you 80% of microservices benefits with 20% of the complexity.

Most companies should build modular monoliths, not microservices.

(See our detailed article: Modular Monoliths: The Middle Ground Nobody Talks About)

Real World Examples

Bad Microservices Decision: 35-Person SaaS Company

Situation: Growing from 12 to 35 people, 5 developers.

Developer pitch: "We should split the monolith into microservices before it gets too hard."

Decision: Approved. 6-month migration project.

Results after migration:

  • Feature velocity dropped 50%
  • Infrastructure costs increased from $800/month to $2,400/month
  • Developers spent 30% of time on deployment and ops issues
  • Two major outages due to service communication failures (never had outages before)
  • Ultimately re-merged some services back because they were too interdependent

Cost: 6 months of development time + ongoing velocity and infrastructure costs

Benefit: None realized. They were never constrained by monolith limitations.

Lesson: They fixed problems they didn't have and created problems they couldn't handle.

Good Microservices Decision: 200-Person E-commerce Company

Situation: Monolithic application, 80 developers working on it, deployment takes 2 hours, teams blocking each other constantly.

Analysis:

  • Core shopping experience (20 developers, deploys 5x daily)
  • Inventory management (15 developers, deploys weekly)
  • Recommendation engine (10 developers, deploys daily, compute-intensive)
  • Admin tools (5 developers, deploys monthly)

Decision: Split into 4 microservices along these boundaries.

Results:

  • Teams could work independently
  • Shopping experience deployed frequently without touching inventory
  • Recommendation engine scaled independently (needed 10x resources)
  • Development velocity improved (teams not blocking each other)
  • Infrastructure costs increased, but justified by organizational gains

Cost: 12-month migration, significant infrastructure increase

Benefit: 80 developers became productive, deployment frequency increased, true scale differences addressed.

Lesson: At sufficient scale, microservices solve real organizational and technical problems.

The Bottom Line

Your developer wants microservices because:

  • It's exciting technology
  • It looks good on resume
  • It's what they read about online
  • They genuinely believe it's best practice

But for most businesses under 100 employees:

  • You don't have the problems microservices solve
  • You'll pay all the costs without getting the benefits
  • You'll slow down development substantially
  • You'll increase operational burden

What you probably actually need:

  • Better-organized monolith (modular architecture)
  • Clear module boundaries
  • Good testing
  • Efficient deployment process

This gives you:

  • Fast development
  • Simple operations
  • Low infrastructure costs
  • Easy debugging
  • Option to split later if needed

Microservices are the right answer for Facebook, Netflix, Amazon, and companies with similar scale. They're probably the wrong answer for your 40-person business.

Don't let "modern architecture" enthusiasm convince you to solve problems you don't have.

When your developer wants microservices, ask the hard questions about costs, benefits, and whether you're solving real problems or just adopting trendy architecture.

Usually, the answer is: Build a better monolith first. Split into microservices only when you have concrete problems that microservices solve.

Your business will thank you for the development velocity, simplicity, and money you saved.

Related Products:

Related Articles

Enterprise Architecture

Where Should Your Customer Data Actually Live?

Is it in Salesforce? Your billing system? The custom app? All three? Learn about the concept of system of record for business owners who just want their data accessible and correct, with practical consolidation approaches.

Read More →

Ready to Build Something Better?

Let's talk about how Thalamus AI can help your business scale with enterprise capabilities at SMB pricing.

Get in Touch