The best projects I find are small libraries that mostly use other small libraries that mostly... Less a flat bus than a pyramid.
Within-language interfaces can be incredibly rich, conveying a huge amount of information. When you split into separate components you throw all that away, and end up spending more time parsing and marshalling than actually doing your business logic. The right data structure can make the problem look trivial, and is far easier to understand than the behaviour of a system of loosely coupled pieces.