# Monolith
A monolith in computing is a traditionally built application, where all the components and services are bundled together and deployed as one.
This type of infrastructure is usually contrasted against [[Microservices]]-based architecture.
## Disadvantages
### It's more difficult and expensive to scale
### It leads to dependencies
During development, monolith components share common libraries that require significant communication and scheduling overhead to update. [^prakash]
### It creates contention during deployment
Having multiple engineers working on a monolith can lead to struggles around merge conflicts, environment schedules, and deployment priorities.
### It reduces flexibility
Because monoliths are deployed as one, you can't update a component of it without changing the whole application. When a component is redeployed or restarted, the entire stack must be redeployed or restarted as well. This setup discourages component modification or replacement.
Technological decisions are front-loaded: frameworks and technologies chosen at the start of the development process cannot easily be changed.
### It can lead to decreased availability
## Advantages
### It's simpler, so fewer things can go wrong
### It can lead to increased availability
## [[Microservices vs Monoliths]]
[^prakash]: Prakash, S. (2017). _Performance testing of event-driven microservices_. Retrieved from https://medium.com/capital-one-tech/performance-testing-of-event-driven-microservices-f5de74305985 . [[Performance Testing of Event-Driven Microservices]]