As a result, we can easily add more functionality to a base by either re-using existing components or by adding new ones. The components are accessed through their interfaces, which allow us to use different components (for the same interface) in different projects, e.g. development, test, stage and production, which makes Polylith an incredibly flexible way of organising code.