Monoliths and microservices

Why splitting an application into smaller parts can lead to better software

The software world has traditionally been built around monolithic applications. These are systems built as single, often large, units. Unfortunately any changes within even a small part of these systems require the whole monolith itself to be changed and redeployed. As James Lewis, principal consultant at ThoughtWorks, explains, these sorts of applications "don't really talk to one another very easily, are very difficult to integrate with and are really, really hard to maintain." Over time the coupling of elements within these systems can make them difficult to maintain and scale.

“It’s now a lot more feasible to take what was a monolithic application and if we choose to, we can just split it up into 6 parts or 60 or 600” – Rachel Evans, BBC Future Media

With the advent of service-oriented achitecture (SOA) and the proliferation of cloud technology, microservices are becoming increasingly popular. Microservice architecture involves building applications as sets of independent services or components. According to Rachel Evans, principal software engineer, BBC Future Media, in this way "each component can be deployed separately and each one can be individually considered in how its reliability and scalability and reaction to failure can be dealt with."

As an example, Evans describes her team's endeavours to build the BBC's transcoding system, Video Factory so that it was formed of tiny, separately deployable services, and much more strongly message-oriented than its predecessor. Russ Miles, chief scientist, Simplicity Itself, celebrates the fact that such microservices can, in theory, be re-implemented in a new language or platform very quickly: "if you think about it that's incredibly empowering. We could vary the implementation technology because we can do it in a lunch time."