Let's compare Polylith with the three architectures we looked at earlier.
Polylith's single development environment allows us to work with all of our building blocks in one place. This disconnects our development experience from our chosen deployment architecture.
Untangling development from deployment allows us to delay our deployment decisions until the last possible moment. This delay allows us to avoid "premature distribution" and keeps our systems as simple as possible, for as long as possible.
All the code in a Polylith development environment can run within a single REPL, giving you a first-class REPL-driven development and debugging experience.
The Polylith Tool keeps track of which bases and components have changed since the last successful test or build and only compiles and tests those. This gives us lightning fast feedback both in our local development environment and when we build and deploy in our Continuous Integration environment.
Component interfaces are connected to their implementation with simple fuction calls. This means that we can safely refactor interfaces with our IDE/code editor.
Components are inherently reusable because they are encapsulated, stateless and composable. They can be reused within a single system and across multiple systems.
Polylith building blocks are just code; a collection of functions behind an interface. Interfaces guarantee encapsulation, which ensures our codebase remains untangled, leading to simpler systems.
The encapsulated and functional nature of components makes them easy to test in isolation, and as complete systems.
Not only does Polylith allow us to delay our deployment decisions, it also allows us to easily change our deployment architecture, when the need arises. That's because Polylith makes it easy to recombine our components into any number of systems and deploy them to meet our performance needs.
Polylith allows us to avoid making premature design decisions about the distribution of our solution. This allows us to avoid "premature distribution", which reduces deployment complexity and lowers operational costs.
The Polylith Tool makes the build and deployment process simple and seamless, both locally and in our CI (Continuous Integration) environment.
When our Polylith system isn't achieving the performance/scalability we need, then Polylith makes it easy to create new systems and scale horizontally. We can reuse existing components within each new system.
Seeing all these green traffic lights for Polylith probably looks too good to be true. The best way to find out is to try Polylith for yourself!