Microservices are a software development technique that arranges an application as a collection of loosely coupled services.
Around the world, organisations have been building information systems to perform a variety of functions and tasks, as they compete with one another to leverage the 'latest and greatest' technologies as they emerge. The assertion that 'a business is only as strong as its software' has never been more accurate, and so it is crucial that the correct approach to software development is adopted in any given context.
Under the microservice architecture, an application is developed as a suite of small 'services' that are independently developed, deployed and maintained. Within this, each service is typically built around a core business capability, running its own independent processes whilst communicating with other services through simple APIs as part of a larger use case. In contrast, a monolithic application is built as a single unit, often comprised of a single client-side, server-side and database layer, with all logic for handling a single request running in a single process.
The adoption of this new style of software architecture has a number of profound implications. In particular, the independent services comprising an application are more easily managed by individual groups within your software development team, emphasising a separation of responsibilities necessary when it comes to building highly scaled applications. If you haven't experienced it for yourself, attempting to maintain a single monolithic code base across multiple teams can be a complex process fraught with problems. Changes collide, code quality suffers, and ultimately you'll be left with a less-reliable application and inefficient development cycles. With microservices, your application can scale as your company and requirements grow.
As you might have already guessed, there’s no straight-forward answer to the monolith versus microservices question. The general consensus on the debate is that an application that the traditional monolith should at least be considered at the outset, particularly where it is well-suited to more simple or lightweight solutions. Even where your ultimate goal is developing a microservices architecture to meet the demands of a complex and constantly evolving application, it should always be noted that the implementation of each individual service remains based on monolithic architecture.