Imagine for a second that everything had the same interface. Everything. If this API is going to handle every situation, its surface area can't be used conditionally. E.g. we don't use certain parts for certain problem domains. Every part must be useful for every problem domain. It sounds like some kind of magical fantasy land - surely such a thing is not possible. But let's try and create one anyway just to underscore how impractical we are.

Read the rest here