Encapsulation vs decomposition is a recursive problem. It can happen at any complexity scale. The trick, I think, is to find the level between the two that works for your project. Can you decompose your project into small, independent, testable units? Can a single unit be tested in isolation from all the others? One person will tell you that's a fragmented system while another person will tell you that all your software components are nicely encapsulated. It depends on your perspective and your needs.
P.S. in any case, a robust interface specification is a prerequisite to good engineering.