Why microservices (can) help

Microservices help your organization to the extend that they enable Flow.

Consider the case where you have a monolith, and all value streams pass through it:

big-monolith.png

That means every single change has the potential to wait on the availability of:

  • Folks experienced enough to review the changes
  • Availability of scarce automated test resources
  • Availability of a single deployment pipeline

In Dr. Eliyahu M. Goldratt’s triumphant book The Goal, which introduced his Theory of Constraints, the characters discover that in their manufacturing flow they had certain widgets that passing through their bottleneck but that they didn’t need them to. As part of step 3 of the Five Focusing Steps, subordinate & synchronize to the constraint, they realized these subprocesses were not synchronized to the constraint, and they removed them from that flow.

Microservices allow you to do the same with your code base. If every feature has to pass through the same project, then you get batching and queueing, giving each change a longer lead time. With a longer lead time, teams are encouraged to make changes larger, which begets even more waiting, reduction in quality, and higher risk. A vicious cycle if ever there were one.

You start to benefit from microservices when you start logically decoupling your different workflows:

actual-microservice.png

Now changes can proceed independent of everything else. Where you still have dependency, you find them in relatively stable places. Scott Bellware wrote the excellent Afference: The Silent Killer that dives into recognizing the difference between healthy and unhealthy coupling.

Note: This. Is. Hard. To. Do. It’s a bit like trying to separate the ingredients of a cake after they’ve been mixed together. You might end up needing some help with it.

You’ll realize this when you embrace The Key Pointâ„¢: a monolith is a data model that requires all data points to be in transactional consistency with one another. Through the murky “boundaries” in a typical monolithic project, every business operation becomes coupled to every other business operation. If you miss that point, your microservices effort will likely just result in physical decoupling while retaining all the logical coupling:

distributed-monolith.png

All you’ve added is the additional complexity of a distributed system.


Like this message? I send out a short email each day to help software development leaders build organizations the deliver value. Join us!


Get the book!

Ready to learn how to build an autonomous, event-sourced microservices-based system? Practical Microservices is the hands-on guidance you've been looking for.

Roll up your sleeves and get ready to build Video Tutorials, the next-gen web-based learning platform. You'll build it as a collection of loosely-coupled autonomous services, developing a message store interface along the way.

When you're done, you'll be ready to contribute to microservices-based projects.

In ebook or in print.