# 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]]