Worst Popular Software Idea

In your opinion, what is the worst idea that has gained widespread popularity in software?

26.0s $0.015 Tokens i/o: 23/1,520 Nov 21st

“Microservices by default.”

Not microservices themselves—the idea that they should be your starting architecture. That default has caused more pain than almost anything else in modern software.

Why it’s harmful when premature:

  • Complexity tax: You trade function calls for networks, retries, backoffs, timeouts, circuit breakers, schema versioning, and distributed tracing. Two orders of magnitude more failure modes.
  • Slower delivery: Every change crosses service boundaries, CI/CD pipelines multiply, staging becomes fragile, and coordination overhead explodes.
  • Worse reliability and performance: Chatty calls, fan‑out requests, distributed transactions, and eventual consistency all degrade P99s and increase incident volume.
  • Cost bloat: More infra, more observability, inter‑AZ egress, service meshes, and on‑call coverage.
  • Security and governance: Many more attack surfaces and policy points to get right.

Why it spread:

  • Cargo‑culting FAANG case studies and vendor marketing.
  • Confusing organizational scaling with system architecture needs.
  • Underestimating the operational maturity microservices demand.

When microservices make sense:

  • Multiple autonomous teams owning distinct domains with different release cadences and scaling profiles.
  • Strong platform/SRE, robust observability, and clear domain boundaries.
  • Real nonfunctional requirements: hard multi‑region, polyglot needs, strict isolation, or compute profiles that truly conflict.

Better default:

  • A modular monolith with strict internal boundaries, clear interfaces, and good tests.
  • Split only when a boundary repeatedly hurts delivery or scaling, and you have the platform maturity to support it.
  • Start with a few carefully chosen separations (e.g., user auth, billing, ML inference) for clear operational reasons.

If you’ve already gone too far:

  • Merge tiny services by domain, collapse chatty graphs, introduce a gateway/BFF, and enforce module boundaries inside the codebase.
  • Invest in tracing, SLOs, and ownership before further splits.

The big lesson: decouple modules first, processes later. Don’t distribute your system until your organization and operational tooling can handle the distribution.

LINK COPIED!