Skip to content

Are microservices right for you?

  • Consider whether microservices are the right fit for your project before adopting them.
  • The stage of your application’s development is crucial; microservices work best when clear boundaries and separations are already established.
  • For new applications with no code written, predicting future boundaries is challenging, making microservices potentially problematic early on despite strategies like event storming and domain-driven design.
  • Redefining system boundaries after creating many microservices is harder than restructuring modules in a monolithic application.
  • Recommendation: For brand-new products, starting with a monolith is usually easier and more maintainable.
  • Team size is a major factor; benefits of microservices are less significant for small teams.
  • Personal story: Attempting microservices as a one-person team led to unnecessary complexity and late-night troubleshooting, despite correctly identified service boundaries.
  • Small teams are more prone to creating a distributed monolith, where complexity outweighs benefits.
  • As team and product scale increase, breaking into microservices can improve performance and development velocity.
  • Transition to microservices is recommended when scaling is required—either due to user growth or increasing team size.
  • Microservices enable independent scaling of high-traffic components and division of work across multiple teams.
  • Organizational structure often dictates software architecture; expanding teams benefit from service separation (e.g., two-pizza team principle).
  • Prematurely building microservices with a single team likely results in complexity without real advantages.
  • Adopt microservices deliberately; use Occam’s razor to choose simplicity when deciding on architecture.
  • Up to a certain scale, monolithic applications are almost always simpler.
  • Microservices architecture should not be conflated with specific technologies like Kubernetes—microservices can be implemented with various tools (e.g., AWS Lambda, event-driven Kubernetes).
  • Make architecture decisions independently from compute/orchestration solutions.
  • Carefully evaluate whether microservices are needed before adopting them.
  • For new products, start development with a monolith and consider microservices only as the product and team grow.
  • Avoid equating microservices implementation with a specific technology stack; focus on the architecture first.