Monoliths Are Making a Comeback—Here's Why

Eduardo AndradeEduardo Andrade
4 min read

For years, tech teams chased microservices as the "right" architecture, lured by promises of unlimited scale and team autonomy. But today, reality has set in—many companies are quietly returning to monoliths, and for good reason.

From Java-heavy enterprises to fast-moving startups, engineering leaders are realizing that premature distribution often hurts more than helps. Let's explore why—and when—monoliths are regaining favor.


1. The Microservices Hangover: Costs Outweigh Benefits for Most

The Business Reality

  • 60-70% of microservices adopters report higher-than-expected operational costs (recent industry surveys)

  • Small to mid-sized teams (5-20 engineers) spend 30-50% of their time on cross-service coordination rather than features

  • Cloud bills explode with hundreds of services (each needing compute, monitoring, and networking)

The Technical Trade-offs

While microservices solve true scaling bottlenecks, they introduce:

  • Network latency (even with gRPC, ~2-5ms per call)

  • Debugging nightmares (distributed tracing is still hard)

  • Data consistency headaches (sagas, eventual consistency)

// What used to be a simple Java method call...
public Order processOrder(OrderRequest request) {
    inventoryService.reserveItems(request);  // Network hop
    paymentService.charge(request);         // Another network hop
    // Now needs complex orchestration
}

Key insight: If your entire system fits in a single JVM, why distribute it prematurely?


2. Why Monoliths Are Winning Today

The Speed Advantage

  • Faster iterations: Single codebase = no cross-service coordination

  • Simpler testing: No need for contract testing or mock services

  • Easier hiring: Junior devs contribute faster without distributed systems expertise

The Cost Savings

Cost FactorMonolith (Java/Spring)Microservices (Java + Kubernetes)
Cloud Compute$3K/month$15K/month (+5x)
DevOps Effort1 engineer3+ engineers
Mean Time to Repair30 minutes2+ hours

Case Study: A 50-engineer fintech startup achieved massive savings by consolidating microservices into a modular Spring Boot monolith, mirroring the experience shared in Segment's Goodbye Microservices post. While their exact savings weren't disclosed, they reported:

  • 3-6x faster feature development

  • 90% reduction in deployment complexity

  • Significant infrastructure cost reductions

Similar success stories:

The Scale Myth Debunked

  • Monoliths can handle 100K+ RPM with modern JVMs (GraalVM, latest Java LTS)

  • Vertical scaling is cheaper than ever (cloud instances with 256GB+ RAM)

  • True scaling bottlenecks are rare—most apps never outgrow a monolith


3. The New Best Practice: "Majestic Monoliths"

What's Changed Recently?

  1. Better modularity (Java modules, Spring Modulith)

  2. Smarter decomposition (extract only proven bottlenecks)

  3. Hybrid approaches (monolith + a few critical services)

How to Structure a Modern Monolith

com.yourcompany
├── order (module)
├── payment (module)
├── inventory (module)
└── shared (minimal!)

Key principles:

  • Enforce module boundaries (Java 9+ modules, ArchUnit)

  • Use domain events (Kafka, not HTTP calls) for future extraction

  • Start monolithic, then peel off only what needs to scale independently


4. When Microservices Still Make Sense

The 20% Where Distribution Wins

True scaling needs (e.g., payment processing at Stripe volumes)

Regulatory isolation (PCI-compliant services)

Polyglot requirements (Python for ML, Rust for high-throughput)

Anti-patterns to avoid:

❌ Splitting because "microservices are modern"

❌ Giving each team their own service (coordination hell)

❌ Premature optimization (most apps never hit these scales)


5. The Modern Decision Framework

Choose Monolith If:

  • Your team is < 50 engineers

  • Your QPS is < 50K requests/minute

  • You value speed over theoretical scale

Choose Microservices If:

  • You're at hyperscale (or need to be)

  • You have clear domain boundaries (Amazon's "two-pizza rule")

  • You measured a true bottleneck


The Bottom Line

The industry is maturing. Today, smart teams choose monoliths first, then distribute only what's proven to need it.

Your move:

  1. Audit your microservices costs (engineer hours + cloud spend)

  2. Consider a modular monolith (Spring Modulith, Java modules)

  3. Extract services only when metrics demand it

Agree? Disagree? Share your war stories below.

0
Subscribe to my newsletter

Read articles from Eduardo Andrade directly inside your inbox. Subscribe to the newsletter, and don't miss out.

Written by

Eduardo Andrade
Eduardo Andrade

🚀 Java Developer with 18 Years of Passionate Expertise 🌐 Hello, fellow tech enthusiasts! 👋 I'm Eduardo, a seasoned Java developer with a rich tapestry of 18 years in the realm of software development and architecture. 🖥️ Crafting Code, Weaving Architectures: My journey involves seamlessly blending development and architectural intricacies. From coding to crafting robust architectures, I've been navigating the ever-evolving tech landscape. 📚 Eternal Learner at Heart: A perpetual student, I find sheer joy in unraveling new technologies. The thrill of learning fuels my passion for staying at the forefront of industry trends. 💡 Current Exploration Zones: While Java remains a steadfast companion, my current interests gravitate toward the realms of Go programming, cloud computing, microservices, and APIs. Exploring the possibilities of these cutting-edge technologies keeps the flames of curiosity burning bright.