Facilitating the Spread of Knowledge and Innovation in Professional Software Development

Write for InfoQ


Choose your language

InfoQ Homepage News Microservices vs Monolithic Applications

Microservices vs Monolithic Applications

This item in japanese

Using microservices is one way of breaking up a monolithic application to gain increased decoupling, separation of concerns and fast deployment but it’s not the only or even the best way, Todd Hoff states comparing the two architectural approaches.

Todd refers to a twitter debate earlier this year including Adrian Cockcroft, Sam Newman and John Allspaw (Etsy) comparing benefits and drawbacks of microservices and monolithic applications. Adrian started the debate by claiming that Etsy’s presentation at QCon London made it clear to him why monolithic applications are a dead end and that microservices should be used instead to achieve continuous scalable deployments. John claimed that microservices with more options also add more constraints and that a few well-understood tools and patterns bring advantages.

Todd describes Etsy as a successful company where about 150 engineers deploy a single monolithic application more than 60 times a day, and is in his mind a reference for how to build a great site doing things right, using e.g. continuous integration, push button deployment, good monitoring and basically always deploying from the main branch, even though monolithic applications by many are considered an anti-pattern.

One solution to the alleged monolithic application problem is to break it up into microservices, some goals being loose coupling and independent deployment, but Todd questions that microservices is the only or even the best way to achieve these goals and points to Etsy’s way of releasing small changes many times a day as an example of alternatives.

Arguing in favour of the monolithic approach Todd emphasizes that they have always worked. As within a monolith, complexity can also be found in services. He compares libraries with services claiming that as long as the interface is stable they can both be handled as separate products with their own lifecycle. If the interface changes a new version is created irrespective of using a library or a service. Todd believes that a monolithic code base can work well when based on proper software engineering.

Rate this Article