What is a Monolithic Application?
In a monolithic application, the entire application code not only resides in one project, written in one programming framework, but is also deployed as one project. Typical JEE applications are monoliths. The application will address all aspects of the features and functionality that make up the application. Typically, a monolithic application's codebase will be huge, running into several thousands of lines of code. Monoliths are simple to understand and maintain.
The Case for Microservices
The challenges with monoliths include:
- Too many developers working on the codebase.
- The codebase has many modules, and their interactions are getting too complex.
- The codebase is getting difficult to maintain.
- Technical debt is building up fast - that reflects the implied cost of rework caused by choosing an easy solution in the beginning, in place of a better approach that would have taken longer to implement.
- A single-line code change requires you to deploy the entire complex application, thereby creating a need to run all complex regression tests for every simple change and requiring significant downtime for the entire application.
- Horizontal scaling may be difficult to achieve, especially if state is maintained.
- Being married to old technology makes it very difficult to move to a newer framework, as the entire application needs to be rewritten.
Microservices

Microservices are independently deployable services that can collaborate to form the full application. Typically, a microservice's application codebase is only several hundred lines of code.
Just having RESTful API services does not make it a microservice architecture when they are all deployed together or if they all use a common database.
The Ideal Distributed Software Application
- Great Performance - low latency, great throughput, etc.
- Flexible Architecture - add/delete features and functionality without impacting the existing codebase or deployments.
- Keep data secure.
Microservices is an architectural style that is getting very popular due to its ability to address the above needs.
Drawbacks of Microservices
- Too many services interacting with each other brings its share of configuration challenges.
- Too many services also make it hard to understand how they are working together.
- Can lead to performance issues if not architected well.
However, there are tools available today to address these challenges.
Reference: