A Software architecture that allows you to compose systems with many building blocks, but develop as if all the blocks were in just one place.