Julian Bucknall (DevExpress) has written a great post on interface versus implementation inheritance, that also touches on developer skills.
For me, having developers produce loosely coupled objects that have a single responsibility and which support change over time, has been problematic on almost every project and team I have managed.
That all developers are highly capable and motivated - is an illusion. The reality is that it's really hard to find competent .NET developers who can write more than procedural code (within the guise of an object oriented language). That perhaps simply reflects that so many .NET projects are simple RAD applications that really are just a window onto data - no complex domain at all.