That depends on what you're designing for - enforcing boundaries is good strategy for long-term maintainable software design; we might say "robust" design. "Effective" is a bit broad.

I disagree with putting design patterns at this level of importance, and I say this as a vocal patterns advocate. Patterns are a means to an end. They aren't a focus of good design, they are a tool employed in its pursuit.