Instead of having a monolithic code base that caters to many concerns, you can instead break the application down into many services which, when working together, make up the whole application. Each service should:
- Have one or very few concerns
- Be de-coupled from other services
- Be stateless (if possible)

With a monolithic application, all the components must be deployed together as a single unit. if you want to scale your application, you must scale by deploying more instances of the monolith. Furthermore, because there're no clear boundaries between different service, you'd often find tightly-coupled code in the code base. ...